樣本不均衡對模型的影響


在做項目的時候,發現在訓練集中,正負樣本比例比例在1:7左右,雖然相差不多(但在實際獲取的樣本比例大概在1:2000左右),所以有必要探討一下在樣本不均衡的情況下,這些訓練數據會對模型產生的影響。


在實際的模型選取中,采用了SVM和textCNN這兩種模型對文本進行分類,下面分別看一下這兩種模型在樣本不均衡的情況下,其泛化能力的體現(搜集其他人做過的實驗與總結,參考博客附於文章末尾

SVM

理論上來說,SVM實現分類的方法是以支持向量為參照,選取硬間隔最大的超平面,其超平面的選取只與支持向量有關,所以不是很care到底兩邊還有多少個點但是當一類樣本遠多於另一類樣本時,可見以下圖:

假設真實數據集如下:

由於負類樣本量過少時,可能會出現下面這種情況:

使得分隔超平面偏向負類。嚴格意義上,這種樣本不平衡不是因為樣本數量的問題,而是因為邊界點發生了變化。(本應出現在更左側的圈圈,沒有納入到樣本集中)

當樣本不可分時,也會出現這種情況,即分隔超平面偏向負類。將會導致對比例大的樣本造成過擬合,也就是說預測偏向樣本數較多的分類,這樣就會降低模型的泛化能力,往往准確率(accuracy)很高,但auc很低。


CNN

由於項目中也使用了textCNN對不均衡樣本進行了訓練與預測,需要看看樣本不均衡對CNN造成了多少影響。

實驗數據與使用的網絡

數據:CIFAR-10,共有10類(airplane,automobile,bird,cat,deer,dog, frog,horse,ship,truck),每一類含有5000張訓練圖片,1000張測試圖片。

網絡:點我,網絡包含3個卷積層,還有10個輸出節點(當然我們的模型架構和這個例子不同)。在這里只是為了看樣本不均衡對CNN的影響。

類別不平衡數據的生成

直接從原始CIFAR-10采樣,通過控制每一類采樣的個數,就可以產生類別不平衡的數據。下圖是11次對10個類別的采樣樣本比例圖:

Dist. 1:類別平衡,每一類都占用10%的數據。

Dist. 2、Dist. 3:一部分類別的數據比另一部分多。

Dist. 4、Dist 5:只有一類數據比較多。

Dist. 6、Dist 7:只有一類數據比較少。

Dist. 8: 數據個數呈線性分布。

Dist. 9:數據個數呈指數級分布。

Dist. 10、Dist. 11:交通工具對應的類別中的樣本數都比動物的多
類別不均衡數據的訓練結果

以上數據經過訓練后,每一類對應的預測正確率(accuracy)如下:

Total表示總的正確率,由各類准確率加權得到,從實驗結果可以看出:

  • 類別完全平衡時,結果最好。
  • 類別“越不平衡”,效果越差。比如Dist. 3就比Dist. 2更不平衡,效果就更差。同樣的對比還有Dist. 4和Dist. 5,Dist. 8和Dist. 9。其中Dist. 5和Dist. 9更是完全訓練失敗了。

采用過采樣訓練的結果

通過過采樣對數據進行平衡,得到的測試結果為:

發現效果上來了,過采樣前后的性能對比見下圖:


可以看出CNN確實對訓練樣本中類別不平衡的問題很敏感。


如何解決數據不平衡問題?

一。 對數據進行重采樣

1. 過采樣(over-sampling)

對小類的數據樣本進行采樣來增加小類的數據樣本個數,即過采樣(over-sampling ,采樣的個數大於該類樣本的個數)。

2. 欠采樣(under-sampling)

對大類的數據樣本進行采樣來減少該類數據樣本的個數,即欠采樣(under-sampling,采樣的次數少於該類樣本的個素)。

一些經驗:

  • 考慮對大類下的樣本(超過1萬、十萬甚至更多)進行欠采樣,即刪除部分樣本;
  • 考慮對小類下的樣本(不足1為甚至更少)進行過采樣,即添加部分樣本的副本;
  • 考慮嘗試隨機采樣與非隨機采樣兩種采樣方法;
  • 考慮對各類別嘗試不同的采樣比例,比一定是1:1,有時候1:1反而不好,因為與現實情況相差甚遠;
  • 考慮同時使用過采樣與欠采樣。

二。 擴充數據集

三。 嘗試其他分類指標

類別不均衡的情況下,准確率可能不會很work,因此要采用其他更有說服力的評價分類指標:

  • 混淆矩陣(Confusion Matrix):使用一個表格對分類器所預測的類別與其真實的類別的樣本統計,分別為:TP、FN、FP與TN。
  • 精確度(Precision)
  • 召回率(Recall)
  • F1得分(F1 Score):精確度與召回率的加權平均。

四。 嘗試產生人工數據

ps:有一個類別樣本很少,就是通過這種方式產生的,待我仔細了解后再加進來

五。 嘗試不同分類算法

決策樹往往在類別不均衡數據上表現不錯。

六。 嘗試對模型進行懲罰

你可以使用相同的分類算法,但是使用一個不同的角度,比如你的分類任務是識別那些小類,那么可以對分類器的小類樣本數據增加權值,降低大類樣本的權值(這種方法其實是產生了新的數據分布,即產生了新的數據集,譯者注),從而使得分類器將重點集中在小類樣本身上。一個具體做法就是,在訓練分類器時,若分類器將小類樣本分錯時額外增加分類器一個小類樣本分錯代價,這個額外的代價可以使得分類器更加“關心”小類樣本。如penalized-SVM和penalized-LDA算法。 

七。 嘗試一個新的角度理解問題

我們可以從不同於分類的角度去解決數據不均衡性問題,我們可以把那些小類的樣本作為異常點(outliers),因此該問題便轉化為異常點檢測(anomaly detection)與變化趨勢檢測問題(change detection)。 

異常點檢測即是對那些罕見事件進行識別。如通過機器的部件的振動識別機器故障,又如通過系統調用序列識別惡意程序。這些事件相對於正常情況是很少見的。 

變化趨勢檢測類似於異常點檢測,不同在於其通過檢測不尋常的變化趨勢來識別。如通過觀察用戶模式或銀行交易來檢測用戶行為的不尋常改變。 

 

參考博客:

SVM相關:http://www.cnblogs.com/xiangzhi/p/4638235.html

CNN相關:https://blog.csdn.net/heyc861221/article/details/80128212

樣本不均衡解決方法:

https://blog.csdn.net/gdufs_phc/article/details/80044173

https://blog.csdn.net/weixin_38111819/article/details/79214815

感謝以上作者。 


免責聲明!

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



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