如何解決機器學習中樣本不均衡問題?

樣本不均衡:正樣本和負樣本的數(shù)目相差很大。

在一個極度不平衡的樣本中,由于機器學習會每個數(shù)據(jù)進行學習,那么多數(shù)數(shù)據(jù)樣本帶有的信息量比少數(shù)樣本信息量大,會對分類器學習過程中造成困擾。假設(shè)正樣本為少數(shù)類,負樣本為多數(shù)類,一般而言,當正負樣本比例超過1:3,分類器就已經(jīng)會傾向于負樣本的判斷(表現(xiàn)在負樣本Recall過高,而正樣本 Recall 低,而整體的 Accuracy依然會有很好的表現(xiàn))。在這種情況下,我們可以說這個分類器是失敗的,因為它沒法實現(xiàn)我們對少數(shù)類(正樣本)的定位。

舉例說明:“一個數(shù)據(jù)集一共有100個樣本,分為A、B兩種類型,A類別有95個,B類別有5個?!边@就是典型的樣本不均衡問題,對于機器學習分類算法來說,如果把全部的樣本都歸為A類,準確率(?Accuracy)也可以達到95%,而這個準確率對于我們判別少數(shù)類來說是沒有意義的,沒有任何價值,這個分類器的決策很明顯并非是我們想要的判定標準。

那么針對這種樣本不均衡問題,應(yīng)該如何解決呢?

一、上采樣(過采樣)和下采樣(欠采樣

? ? ? ? 欠采樣(undersampling)法是去除訓練集內(nèi)一些多數(shù)樣本,使得兩類數(shù)據(jù)量級接近,然后再正常進行學習。(數(shù)據(jù)量足夠時使用此方法)

缺點:若隨機丟棄樣本,可能丟失多數(shù)類的重要信息。

改進的欠采樣的代表算法是EasyEnsemble:利用集成學習機制,它將多數(shù)樣本劃分成若 N個集合,然后將劃分過后的集合與少數(shù)樣本組合,這樣就形成了N個訓練集合,而且每個訓練結(jié)合都進行了欠采樣,但從全局來看卻沒有信息丟失。

? ? ? ?過采樣(oversampling)/上采樣對訓練集內(nèi)的少數(shù)樣本進行擴充,既增加少數(shù)樣本使得兩類數(shù)據(jù)數(shù)目接近,然后再進行學習。(數(shù)據(jù)量不足時使用此方法)

簡單粗暴的方法是復制少數(shù)樣本,缺點是雖然引入了額外的訓練數(shù)據(jù),但沒有給少數(shù)類樣本增加任何新的信息,非常容易造成過擬合。

過采樣的代表算法是SMOTE(原始論文)和ADASYN(原始論文)

1、通過抽樣方法在少數(shù)類樣本中加入白噪聲(比如高斯噪聲)變成新樣本一定程度上可以緩解這個問題。如年齡,原年齡=新年齡+random(0,1)

2、SMOTE算法:通過對少數(shù)樣本進行插值來獲取新樣本,比如對于每個少數(shù)類樣本a,從a最鄰近的樣本中選取樣本b,然后在對ab 中隨機選擇一點作為新樣本。

3、閾值移動。這類方法的中心思想不是對樣本集和做再平衡設(shè)置,而是對算法的決策過程進行改進。? 舉個簡單的例子,通常我們對預測結(jié)果進行分類時,當預測y(y 代表正類可能性) 值>0.5時,判定預測結(jié)果為正,反之為負。此時規(guī)定決策規(guī)則為:

(過采樣)閾值移動方法

4、ADASYN(自適應(yīng)綜合過采樣算法):基本思想是根據(jù)學習難度的不同,對不同的少數(shù)類別的樣本使用加權(quán)分布,比較容易學習的少數(shù)類樣本,對于難以學習的少數(shù)類的樣本,產(chǎn)生更多的綜合數(shù)據(jù)。 因此,ADASYN方法通過兩種方式改善了對數(shù)據(jù)分布的學習:(1)減少類不平衡引入的偏差,(2)將分類決策邊界自適應(yīng)地轉(zhuǎn)移到困難的樣本。

總結(jié):采樣算法容易實現(xiàn),運行速度快,且效果也不錯。欠采樣和過采樣這兩種方法相比而言,都沒有絕對的優(yōu)勢,這兩種方法的應(yīng)用取決于它適用的用例和數(shù)據(jù)集本身,過采樣方法應(yīng)用更廣泛。

在欠采樣、過采樣中的小經(jīng)驗:?

(1) 考慮對大類下的樣本(超過1萬、十萬甚至更多)進行欠采樣,即刪除部分樣本;

(2) 考慮對小類下的樣本(不足1為甚至更少)進行過采樣,即添加部分樣本的副本;??

(3)使用過采樣方法來解決不平衡問題時應(yīng)適當?shù)貞?yīng)用交叉驗證。

