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

  推薦一篇英文的博客: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條方法修改模型評價指標,姑且也認爲是在模型方面作的工做好了。)

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

相關文章
相關標籤/搜索