8.SVM用於多分類


從前面SVM學習中可以看出來,SVM是一種典型的兩類分類器。而現實中要解決的問題,往往是多類的問題。如何由兩類分類器得到多類分類器,就是一個值得研究的問題。

以文本分類為例,現成的方法有很多,其中一勞永逸的方法,就是真的一次性考慮所有樣本,並求解一個多目標函數的優化問題,一次性得到多個分類面,就像下圖這樣:

image

多個超平面把空間划分為多個區域,每個區域對應一個類別,給一篇文章,看它落在哪個區域就知道了它的分類。 只可惜這種算法還基本停留在紙面上,因為一次性求解的方法計算量實在太大,大到無法實用的地步。

目前,存在的方法主要有:

1. “1-V-R方式”,就是每次仍然解一個兩類分類的問題。比如我們有5個類別,首先把類別1的樣本定為正樣本,其余的樣本合起來定為負樣本,得到一個兩類分類器,它能夠指出新的樣本是不是第1類的;然后我們把類別2的樣本定為正樣本,把1、3、4、5的樣本合起來定為負樣本,得到一個分類器,如此下去,最終可以得到5個這樣的兩類分類器。這種方法的好處是每個優化問題的規模比較小,而且分類的時候速度很快(對於k類問題,把其中某一類的n個訓練樣本視為一類,所有其他類別歸為另一類,因此只有k個分類器)。

但有時可能會出現兩種特殊情況,某樣本屬於多個類別(分類重疊現象)或者是某樣本沒有判別為任何類別(不可分類現象)。而且,如果各個類別的樣本數目是差不多的,“其余”那一類樣本數總是要數倍於正類,這就人為的造成了上一節所說的“數據集偏斜”問題。

2. “1-V-1方式”,也就是我們所說的one-against-one方式。這種方法把其中的任意兩類構造一個分類器,共有(k-1)×k/2個分類器。雖然分類器的數目多了,但是在訓練階段所用的總時間卻比“一類對其余”方法少很多。

最后預測中如果出現分類重疊現象,可以采用競爭方式(各個分類器向k個類別投票,取得票最高類)。但是如果類別數非常大時,要調用的分類器數目會達到類別數的平方量級,預測的運算量不可小覷。

3. “有向無環圖(DAG-SVM)”,該方法在訓練階段采用1-V-1方式,而判別階段采用一種兩向無環圖的方式。

image

如果類別數是k,則只調用k-1個分類器即可。但是如果開始的分類器回答錯誤,那么后面的分類器是無論如何也無法糾正它的錯誤的,其實對下面每一層的分類器都存在這種錯誤向下累積的現象。也有一些方法可以改善整體效果,我們總希望根節點少犯錯誤為好,因此參與第一次分類的兩個類別,最好是差別特別大,或者取在兩類分類中正確率最高的那個分類器作根節點,或者我們讓兩類分類器在分類的時候,不光輸出類別的標簽,還輸出一個類似“置信度”,當它對自己的結果不太自信的時候,我們就不光按照它的輸出走,它可會按照一定的概率走向另一分支。

LibSVM采用的是1-V-1方式,因為這種方式思路簡單,並且許多實踐證實效果比1-V-R方式要好。對於 nr_class 個類的組合方式為:

for(i=0;i<nr_class;i++)
{
    for(j=i+1;i<nr_class;j++)
    {類i–V–類j}
}


免責聲明!

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



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