這是因為過采樣會觀察到罕見的樣本,并根據(jù)分布函數(shù)應(yīng)用自舉生成新的隨機數(shù)據(jù),如果在過采樣之后應(yīng)用交叉驗證,那么我們所做的就是將我們的模型過擬合于一個特定的人工引導結(jié)果。這就是為什么在過度采樣數(shù)據(jù)之前應(yīng)該始終進行交叉驗證,就像實現(xiàn)特征選擇一樣。只有重復采樣數(shù)據(jù)可以將隨機性引入到數(shù)據(jù)集中,以確保不會出現(xiàn)過擬合問題。

K-fold交叉驗證就是把原始數(shù)據(jù)隨機分成K個部分,在這K個部分中選擇一個作為測試數(shù)據(jù),剩余的K-1個作為訓練數(shù)據(jù)。交叉驗證的過程實際上是將實驗重復做K次,每次實驗都從K個部分中選擇一個不同的部分作為測試數(shù)據(jù),剩余的數(shù)據(jù)作為訓練數(shù)據(jù)進行實驗,最后把得到的K個實驗結(jié)果平均。

(4)考慮嘗試隨機采樣與非隨機采樣兩種采樣方法;??

(5)考慮對各類別嘗試不同的采樣比例,不一定是1:1,有時候1:1反而不好,因為與現(xiàn)實情況相差甚遠;?

(6)考慮同時使用過采樣與欠采樣,對二者進行結(jié)合。

二、通過正負樣本的懲罰權(quán)重解決樣本不均衡

? ? ? ?通過正負樣本的懲罰權(quán)重解決樣本不均衡的問題的思想是在算法實現(xiàn)過程中,對于分類中不同樣本數(shù)量的類別分別賦予不同的權(quán)重(一般思路分類中的小樣本量類別權(quán)重高,大樣本量類別權(quán)重低),然后進行計算和建模。??

? ? ? ?使用這種方法時需要對樣本本身做額外處理,只需在算法模型的參數(shù)中進行相應(yīng)設(shè)置即可。很多模型和算法中都有基于類別參數(shù)的調(diào)整設(shè)置,以scikit-learn中的SVM為例,通過在class_weight : {dict, 'balanced'}中針對不同類別針對不同的權(quán)重,來手動指定不同類別的權(quán)重。如果使用其默認的方法balanced,那么SVM會將權(quán)重設(shè)置為與不同類別樣本數(shù)量呈反比的權(quán)重來做自動均衡處理,計算公式為:n_samples / (n_classes * np.bincount(y))。?

?如果算法本身支持,這種思路是更加簡單且高效的方法。

三、通過組合/集成方法解決樣本不均衡

? ? ? ?組合/集成方法指的是在每次生成訓練集時使用所有分類中的小樣本量,同時從分類中的大樣本量中隨機抽取數(shù)據(jù)來與小樣本量合并構(gòu)成訓練集,這樣反復多次會得到很多訓練集和訓練模型。最后在應(yīng)用時,使用組合方法(例如投票、加權(quán)投票等)產(chǎn)生分類預測結(jié)果。??

? ? ? ? 例如,在數(shù)據(jù)集中的正、負例的樣本分別為100和10000條,比例為1:100。此時可以將負例樣本(類別中的大量樣本集)隨機分為100份(當然也可以分更多),每份100條數(shù)據(jù);然后每次形成訓練集時使用所有的正樣本(100條)和隨機抽取的負樣本(100條)形成新的數(shù)據(jù)集。如此反復可以得到100個訓練集和對應(yīng)的訓練模型。??

? ? ? ?這種解決問題的思路類似于隨機森林。在隨機森林中,雖然每個小決策樹的分類能力很弱,但是通過大量的“小樹”組合形成的“森林”具有良好的模型預測能力。??

