支援向量機SVM 實現多分類問題的解決方案

2021-10-11 14:32:50 字數 2449 閱讀 1224

總結眾所周知,支援向量機svm是機器學習中典型的二值分類演算法。但現實生活中,有很多實際應用是沒有辦法用簡單的二值分類器去完成分類的。因此,為了拓展支援向量機svm的應用場景,必須考慮在多分類情況下的演算法實現。

原本應用在二值分類上的svm演算法是否可以應用在多分類問題上呢?答案是肯定的。

通過重新構造後。svm演算法便可以應用到多分類問題中去。具體的解決方案主要有兩大類,第一類是直接法,這種方法的核心是直接修改目標函式,將多分類問題中的多個引數整合到乙個函式中,。這種方法看似簡單,但其計算複雜度比較高,實現起來比較困難,只適合用於小型問題中。另一類是間接法,主要是通過組合多個二分類器來實現多分類器的構造,常見的方法有one-against-oneone-against-all兩種。

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

拿文章分類舉例,比如我們有5個文章類別,第一次就把類別1的樣本定為正樣本,其餘2,3,4,5的樣本合起來定為負樣本,這樣得到乙個兩類分類器,它能夠指出一篇文章是還是不是第1類的;第二次我們把類別2 的樣本定為正樣本,把1,3,4,5的樣本合起來定為負樣本,得到乙個分類器,如此下去,我們可以得到5個這樣的兩類分類器(總是和類別的數目一致)。到了有文章需要分類的時候,我們就拿著這篇文章挨個分類器的問:是屬於你的麼?是屬於你的麼?哪個分類器點頭說是了,文章的類別就確定了。

這種方法的好處是每個優化問題的規模比較小,而且分類的時候速度很快(只需要呼叫5個分類器就知道了結果)。但有時也會出現兩種很尷尬的情況,例如拿一篇文章問了一圈,每乙個分類器都說它是屬於它那一類的,或者每乙個分類器都說它不是它那一類的,前者叫分類重疊現象,後者叫不可分類現象。分類重疊倒還好辦,隨便選乙個結果都不至於太離譜,或者看看這篇文章到各個超平面的距離,哪個遠就判給哪個。不可分類現象就著實難辦了,只能把它分給第6個類別了……更要命的是,本來各個類別的樣本數目是差不多的,但「其餘」的那一類樣本數總是要數倍於正類(因為它是除正類以外其他類別的樣本之和嘛),這就人為的造成了「資料集偏斜」問題。

這種方案的具體做法是在任意兩類樣本之間設計乙個svm,因此k個類別的樣本就需要設計k(k-1)/2個svm。當對乙個未知樣本進行分類時,最後得票最多的類別即為該未知樣本的類別。

每次選乙個類的樣本作正類樣本,而負類樣本則變成只選乙個類(稱為「一對一」的方法),這就避免了前面所提到的資料偏斜。因此過程就是算出這樣一些分類器,第乙個只回答「是第1類還是第2類」,第二個只回答「是第1類還是第3類」,第三個只回答「是第1類還是第4類」,如此下去,你也可以馬上得出,這樣的分類器應該有5 x 4/2=10個(通式是,如果有k個類別,則總的兩類分類器數目為k(k-1)/2)。雖然分類器的數目多了,但是在訓練階段(也就是算出這些分類器的分類平面時)所用的總時間卻比「一對多」方法少很多,在真正用來分類的時候,把一篇文章扔給所有分類器,第乙個分類器會投票說它是「1」或者「2」,第二個會說它是「1」或者「3」,讓每乙個都投上自己的一票,最後統計票數,如果類別「1」得票最多,就判這篇文章屬於第1類。這種方法顯然也會有分類重疊的現象,但不會有不可分類現象,因為總不可能所有類別的票數都是0。看起來夠好麼?其實不然,想想分類一篇文章,我們呼叫了多少個分類器?10個,這還是類別數為5的時候,類別數如果是1000,要呼叫的分類器數目會上公升至約500,000個(類別數的平方量級)。這如何是好?

是由piatt提出的決策導向的迴圈圖dag匯出的,是針對「一對一」svms存在誤分,拒分現象提出的。這種方法的訓練過程類似於「一對一」方法,類別數增加時,速度快於前兩者,且簡單易行,對於一般規模的多類分類問題行之有效。是基於一對一方式的優化,不會出現拒分。

這樣在分類時,我們就可以先問分類器「1對5」(意思是它能夠回答「是第1類還是第5類」),如果它回答5,我們就往左走,再問「2對5」這個分類器,如果它還說是「5」,我們就繼續往左走,這樣一直問下去,就可以得到分類結果。好處在哪?我們其實只呼叫了4個分類器(如果類別數是k,則只呼叫k-1個),分類速度飛快,且沒有分類重疊和不可分類現象!

另外,由於其特殊的結構,故有一定的容錯性(體現在最後一層得出分類時,乙個樣本的類別判定依據可以來自兩個svm),分類精度較一般的二叉樹方法高。然而,由於存在自上而下的「誤差累積」現象是層次結構固有弊端,dag-svms也逃脫不掉。即如果在某個節點上發生了分類錯誤,則會把分類錯誤延續到該結點的後續結點上。

決策樹的基本思想是從根節點開始,採用某種方法將該結點所包含的類別劃分為兩個子類,然後再對兩個子類進一步劃分,如此迴圈,直到子類中只包含乙個類別為止。這樣就得到乙個倒立的二叉樹。最後,在二叉樹各決策節點訓練支援向量機分類器,實現對識別樣本的分類。決策樹支援向量機多分類方法有很多種,不同方法的主要區別在於設計樹結構的方法不同。

用svm解決多分類問題存在困難。傳統的svm就是解決二分類問題的,上面有介紹不少解決多分類問題的svm技巧,不過各種方法都一定程度上的缺陷。可以根據自身需要,靈活使用svm來解決多分類問題。

支援向量機多分類

支援向量機多分類可以採用兩種方式,1.一對一 one vs one 2.一對多 one vs rest 1.one vs rest clc clear all iris label,iris data libsvmread iris.scale 讀取資料到matlab格式 labels unique...

分類 SVM 支援向量機

svm,support vector machine,可用於模式分類和非線性回歸。支援向量機的主要思想是建立乙個分類超平面作為決策曲面,使得正例和反例之間的隔離邊緣被最大化。支援向量機的理論基礎是統計學習理論,更精確的說,支援向量機是結構風險最小化的近似實現。這個原理基於這樣的事實 學習機器在測試資...

支援向量機多分類libSVM

支援向量機多分類可以採用兩種方式,1.一對一 one vs one 2.一對多 one vs rest 1.one vs rest clc clear all iris label,iris data libsvmread iris.scale 讀取資料到matlab格式 labels unique...