如何用二分類學習器解決多分類問題

使用二分類學習器解決多分類問題的基本思路是“拆解法”,也就是將多分類任務拆分成多個二分類任務求解。這裏主要介紹如何對多分類任務進行拆分,以及對拆分的多個分類器進行集成。

主要有三種拆分策略:“一對一”(One vs One,簡稱OvO)、“一對其餘”(One vs Rest,簡稱OvR)和“多對多”(Many vs Many,簡稱MvM).

一、“一對一”(OvO)

假設要對N個類別進行分類。OvO將這N個類別兩兩配對,所以一共產生\frac{N(N-1)}{2}個二分類任務,對應\frac{N(N-1)}{2}個分類器。

  • 訓練階段:按照正常的二分類算法進行訓練
  • 測試階段:新樣本同時提交給所有分類器,於是我們得到\frac{N(N-1)}{2}個分類結果,最終的結果可用過投票產生:即把被預測得到最多的類別作爲最終分類結果。

例:對四個類別進行分類,A、B、C、D。

訓練階段產生6個分類器:

測試階段,若測試的結果爲:

f1(x) = A、f2(x) = C、f3(x) = A、f4(x) = C、f5(x) = D、f6(x) = C

有3個分類器的結果都爲C,所以就把C作爲最終的結果。可以看出一對一訓練的分類器多,所以訓練的速度會比較慢。

二、“一對其餘”(OvR)

OvR是每次將一個類的樣例作爲正例、所有其他類的樣例作爲反例來訓練N個分類器。在測試時:

  • 若僅有一個分類器預測爲正類,則對應的類別標記作爲最終分類結果;
  • 若有多個分類器預測爲正類,則通常考慮各個分類器的預測置信度,選擇置信度最大的類別標記作爲最終結果。

同樣還是以上面的問題爲例,產生4個分類器:

測試階段:

f1(x) = -1、f2(x) = -1、f3(x) = +1、f4(x) = -1

所以x屬於C類。


比較OvR和OvO:

可以發現,OvR訓練的是N個分類器,而OvO訓練的是\frac{N(N-1)}{2}個分類器。因此OvR的存儲開銷和測試時間都比OvO小。但是,從訓練時每個學習器使用的樣本數來看:OvR每個學習器使用了所有的樣本,而OvO的每個學習器只用到兩個類別的樣本。因此在類別很多時,OvO的訓練時間往往會比OvR小。

對於預測性能取決於數據的分佈,在多數情形下差別不大.

三、“多對多”(MvM)

MvM是每次將若干個類作爲正類,若干個其他類作爲反類。可以看出MvM是OvR和OvO更一般的形式。

對於MvM正、反類的構造一種常用的技術是“糾錯輸出碼”(Error Correcting Output Codes,簡稱ECOC).主要分爲兩步:

  • 編碼:對N個類別做M次劃分,每次劃分將一部分類別劃分爲正類,一部分類別劃分爲反類,從而形成一個二分類訓練集;這樣一共產生M個訓練集,可訓練出M個分類器。
  • 解碼:測試時,M個分類器分別對測試樣本x進行預測,這樣預測的結果就形成了一個編碼。將這個編碼與每個類別各自的編碼進行比較,找到距離最短的類別作爲最終分類的結果。

還是以上面問題爲例,假定M=5。訓練結果如下:

測試階段:

f1(x) = -1、f2(x) = -1、f3(x) = +1、f4(x) = -1、f5(x) = +1

所以測試樣本的編碼爲(-1,-1,+1,-1,+1),到A、B、C、D對應編碼的歐式距離爲2\sqrt{3}, 4, 2, 2\sqrt{2}。比較發現距離C類最近,所以預測的結果就是C類。

       之所以稱爲糾錯輸出碼,是因爲在測試階段,即使某個分類器預測錯了,但是距離可能還是最小的。例如上面的測試樣本正確的編碼爲(-1,+1,+1,-1,+1)也就是f2出錯,但是還是能產生正確的分類C。

       一般來說,對於同一個學習任務,ECOC編碼越長,糾錯能力越強。但是,這意味着所需要的分類器就越多,開銷就越大;另一方面,對有限類別數,可能的組合數目是有限的,碼長超過一定的範圍後就失去了意義。


參考資料:周志華老師《機器學習》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章