二分類實現多分類


引言

很多分類器在數學解釋時都是以二分類為例,其數學推導不適用於多分類,模型本身也只能用於二分類,如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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM