二分類實現多分類

2021-09-26 00:11:41 字數 2045 閱讀 6559

很多分類器在數學解釋時都是以二分類為例,其數學推導不適用於多分類,模型本身也只能用於二分類,如svm,adaboost ,

但是現實中很多問題是多分類的,那這些模型還能用嗎

改變這些模型的原理,重新推導數學公式,然後**實現。

這種方法一般不可取,難度大,而且很麻煩

也叫一對其餘法

假設有n個類,每次把乙個類作為正例,其他類作為反例,訓練乙個二分類器,然後再拿乙個類作為正例,其他類作為反例,再訓練乙個二分類器,依次訓練n個分類器,組成多分類器。

如何進行**呢?

假設有5個類,來個新樣本,

放入第乙個二分類器(假設2為正例),看看是不是2類,如果是,記下乙個,如果不是,記下乙個 ,

然後放入下個二分類器(假設1為正例),看看是不是1類,如果是,記下乙個,否則,記下,

依次...

最後統計記下的結果,被分為每個類別的次數,取max

這個過程用如下圖表示

左圖

1. 每條直線就是乙個二分類器,每次都把乙個類和其他類分開

2. 三叉線為多分類器,實際上這條線是不存在的

3. 直線之間不可能平行,那必然相交,這意味著什麼呢?

// 來看紫色的點

// 在三角和其他類的分類器中,被分為三角;在方形與其他類的分類器中,被分為方形;在圓圈與其他類的分類器中,被分為

// 此時 三角和方形 2:2 打平,那到底紫色點屬於哪一類?只能隨便挑

// 這就是說存在一些模稜兩可的分類區域

右圖

紫色區域就是模稜兩可的分類區域

與一對多法思路類似,方法不同

假設有n個類,每次從中取2個類,訓練乙個二分類器,總共需要 cn

2=n*(n-1)/2個分類器,組成多分類器。

那如何**呢?

假設有5個類,來個新樣本,

放入第乙個分類器(1and2),若是1,記為,否則記為;

放入第二個分類器(1and3),若是1,記為,否則記為;

依次...

最後統計結果,被分到每個類的次數,取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

這種方法的**可以依次送入二分類器,得到乙個確切的類即可停止。

二分類 多分類

怎麼樣把兩類的分類的模型推廣到多類上?答 a.一對多法 one versus rest,簡稱ovr svms 訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個svm。分類時將未知樣本分類為具有最大分類函式值的那類。b.一對一法 one versus on...

從二分類到多分類

從二分類到多分類,實際採用的是拆解法思想 將多分類問題拆分成許多二分類問題,為每乙個二分類問題訓練乙個分類器。測試時,對這些分類器的結果進行整合,得到最終 結果。根據拆分策略不同,分為以下三類 一對一 one vs.one,ovo 訓練 將n個類別兩兩配對,產生n n 1 2個二分類任務,每個任務使...

決策樹matlab實現二分類或者多分類

maketree函式遞迴建立樹 tree struct isnode 1,a 0.0,mark 0.0,child 所有分支遞迴的存在child 中 函式gan d 計算d的資訊率 可以自動適應不同的分類標籤和類別個數 function tree maketree d,a tree struct i...