多分类器算法的思想
一. 基本思想
在之前的博客中,我們討論了邏輯回歸模型(Logistic Regression)解決分類問題。但是我們發現,邏輯回歸模型解決的是二分問題。但是在現實情境下,我們的訓練集往往包含多個類,那我們可不可以把把多分類問題轉化為二分類問題呢?答案是肯定的。多分類問題的基本思想就是,將多分類任務拆解為若干個二分類任務求解。
二. 拆分策略
假設樣本數據中有N個類別。
1. 一對一拆分(OvO)
- 基本思想:
將N個類別兩兩匹配,每次使用2個類別的數據訓練分類器,從而產生N(N?1)/2個二分類器。使用時,將樣本提交給所有的分類器,得到了N(N?1)/2個結果,最終屬于哪個類別通過投票產生。 - 分類器個數:
N(N?1)/2個 - 特點:
分類器較多,且每個分類器在訓練時只使用了2個類別的樣本數據。
2. 一對多拆分(OvR)
- 基本思想:
每次將一個類作為樣例的正例,其他所有均作為反例,得到N個分類器。也就是說,每個分類器能識別一個固定類別。使用時,若有一個分類器為正類,則就為該類別;若有多個分類器為正類,則選擇置信度最高的分類器識別的類別。 - 分類器個數:
N個 - 特點:
相比OvO分類器較少,且每個分類器在訓練時使用了所有樣本數據。
3. 多對多拆分(MvM)
- 基本思想:
每次將若干個類作為正例、若干個類作為反例。顯然OvO、OvR都是其特例。MvM的正、反類設計必須有特殊的設計,常用的一種技術:”糾錯輸出碼”,簡稱ECOC。
ECOC是將編碼的思想引入類別的劃分,并可能在解碼過程中具有容錯性。ECOC工作過程主要分為兩步:
1.對N個類做M次劃分,每次劃分將一部分作為正類,一部分劃分反類,從而形成一個二分類訓練集。一共產生M個訓練集,訓練出M個分類器。
2.M個分類器分別對測試樣本進行預測,這些預測標記組成一個編碼。將這個預測編碼與每個類各自的編碼進行比較,返回其中距離最小的類別作為最終結果。 - 分類器個數:
M個 - 特點:
對同一個學習任務來說,ECOC編碼越長,糾錯能力越強。然而編碼越長所需要的訓練的分類器越多,計算存儲開銷都會增大;另一方面對于有限類別碼長超過一定范圍就沒有意義了。對于同等長度的編碼,理論上來說,任務兩個類別之間的編碼距離越遠,則糾錯能力越強。
三. 類別不平衡問題
我們在之前討論的分類問題中,往往都是假設樣本是平衡的,也就是正類與反類的樣本個數相近。但實際中,很有可能正類與反類個數差別懸殊。我們假設有這種情況,訓練數據有反例998個,正例2個,模型是一個永遠將新樣本預測為反例的學習器,就能達到99.8%的精度,這樣顯然是不合理的。
解決這個問題,主要有3種方法:(假設反類個數大于正類)
1.欠采樣法
對訓練集里的反例樣本進行“欠采樣”,即去除一些反例使得正反例數目接近,再進行學習。由于丟棄很多反例,會使得訓練集遠小于初始訓練集,所以有可能導致欠擬合。所以提出以下策略
代表算法:EasyEnsemble
利用集成學習機制,每次從大多數類中抽取和少數類數目差不多的重新組合,總共構成n個新的訓練集,基于每個訓練集訓練出一個AdaBoost分類器(帶閾值),最后結合之前訓練分類器結果加權求和減去閾值確定最終分類類別。
2. 過采樣法
增加一些正例使得正反例數目接近,然后再學習。需要注意的是不能只是對初始正例樣本重復采樣,否則導致嚴重的過擬合。所以提出以下策略
代表算法:SMOTE
合成新的少數樣本的策略是,對每個少類a樣本,從最近鄰中隨機選一個樣本b,在a、b之間連線上隨機選一點作為合成新樣本。
3. 再縮放思想
一般我們在訓練模型時,正反樣本數目是相近的,所以在邏輯回歸中,φ(z)≥0.5判斷為1類,反之為0類。
但如果訓練集中正反例數目相差懸殊,令m+表示正例數目,m-表示反例數目,假設訓練集是無偏采樣,觀測幾率就代表了真實幾率,只要分類器的預測幾率高于觀測幾率就判定為正例,即
?
即判定為正例,實際上想想也很簡單,本來是假設正負例各占一半,所以是0.5,現在類別樣本數目不均衡,所以需要大于實際正例數目所占比。
實際上,再縮放實際操作起來不現實,因為假設的前提訓練集是真實的樣本總體的無偏采樣往往不成立,所以觀測幾率未必反映真實幾率。
作者:躺在稻田里的小白菜
鏈接:https://www.jianshu.com/p/70a842f327c0
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。
總結
- 上一篇: K均值算法matlab代码实现
- 下一篇: cef 前进后台 实现_CefSpide