在機器學習中,我們常常會遇到不均衡的數據集。比如癌症數據集中,癌症樣本的數量可能遠少於非癌症樣本的數量;在銀行的信用數據集中,
按期還款的客戶數量可能遠大於違約客戶的樣本數量。
比如非常有名的德國信用數據集,正負樣本的分類就不是很均衡:
如果不做任何處理簡單地進行訓練,那么訓練結果中(以SVM為例),大部分好客戶(約97%)能被正確地識別為好客戶,但是大部分的壞客戶(約95%)卻會被識別為好客戶。
這個時候,如果我們僅僅使用accuracy來評價模型,那么銀行可能會承受違約帶來的巨大損失。在南大周志華老師的《機器學習》“模型的選擇與評價”部分中,就提到了使用Precision、Recall、F1 Score(加權平均Precision和Recall)等更全面評價模型的方法。本文將探討如何解決機器學習中遇到的分類非均衡問題:
- 過采樣 Over-sampling
- 下采樣 Under-sampling
- 上采樣與下采樣結合
- 集成采樣 Ensemble sampling
- 代價敏感學習 Cost-Sensitive Learning
注:github開源項目
github-scikit-learn-contrib/imbalanced-learn
中提供了本回答中大部分算法的實現代碼,並配有詳細的文檔和注釋。
過采樣 Over-sampling
過采樣即是將本來數量少的那類樣本增加。目前比較常見的方法包含了SMOTE, ADASYN, SVM SMOTE,bSMOTE。其中,SMOTE和ADASYN算法的實現也可以參考這個github項目。
我可視化了一下結果:
比如說在下圖中,藍色三角形代表的是多數樣本(不妨設為正例),綠色三角形代表的是原始的少數樣本(不妨設為反例),而紅色圓點則是使用SMOTE算法生成的反例。
類似地,ADASYN也可以有類似的效果。
不過,SMOTE在一些情況下表現得並不是特別好,也不是很穩定,這也與它本身的算法思路有關。我們可以對比一下在下面情況下SMOTE和ADASYN的表現:
但ADASYN也不是完美無缺的——當分割兩個類別樣本能夠清晰地被划分而且數據點間隔很大時ADASYN會出現NaN。例如在以下的情況,ADASYN就很可能會出問題:
下采樣 Under-sampling
下采樣即是將本來數量多的那類樣本減少。隨機下采樣就不用說了,實現非常簡單。但它的表現並不是很好,因此又有了一些新方法,比較知名的有:
-
Tomek links
-
One-sided selection: Addressing the curse of imbalanced training sets: One-sided selection
-
Neighboorhood Cleaning Rule: Improving identification of difficult small classes by balancing class distribution
上采樣與下采樣結合
顧名思義,將原本比較多的樣本所屬類別的樣本減少,同時也將原本屬於少數的樣本類別中的樣本增加。
集成采樣 Ensemble sampling
如我們所知,一些下采樣的方法可能會使我們丟失一些比較重要的數據點,但是Xu-Ying Liu, Jianxin Wu, and Zhi-Hua Zhou的論文Exploratory Undersampling for Class-Imbalance Learning中提出了EasyEnsemble和BalanceCascade的方法一定程度上解決了這個問題。
在論文中,作者提到,EasyEnsemble的思想有一部分與Balanced Random Forests相似,但是EasyEnsemble使用了樣本來隨機訓練決策樹。
代價敏感學習 Cost-Sensitive Learning
我們都知道比起將一個正常客戶誤判為不良貸款客戶,將一個不良貸款客戶誤判為正常客戶可能會給銀行帶來更大的損失;比起將非癌症病人誤判為癌症病人,將癌症病人誤判為非癌症病人可能會導致治療無法及時進行從而導致更嚴重的后果。於是就有了cost-sensitive learning這樣的思路——來解決這種樣本分類不均衡的問題。這部分可以參考Charles X. Ling, Victor S. Sheng的論文Cost-Sensitive Learning and the Class Imbalance Problem:
版權聲明:本文是原創博文,請勿轉載,違者必究。
