機器學習中如何處理不平衡數據(imbalanced data)?


  推薦一篇英文的博客:

8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset

  

  1.不平衡數據集帶來的影響

  一個不平衡的兩類數據集,使用准確率(accuracy)作為模型評價指標,最后得到的准確率很高,感覺結果很棒大功告成了,但再看看混淆矩陣(confusion matrix)或者少數類(樣本數量少的這一類)的召回率(recall),你的心可能就拔涼拔涼的。你可能會發現少數類的樣本幾乎完全分錯,即模型將樣本基本預測為了多數類(樣本數量多的一類)。

   

  2.不平衡數據集很普遍

  有些問題產生的數據生來就是不平衡的,比如癌症檢測、金融詐騙。對於一個兩類問題,比例為多少時,該數據集就不平衡了?英文博客中認為:如果存在類似4:1的類不平衡,則可能會導致問題。

 

  3.英文博客中介紹的8種處理不平衡數據的策略

1) Collect more data

  最簡單而實用的方法,當獲得少數類樣本比較容易時,可以考慮直接獲得一個比較平衡的數據集。但如果代價比較大,還是考慮別的方法吧。

2) Try Changing Your Performance Metric 修改模型評價指標

  處理不平衡數據集時,accuracy很可能不再適用,尤其當我們更加關注少數類樣本。此時,可以使用confusion matrix、precision、recall、F1 score、ROC曲線的AUC值等來評價模型。

3) Try Resampling Your Dataset

  過采樣(oversampling)和欠采樣(undersampling)

  在這里,更多的是介紹過采樣中的重采樣(re-sampling),也就是不生成新的數據。

4) Try Generate Synthetic Samples

  SMOTE: Synthetic Minority Over-sampling Technique

  對少數類使用SMOTE算法“造”數據,可以想象一下對少數類進行k-means,在每個少數類樣本與其k個近鄰的連線上隨機選擇生成新的樣本點,這就是SMOTE這一類算法大概的思想。SMOTE算法是過采樣的一種方法,其生成了新的數據,而重采樣不生成新的數據。

5) Try Different Algorithms

  樹模型處理不平衡數據集效果可能比較好,比如CART、C4.5、Random Forest。

6) Try Penalized Models

  比如penalized-SVM 和penalized-LDA。

7) Try a Different Perspective

  嘗試使用無監督學習中的異常檢測算法。

8) Try Getting Creative

  嗯,當時我看到這里也是蒙蔽的,這是啥方法。嗯,自己根據問題創造方法吧,英文博客中也列舉了一些Quora上比較好的想法。

   

  4.個人對不平衡數據集處理的總結

  對於不平衡數據集,我們一般從數據集模型兩個層面去考慮怎么處理。上面列舉的第1、3、4條方法都是在數據集上的操作,第2、5、6、7條方法都是在模型方面做的一些嘗試。(第2條方法修改模型評價指標,姑且也認為是在模型方面做的工作好了。)

  數據集上的操作,收集更多少數類樣本,對少數類過采樣、重采樣,對多數類欠采樣,都是為了平衡樣本比例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM