SVM實現多分類的三種方案
本身是一個二值 器
SVM演算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。
目前,構造SVM多類分類器的方法主要有兩類
(1)直接法,直接在目標函式上進行修改,將多個分類面的引數求解合併到一個最最佳化問題中,透過求解該最最佳化問題“一次性” 多類分類。這種方法看似簡單,但其計算複雜度比較高,實現起來比較困難,只適合用於小型問題中;
(2)間接法,主要是透過組合多個二分類器來實現多分類器的構造,常見的方法有one-against-one和one-against-all兩種。
一對多法(one-versus-rest,簡稱OVR SVMs)
訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函式值的那類。
假如我有四類要劃分(也就是4個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所對應的向量作為負集;
使用這四個訓練集分別進行訓練,然後的得到四個訓練結果檔案。
在測試的時候,把對應的測試向量分別利用這四個訓練結果檔案進行測試。
最後每個測試都有一個結果f1(x),f2(x),f3(x),f4(x)。
於是最終的結果便是這四個值中最大的一個作為分類結果。
評價:
這種方法有種缺陷,因為訓練集是1:M,這種情況下存在biased.因而不是很實用。可以在抽取資料集的時候,從完整的負集中再抽取三分之一作為訓練負集。
一對一法(one-versus-one,簡稱OVO SVMs或者pairwise)
其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k-1)/2個SVM。
當對一個未知樣本進行分類時,最後得票最多的類別即為該未知樣本的類別。
Libsvm中的多類分類就是根據這個方法實現的。
假設有四類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)-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,代價還是相當大的。
層次支援向量機
層次分類法首先將所有類別分成兩個子類,再將子類進一步劃分成兩個次級子類,如此迴圈,直到得到一個單獨的類別為止。對層次支援向量機的詳細說明可以參考論文《支援向量機在多類分類問題中的推廣》(劉志剛,計算機工程與應用,2004)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2168864/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python實現多分類評價指標Python指標
- 三種UIScrollView巢狀實現方案UIView巢狀
- 【Redis核心知識】實現秒殺的三種方案Redis
- 用Python實現一個SVM分類器策略Python
- tf.keras實現邏輯迴歸和softmax多分類Keras邏輯迴歸
- python中的scikit-learn庫來實現SVM分類器。Python
- 使用sklearn實現svm--用於機械故障分類
- springAOP的三種實現方式Spring
- 【springboot】介面多實現類,選擇性注入的4種解決方案Spring Boot
- 學習筆記17:DenseNet實現多分類(卷積基特徵提取)筆記SENet卷積特徵
- Scikit-learn SVM 實現
- 實現AI的三種途徑AI
- 機器學習(三):理解邏輯迴歸及二分類、多分類程式碼實踐機器學習邏輯迴歸
- 7種 實現web實時訊息推送的方案,7種!Web
- 實現高可用的兩種方案與實戰
- 快速排序三種實現排序
- Redis實現分散式鎖的幾種方案Redis分散式
- JS實現單例模式的多種方案JS單例模式
- 延遲訊息的五種實現方案
- js實現繼承的三種方式JS繼承
- opencv SVM分類DemoOpenCV
- 概念篇-多分類多標籤
- Svm演算法原理及實現演算法
- Go定時器的三種實現方式Go定時器
- 單點登入的三種實現方式
- Java中Singleton的三種實現方式解析Java
- 實現三欄佈局的幾種方法
- 實現圖片染色效果的三種方式
- 快速排序的三種實現方法 (C++)排序C++
- 三種方法實現CSS三欄佈局CSS
- 一種app模組化實現方案APP
- 三種方法實現strlen函式函式
- python 三種方式實現截圖Python
- 支援向量機(SVM)和python實現(二)Python
- 介紹一種更方便的代理池實現方案
- 實現ABAP條件斷點的三種方式斷點
- Java實現多執行緒的三種方式Java執行緒
- 實現布隆過濾器的三種方式過濾器