SVM实现多分类的三种方案
SVM本身是一個二值分類器
SVM算法最初是為二值分類問題設(shè)計的,當(dāng)處理多類問題時,就需要構(gòu)造合適的多類分類器。
目前,構(gòu)造SVM多類分類器的方法主要有兩類
(1)直接法,直接在目標函數(shù)上進行修改,將多個分類面的參數(shù)求解合并到一個最優(yōu)化問題中,通過求解該最優(yōu)化問題“一次性”實現(xiàn)多類分類。這種方法看似簡單,但其計算復(fù)雜度比較高,實現(xiàn)起來比較困難,只適合用于小型問題中;
(2)間接法,主要是通過組合多個二分類器來實現(xiàn)多分類器的構(gòu)造,常見的方法有one-against-one和one-against-all兩種。
一對多法(one-versus-rest,簡稱OVR SVMs)
訓(xùn)練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構(gòu)造出了k個SVM。分類時將未知樣本分類為具有最大分類函數(shù)值的那類。
假如我有四類要劃分(也就是4個Label),他們是A、B、C、D。
于是我在抽取訓(xùn)練集的時候,分別抽取
(1)A所對應(yīng)的向量作為正集,B,C,D所對應(yīng)的向量作為負集;
(2)B所對應(yīng)的向量作為正集,A,C,D所對應(yīng)的向量作為負集;
(3)C所對應(yīng)的向量作為正集,A,B,D所對應(yīng)的向量作為負集;
(4)D所對應(yīng)的向量作為正集,A,B,C所對應(yīng)的向量作為負集;
使用這四個訓(xùn)練集分別進行訓(xùn)練,然后的得到四個訓(xùn)練結(jié)果文件。
在測試的時候,把對應(yīng)的測試向量分別利用這四個訓(xùn)練結(jié)果文件進行測試。
最后每個測試都有一個結(jié)果f1(x),f2(x),f3(x),f4(x)。
于是最終的結(jié)果便是這四個值中最大的一個作為分類結(jié)果。
評價:
這種方法有種缺陷,因為訓(xùn)練集是1:M,這種情況下存在biased.因而不是很實用。可以在抽取數(shù)據(jù)集的時候,從完整的負集中再抽取三分之一作為訓(xùn)練負集。
一對一法(one-versus-one,簡稱OVO SVMs或者pairwise)
其做法是在任意兩類樣本之間設(shè)計一個SVM,因此k個類別的樣本就需要設(shè)計k(k-1)/2個SVM。
當(dāng)對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。
Libsvm中的多類分類就是根據(jù)這個方法實現(xiàn)的。
假設(shè)有四類A,B,C,D四類。在訓(xùn)練的時候我選擇A,B; A,C; A,D; B,C; B,D;C,D所對應(yīng)的向量作為訓(xùn)練集,然后得到六個訓(xùn)練結(jié)果,在測試的時候,把對應(yīng)的向量分別對六個結(jié)果進行測試,然后采取投票形式,最后得到一組結(jié)果。
投票是這樣的:
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)
評價:這種方法雖然好,但是當(dāng)類別很多的時候,model的個數(shù)是n*(n-1)/2,代價還是相當(dāng)大的。
層次支持向量機
層次分類法首先將所有類別分成兩個子類,再將子類進一步劃分成兩個次級子類,如此循環(huán),直到得到一個單獨的類別為止。對層次支持向量機的詳細說明可以參考論文《支持向量機在多類分類問題中的推廣》(劉志剛,計算機工程與應(yīng)用,2004)
轉(zhuǎn)載請注明本文地址:SVM實現(xiàn)多分類的三種方案
總結(jié)
以上是生活随笔為你收集整理的SVM实现多分类的三种方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SONY图像传感器列表
- 下一篇: golang 日志分析_容器日志采集利器