1. 程式人生 > >從二分類到多分類

從二分類到多分類

從二分類到多分類,實際採用的是拆解法思想:將多分類問題拆分成許多二分類問題,為每一個二分類問題訓練一個分類器。測試時,對這些分類器的結果進行整合,得到最終預測結果。

根據拆分策略不同,分為以下三類:

一對一(One vs. One, OvO)

訓練:將N個類別兩兩配對,產生N(N−1)/2個二分類任務,每個任務使用一個二分類學習器進行學習;

測試:多個二分類學習器預測得到結果中,最多的類別作為最終的分類結果。

一對其餘(One vs. Rest, OvR)

訓練:每次將一個類別作為正例,其餘其他類別樣例均作為反例,產生N個二分類任務;

測試:若僅有一個分類器預測為正類,則屬於該分類器所屬類別。若有多個二分類器預測為正類,則通常考慮各分類器的預測置信度,選擇置信度最大的類別作為分類結果。

多對多(Many vs. Many, MvM)

每次將若干個類作為正類,若干個其他類作為反類(可見OvO和OvR是MvM的特例),MvM的正反類構造必須有特殊的設計,不能隨意選取;以下一種最常用的MvM技術是:糾錯輸出碼(Error Correcting Output Codes, ECOC);

ECOC編解碼(訓練和預測):

編碼:對N個類別做M次劃分,每次劃分將一部分類別劃為正類,一部分劃為反類,從而形成一個二分類訓練集;這樣一共產生M個訓練集,可以訓練出M個分類器;

解碼:M個分類器分別對測試樣本進行預測,這些預測結果標記組成一個編碼;將這些預測結果編碼與每個類別各自的編碼進行比較,返回其中距離最小的類別作為最終預測結果;

值得注意的是,在劃分時,有兩種形式:一是二元碼,即每一類要麼劃分為正類要麼負類;二是三元碼,即除了正負類,也可以作為停用類。下面舉個例子:

以圖(a)二元碼為例,使用五種劃分方式,以f3為例,可以看出C3和C4類被劃為正類,C1和C2被劃為負類。測試樣本被每個分類器預測,得到一組編碼,和每類編碼進行距離比較,取最近的進行標註。三元碼同理,距離計算如下:

ECOC特點:

ECOC對個別學習器的分類錯誤具有一定的容忍和修正能力(因此被稱為糾錯輸出碼);

ECOC編碼越長,即學習器數量越多,糾錯能力越強,但是計算、儲存開銷會增大;

對有限類別數,ECOC編碼長度超過一定範圍就會失去意義。