? ? ? ?如果計算資源充足,并且對于模型的時效性要求不高的話,這種方法比較合適。

四、嘗試不同的分類算法

? ? ? ?因為不同的算法適用于不同的任務(wù)與數(shù)據(jù),應(yīng)該使用不同的算法進行比較。決策樹往往在類別不均衡數(shù)據(jù)上表現(xiàn)不錯。它使用基于類變量的劃分規(guī)則去創(chuàng)建分類樹,因此可以強制地將不同類別的樣本分開。目前流行的決策樹算法有:C4.5、C5.0、CART和Random Forest等。

五、從一個新的角度理解問題(一分類/聚類操作)

?1、對于正負樣本極不平衡的場景,我們可以換一個完全不同的角度來看待問題:把它看做一分類(one class learning) 或異常檢測問題,這類方法的重點不在于捕捉類間的差別,而是為其中一類進行建模,比較有代表性的是 one-class-SVM。

? ? ? ? 通常一分類問題出現(xiàn)在需要對訓練樣本進行一定比例的篩選,或者已知的訓練樣本都是正樣本,而負樣本卻很少的情況。這種情況下,往往需要訓練一個對于訓練樣本緊湊的分類邊界,就可以通過負樣本實驗。一個簡單的實際例子是:一個工廠對于產(chǎn)品的合格性進行檢查時,往往所知道是合格產(chǎn)品的參數(shù),而不合格的產(chǎn)品的參數(shù)要么空間比較大,要么知道的很少。這種情況下就可以通過已知的合格產(chǎn)品參數(shù)來訓練一個一類分類器,得到一個緊湊的分類邊界,超出這個邊界就認為是不合格產(chǎn)品。再比如:人臉識別中我們不可能給所有的圖片讓機器去分類,事實上我們只能給出很多人臉的圖像,讓機器去學習識別。之后再來圖像時,符合這些圖像特征的就屬于人臉,反之則不是。對比二分類,顯著的區(qū)別就是,二分類不但能的出來這個圖片不是人臉,他還能告訴你這個圖片是豬臉。

對于一分類的問題可以參考知乎:什么是一類支持向量機?

2、對豐富類進行聚類操作,然后進行有監(jiān)督學習。

? ? ? ? 首先,我們可以對具有大量樣本的豐富類進行聚類操作。假設(shè)我們使用的方法是 K-Means聚類算法 。此時,我們可以選擇K值為稀有類中的數(shù)據(jù)樣本的個數(shù),并將聚類后的中心點以及相應(yīng)的聚類中心當做富類樣本的代表樣例,類標與富類類標一致。經(jīng)過聚類操作,我們對富類訓練樣本進行了篩選,接下來我們就可以將相等樣本數(shù)的K個正負樣本進行有監(jiān)督訓練。

六、樣本不均衡分類器的評價指標(假設(shè)正類為少數(shù)類,負類為多數(shù)類)

? ? ? ?在一開始的例子中可以看出,準確度這個評價指標在類別不均衡的分類任務(wù)中并不適用,甚至進行誤導。因此在類別不均衡分類任務(wù)中,需要使用更有說服力的評價指標來對分類器進行評價。

? ? ? ?對于樣本不均衡的數(shù)據(jù)來說,需要用“召回率(Recall)”、“精確率(Precision)”和“綜合評價指標(F-Mmeasure)”來評估模型。

當少數(shù)類的召回率、精確率和綜合評價指標較高時,說明沒有漏檢,查的比較全且精確度比較高。

對于反例>>正例時,下采樣預測模型會存在以下問題:Recall值雖然達到標準,但容易出現(xiàn)過檢的情況,即將正品預測為次品,F(xiàn)P值過大,精確率低。而對于過采樣來說,雖然Recall值略低于下采樣,但能夠有效降低過檢出現(xiàn)的次數(shù),既保證了召回率又保證了精確率。因此,建議使用過采樣來訓練模型。

關(guān)于召回率(Recall)、精確率(Precision)和綜合評價指標(F-Mmeasure)可以參考:

分類器模型評估指標之混淆矩陣(二分類/多分類) - 簡書


本文參考資料:分類中常見的類別不平衡解決辦法

? ? ? ? ? ? ? ? ? ? ? ? ?機器學習中如何解決樣本不均衡問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容