svm对未知数据的分类_SVM多分类之一对一与一对多
冒泡~今天是在實驗室劃水的最后一天啦!
明天就可以回我滴廈門啦~來更個新!
關于SVM的基本原理可參考之前寫過的《探索SVM(支持向量機)之旅》那個時候主要是理論了解也就知道個大概(雖然現在也只是了解更多一點罷了)
之前更多把SVM定義在二分類問題上 今天著重記錄的是SVM完成多分類。
SVM多分類
SVM算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。構造多分類器可以采用直接法或者間接法。 但是若采取直接法即SVM直接在目標函數上進行修改的話,將多個分類面的參數求解合并到一個最優化問題上,顯然難度太大,其計算復雜度比較高,實現起來比較困難,只適合用于小型問題中。
所以重點講一下間接法
間接法的分類:一對多、一對一
一對多(one-versus-rest,簡稱OVR SVMs)
訓練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函數值的那類。
舉個例子:假如我有四類要劃分(也就是有存在四個Label),他們是A、B、C、D。 于是我在抽取訓練集的時候,分別選取四個訓練集如下:
1.A所對應的向量作為正集,B,C,D所對應的向量作為負集;
2.B所對應的向量作為正集,A,C,D所對應的向量作為負集;
3.C所對應的向量作為正集,A,B,D所對應的向量作為負集;
4.D所對應的向量作為正集,A,B,C所對應的向量作為負集;
{可以概括為 自己一類為正集 其余類為負集,N個類別(N個label)有N個訓練集}
使用這四個訓練集分別進行訓練,然后的得到四個訓練結果文件。在測試的時候,把對應的測試向量分別利用這四個訓練結果文件進行測試。
最后每個測試都有一個結果f1(x),f2(x),f3(x),f4(x)。
于是最終的結果便是這四個值中最大的一個作為分類結果。
評價:
優點:訓練k個分類器,個數較少,其分類速度相對較快。
缺點:①每個分類器的訓練都是將全部的樣本作為訓練樣本,這樣在求解二次規劃問題時,訓練速度會隨著訓練樣本的數量的增加而急劇減慢;
②同時由于負類樣本的數據要遠遠大于正類樣本的數據,從而出現了樣本不對稱的情況,且這種情況隨著訓練數據的增加而趨向嚴重。解決不對稱的問題可以引入不同的懲罰因子,對樣本點來說較少的正類采用較大的懲罰因子C;
③還有就是當有新的類別加進來時,需要對所有的模型進行重新訓練。
{補充:有以下兩個問題:
1.一個是一個樣本可能同時屬于幾個類
那么看一下這個樣本到各個超平面的距離,哪個遠判給哪個
2.另一個是一個樣本可能不屬于任何一個
這樣這個樣本屬于第N+1類,這個類的數目遠大于N類之和,所以會造成數據偏斜問題}
一對一(one-versus-one,簡稱OVO SVMs或者pairwise)
其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就要設計k(k-1)/2個SVM。
當對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。
Libsvm(一個好用的包)中的多類分類就是根據這個方法實現的
{關于libsvm的使用說明等可以參考(https://www.cnblogs.com/jingyesi/p/4237155.html)}
舉個例子:
假設有四類A,B,C,D四類。在訓練的時候我選擇A,B; A,C; A,D; B,C; B,D;C,D所對應的向量作為訓練集(4X3/2=6),然后得到六個訓練結果,在測試的時候,把對應的向量分別對六個結果進行測試,然后采取投票形式,最后得到一組結果。
投票是這樣的:
A=B=C=D=0;
(A,B)-classifier 如果是A win,則A=A+1;otherwise,B=B+1;
(A,C)-classifier 如果是A win,則A=A+1;otherwise, C=C+1;
...
(C,D)-classifier 如果是A win,則C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)
(也就是通過看投票的分數來看分類情況)
評價:這種方法雖然好,但是當類別很多的時候,model的個數是n*(n-1)/2,代價還是相當大的。與一對多相比不會有樣本不屬于任何一類的情形出現,但是復雜度變大了。
End~
一個半月的實驗室劃水要結束啦~
希望回家的小李 也會更新!
總結
以上是生活随笔為你收集整理的svm对未知数据的分类_SVM多分类之一对一与一对多的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 按键精灵易语言c,求助(把按键精灵的源码
- 下一篇: 零基础学Arcgis(十二)地图标注与注