1. 程式人生 > >機器學習-類別不平衡問題

機器學習-類別不平衡問題

之前 size 訓練 最近鄰 機制 每次 問題 線性 大於

  • 引言:我們假設有這種情況,訓練數據有反例998個,正例2個,模型是一個永遠將新樣本預測為反例的學習器,就能達到99.8%的精度,這樣顯然是不合理的。

  • 類別不平衡:分類任務中不同類別的訓練樣例數差別很大。

  一般我們在訓練模型時,基於樣本分布均勻的假設。從線性分類器的角度討論,使用 y=wTx+b 對新樣本分類時,用預測的 y 與一個閾值進行比較,y>0.5 即判別為正例,否則判別為負例。這裏的 y 實際表達了正例的可能性(1-y是反例的可能性),0.5表明分類器認為正反例可能性相同。即

技術分享,則預測為正例

  但如果訓練集中正反例數目相差懸殊,另m+表示正例數目,m-表示反例數目,則在大數的基礎上,觀測幾率就代表了真實幾率,只要分類器的預測幾率高於觀測幾率就判定為正例,即

技術分享,預測為正例

  我們知道分類器是基於上一個公式決策的,則稍加調整

技術分享

  也就是 y > m+/(m++m-) 即判定為正例,實際上想想也很簡單,本來是假設正負例各占一半,所以是0.5,現在類別樣本數目不均衡,所以需要大於實際正例數目所占比。以上就是類別不平衡學習的一個基本策略——“再縮放”。實際上,這種策略也是一種代價敏感學習,將 m-/ m+ 用 cost+/cost- 代替,其中cost+ 是將正例誤分為反例的代價,cost-相反。

  實際上,再縮放實際操作起來不現實,因為假設的前提訓練集是真實的樣本總體的無偏采樣往往不成立,所以觀測幾率未必有效。另外兩種比較常用的解決方案如下:

  1、欠采樣

  對訓練集裏的反例樣本進行“欠采樣”,即去除一些反例使得正反例數目接近,再進行學習。由於丟棄很多反例,會使得訓練集遠小於初始訓練集,所以有可能導致欠擬合。所以提出以下策略

  代表算法:EasyEnsemble

  利用集成學習機制,每次從大多數類中抽取和少數類數目差不多的重新組合,總共構成n個新的訓練集,基於每個訓練集訓練出一個AdaBoost分類器(帶閾值),最後結合之前訓練分類器結果加權求和減去閾值確定最終分類類別。

技術分享

  2、過采樣

  增加一些正例使得正反例數目接近,然後再學習。需要註意的是不能只是對初始正例樣本重復采樣,否則導致嚴重的過擬合。所以提出以下策略

  代表算法:SMOTE

  合成新的少數樣本的策略是,對每個少類a樣本,從最近鄰中隨機選一個樣本b,在a、b之間連線上隨機選一點作為合成新樣本。

  基於算法的改進:SMOTE可能導致初始樣本分布有的部分更加稠密,有的部分更加稀疏,而且使得正反例的邊界模糊。所以有學者提出 Borderline-SMOTE算法,將少數類樣本根據距離多數類樣本的距離分為noise,safe,danger三類樣本集,只對danger中的樣本集合使用SMOTE算法。

機器學習-類別不平衡問題