文本分類--多分類


  文本分類算是自然語言處理領域最最常見的問題了,開源的工具也很好用,但是苦於訓練速度緩慢,需要引進多核的版本,開源提供的多核支持參數有限,而同事提供的又有語言障礙,覺得自己探索下多分類器。

    分類算法有很多,但是效果較好的基本就是LR和SVM,而這兩個算法業內著名的開源代碼應該就是liblinear和libsvm,libsvm支不支持多核暫時還未了解,但是liblinear支持的多核版本也就三組(0、2、11),正好避開了我需要用的那組參數,於是就摸索下liblinear的train代碼。

 

一、先說分類

      二分類是分類問題中最最基本的功能,這個功能LR和SVM都支持,接着說多分類問題。

     多分類可以分為兩種:(1).直接多分類,(2)利用多重二分類組合

  1.1 直接多分類

    softmax就是LR版本的直接多分類形式,而SVM自己就可以直接實現多分類,在目標函數上進行修改,將多個分類面的參數求解合並到一個最優化問題中,通過求解該最優化問題“一次性”實現多類分類類。這種方法看似簡單,但其計算復雜度比較高,實現起來比較困難,只適合用於小型問題中。因此利用多重二分類更為常見。

 

  1.2 利用多重二分類組合

    (a)一對多法(one-versus-rest,簡稱OVRSVMs)。

    訓練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構造出了k個分類器。分類時將未知樣本分類為具有最大分類函數值的那類。

    假如我有四類要划分(也就是4個Label),他們是A、B、C、D。於是我在抽取訓練集的時候,分別抽取A所對應的向量作為正集,B,C,D所對應的向量作為負集;B所對應的向量作為正集,A,C,D所對應的向量作為負集;C所對應的向量作為正集,A,B,D所對應的向量作為負集;D所對應的向量作為正集,A,B,C所對應的向量作為負集,這四個訓練集分別進行訓練,然后的得到四個訓練結果文件,在測試的時候,把對應的測試向量分別利用這四個訓練結果文件進行測試,最后每個測試都有一個結果f1(x),f2(x),f3(x),f4(x).於是最終的結果便是這四個值中最大的一個。

    原作者注:這種方法有種缺陷,因為訓練集是1:M,這種情況下存在biased.因而不是很實用.

    我注:liblinear采用的就是這種方法,因而訓練速度快,但是占用內存很大。

 

    (b)一對一法(one-versus-one,簡稱OVOSVMs或者pairwise)。

    其做法是在任意兩類樣本之間設計一個分類器,因此k個類別的樣本就需要設計k(k-1)/2個二分類器。當對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。    

    還是假設有四類A,B,C,D四類。在訓練的時候我選擇A,B;A,C; A,D; B,C;B,D;C,D所對應的向量作為訓練集,然后得到六個訓練結果,在測試的時候,把對應的向量分別對六個結果進行測試,然后采取投票形式,最后得到一組結果。

    投票是這樣的.
      A=B=C=D=0;
      (A, B)-classifier 如果是A win,則A=A+1;otherwise,B=B+1;
      (A,C)-classifer 如果是A win,則A=A+1;otherwise, C=C+1;
      ...
      (C,D)-classifer 如果是A win,則C=C+1;otherwise,D=D+1;
      The decision is the Max(A,B,C,D)

    原作者注:這種方法雖然好,但是當類別很多的時候,model的個數是n*(n-1)/2,代價還是相當大的.

    我注:libsvm采用的就是該種方法,因而准確率會比liblinear高,但是速度會慢很多。

    

    (c)層次支持向量機(H-SVMs)。

    層次分類法首先將所有類別分成兩個子類,再將子類進一步划分成兩個次級子類,如此循環,直到得到一個單獨的類別為止。

    對c的詳細說明可以參考論文《支持向量機在多類分類問題中的推廣》(計算機工程與應用。2004)##沒有了解,有空關注下

 

    (d)DAG-SVMS是由Platt提出的決策導向的循環圖DDAG導出的,是針對“一對一”SVMS存在誤分、拒分現象提出的。算法在訓練階段與“一對一”法同,也要構每兩類間的分類器,既有n(n-1)/2個分類器。但在分類階段,該方法將所有分類器構成一個兩向有向環圖,包括n(n-1)/2個節點和n個葉。其中每個節點為一個分類器,並與下一層的兩個節點(或葉)相連。當對一個未知樣本進行分類時,首先從頂部的節點(包含兩類)開始,據節點的分類結果用下一層的左節點或右節點繼續分類,直到達到底層某個葉為止,該葉所表示類別即為未知樣本的類別。DAGSVM在訓練上同OVOSVM,都需要訓練n*(n-1)/2個分類器,但是在分類的時候借助有向環圖的結構,可以只利用(n-1)個分類器就可以完成。而效率上有提升。

    

     但是DAG-SVMS在分類過程中存在誤差積累現象,即若在某個節點處發生分類錯誤,則會把分類錯誤延續到該節點的下層節點中、分類錯誤在越接近根節點的位置發生,誤差積累的現象就會越嚴重,分類的性能也會越差。

    我注:二分類真正的結合決策樹了……

 

 

 

 

參考文獻:

      1.http://blog.sina.com.cn/s/blog_4c98b96001009b8d.html

  2.http://www.doc88.com/p-6092154562202.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM