對于樣本分布不平衡的分類,如果按照0.5閾值分類,容易造成虛假的指標。因為模型一直都在學習大樣本類,這樣最后預測的結果,傾向于大樣本類。因此可以考慮下面兩個方法:
- 調整閾值,使得對小樣本類更敏感,更公平。
- 選擇合適的評價指標,而不accuracy(準確率)。 比如f1-score
采樣方法是另一種改變樣本不平衡分布的方法
采樣方法
過采樣
- 隨機采樣
重復復制正例,這樣就會使模型重視對正例的分類,否則就會受到懲罰。但是問題也隨之而來,如果正例中有壞樣本,其缺陷也會無限放大,容易過擬合。 -
SMOTE
在少數類樣本之間進行插值來產生額外的樣本。
簡單來說,就是對于一個少數類樣本xi,使用K臨近方法,算出距離xi最近的K個樣本。距離可以用歐式距離來衡量。然后從K個樣本中隨機選擇一個x^ ,按照下面公式生成新樣本:
image.png
δ∈[0,1] 是一個隨機數。
缺點:
(1) 如果選取的少數類樣本周圍也都是少數類樣本,則新合成的樣本不會提供太多有用信息。這就像支持向量機中遠離margin的點對決策邊界影響不大。
(2)如果選取的少數類樣本周圍都是多數類樣本,這類的樣本可能是噪音,則新合成的樣本會與周圍的多數類樣本產生大部分重疊,致使分類困難。
欠采樣
隨機欠采樣
隨機干掉一些負例,使得正負樣本平衡。
這樣可能會對負樣本學習產生偏差,比如刪除的樣本包含一些重要信息,到時學出來的模型不充分。丟棄數據也很可恥。集成學習采樣
EasyEnsemble
(1) 將多數類樣本隨機劃分成n個子集,每個子集的數量等于少數類樣本的數量,這相當于欠采樣。
(2) 接著將每個子集與少數類樣本結合起來分別訓練一個模型
(3) 最后將n個模型集成
雖然說每個子集的樣本少于總體樣本,集成后總信息量并不減少,但是否等價還存疑。
BalanceCascade
假設當前處在第n輪訓練中:
(1)將當前大樣本類和小樣本類數據結合訓練一個學習器H
(2)利用該學習器H將正確分類的大類樣本會被剔除。
(3)進行下一輪n+1輪的訓練,反復執行1和2
最后將不同的基學習器集成起來。
特點:
(1) 有監督的篩選。每一輪訓練器都會在選擇樣本上起作用。
(2)每一輪丟棄分正確的樣本,這樣后面的學習器更注重那些分錯的樣本。
特點
優點
采樣方法主要通過調整樣本比例,來達到每個類的平衡。本質上也改變了模型的訓練過程,會對梯度,收斂,參數等等都產生影響。
缺點
采樣方法會改變原始的數據的分布,多帶來一定偏差。
建議
- 不能用單指標來評估各方法:如 precision,recall ,這種受不同閾值影響很大。建議用F1分數最好,在類別不平衡問題中用ROC和PR曲線來評估非常流行,因為它們不受特定閾值變化的影響,反映的是模型的整體預測能力。
- 如果本身數據偏斜不是很厲害,那么采樣方法的提升效果很細微。如果本身數據偏斜很厲害,采樣方法縱使比base model好很多。 但是還要確保少數數據質量和數量,質量差就容易過擬合。數量少,則模型擬合能力不足,提升一點,但提高不了多少。