引言
很多分類器在數學解釋時都是以二分類為例,其數學推導不適用於多分類,模型本身也只能用於二分類,如SVM,Adaboost ,
但是現實中很多問題是多分類的,那這些模型還能用嗎
二分類 to 多分類
更改數學原理
改變這些模型的原理,重新推導數學公式,然后代碼實現。
這種方法一般不可取,難度大,而且很麻煩
一對多法
也叫一對其余法
假設有N個類,每次把一個類作為正例,其他類作為反例,訓練一個二分類器,然后再拿一個類作為正例,其他類作為反例,再訓練一個二分類器,依次訓練N個分類器,組成多分類器。
如何進行預測呢?
假設有5個類,來個新樣本,
放入第一個二分類器(假設2為正例),看看是不是2類,如果是,記下一個{2},如果不是,記下一個{1 3 4 5} ,
然后放入下個二分類器(假設1為正例),看看是不是1類,如果是,記下一個{1},否則,記下{2 3 4 5},
依次...
最后統計記下的結果,被分為每個類別的次數,取max
這個過程用如下圖表示
左圖
1. 每條直線就是一個二分類器,每次都把一個類和其他類分開
2. 三叉線為多分類器,實際上這條線是不存在的
3. 直線之間不可能平行,那必然相交,這意味着什么呢?
// 來看紫色的點
// 在三角和其他類的分類器中,被分為三角;在方形與其他類的分類器中,被分為方形;在圓圈與其他類的分類器中,被分為{三角 方形}
// 此時 三角和方形 2:2 打平,那到底紫色點屬於哪一類?只能隨便挑
// 這就是說存在一些模棱兩可的分類區域
右圖
紫色區域就是模棱兩可的分類區域
一對一法
與一對多法思路類似,方法不同
假設有N個類,每次從中取2個類,訓練一個二分類器,總共需要 CN2=N*(N-1)/2個分類器,組成多分類器。
那如何預測呢?
假設有5個類,來個新樣本,
放入第一個分類器(1and2),若是1,記為{1},否則記為{2};
放入第二個分類器(1and3),若是1,記為{1},否則記為{3};
依次...
最后統計結果,被分到每個類的次數,取max
這種方法會不會產生一對多法的陰影呢?也會,如下圖
從圖上看出陰影部分小很多。
所以一對一法的准確率要高於一對多法,但其分類器個數較多, N*(N-1)/2-2,訓練速度慢
多對多法
分為兩個步驟
1. 編碼:對N個類別進行M次不同的划分,然后訓練M個二分類器。
2. 解碼:M個二分類器分別對樣本進行預測,得到M長的編碼向量。
把編碼向量與每個類別對應的向量進行比較,如計算距離,取距離最近的作為目標類別。
這里的類別划分通過編碼矩陣指定,編碼矩陣主要有,二元碼(每個類別分別指定正類反類),三元碼(正,反,停用)
計算距離時,可以靈活計算,如每個分類器 的編碼與預測編碼相減,取絕對值,如上圖,相同時相減為0,不同時相減取絕對值為2,和C1類別相比有3個分類器結果不同,最后計算距離為3,
當然也可以不同為1,同為0,最后選出的結果也是一樣的
一般來說編碼越長,意味着分類器越多,計算量也越大,但不一定效果越好
層次分類法
如層次支持向量機 H-SVMs
首先將所有類別分為2類,訓練一個二分類器,然后將每個子類分為2類,訓練二分類器,依次,直到所有類分開。
1, 2, 3, 4,5, 6, 7
1, 2, 3, | 4, 5, 6, 7
1, || 2, 3 | 4, 5 ||| 6, 7
2||||3 4|||||5 6||||||7
這種方法的預測可以依次送入二分類器,得到一個確切的類即可停止。
參考資料:
http://www.cnblogs.com/litthorse/p/9332370.html
https://blog.csdn.net/hit2015spring/article/details/72902927