推薦一篇英文的博客:html
8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
1.不平衡數據集帶來的影響
一個不平衡的兩類數據集,使用準確率(accuracy)做爲模型評價指標,最後獲得的準確率很高,感受結果很棒大功告成了,但再看看混淆矩陣(confusion matrix)或者少數類(樣本數量少的這一類)的召回率(recall),你的心可能就拔涼拔涼的。你可能會發現少數類的樣本幾乎徹底分錯,即模型將樣本基本預測爲了多數類(樣本數量多的一類)。
算法
2.不平衡數據集很廣泛
有些問題產生的數據生來就是不平衡的,好比癌症檢測、金融詐騙。對於一個兩類問題,比例爲多少時,該數據集就不平衡了?英文博客中認爲:若是存在相似4:1的類不平衡,則可能會致使問題。dom
3.英文博客中介紹的8種處理不平衡數據的策略
1) Collect more data學習
最簡單而實用的方法,當得到少數類樣本比較容易時,能夠考慮直接得到一個比較平衡的數據集。但若是代價比較大,仍是考慮別的方法吧。spa
2) Try Changing Your Performance Metric 修改模型評價指標rest
處理不平衡數據集時,accuracy極可能再也不適用,尤爲當咱們更加關注少數類樣本。此時,可使用confusion matrix、precision、recall、F1 score、ROC曲線的AUC值等來評價模型。orm
3) Try Resampling Your Datasethtm
過採樣(oversampling)和欠採樣(undersampling)blog
在這裏,更多的是介紹過採樣中的重採樣(re-sampling),也就是不生成新的數據。ci
4) Try Generate Synthetic Samples
SMOTE: Synthetic Minority Over-sampling Technique
對少數類使用SMOTE算法「造」數據,能夠想象一下對少數類進行k-means,在每一個少數類樣本與其k個近鄰的連線上隨機選擇生成新的樣本點,這就是SMOTE這一類算法大概的思想。SMOTE算法是過採樣的一種方法,其生成了新的數據,而重採樣不生成新的數據。
5) Try Different Algorithms
樹模型處理不平衡數據集效果可能比較好,好比CART、C4.五、Random Forest。
6) Try Penalized Models
好比penalized-SVM 和penalized-LDA。
7) Try a Different Perspective
嘗試使用無監督學習中的異常檢測算法。
8) Try Getting Creative
嗯,當時我看到這裏也是矇蔽的,這是啥方法。嗯,本身根據問題創造方法吧,英文博客中也列舉了一些Quora上比較好的想法。
4.我的對不平衡數據集處理的總結
對於不平衡數據集,咱們通常從數據集和模型兩個層面去考慮怎麼處理。上面列舉的第一、三、4條方法都是在數據集上的操做,第二、五、六、7條方法都是在模型方面作的一些嘗試。(第2條方法修改模型評價指標,姑且也認爲是在模型方面作的工做好了。)
數據集上的操做,收集更多少數類樣本,對少數類過採樣、重採樣,對多數類欠採樣,都是爲了平衡樣本比例。