處理正負樣本不均衡問題

在原文的基礎上 Ref: https://www.zhihu.com/question/27535832/answer/223882022 進行修改。
記憶輔助:樣本不均衡就是正樣本太少,負樣本太對,(1)增加正樣本-過採樣;減少負樣本-欠採樣(2)分割負樣本+正樣本構成多個訓練集,然後bagging (3)特徵選擇(4)訓練時提高正樣本的權重(提高正樣本學習率)

 

1 通過過抽樣和欠抽樣解決樣本不均衡

抽樣是解決樣本分佈不均衡相對簡單且常用的方法,包括過抽樣和欠抽樣兩種。

  • 過抽樣

過抽樣(也叫上採樣、over-sampling)方法通過增加分類中少數類樣本的數量來實現樣本均衡,最直接的方法是簡單複製少數類樣本形成多條記錄,這種方法的缺點是如果樣本特徵少而可能導致過擬合的問題;經過改進的過抽樣方法通過在少數類中加入隨機噪聲、干擾數據或通過一定規則產生新的合成樣本,例如SMOTE算法。適用於正樣本比較少的狀況。

  • 欠抽樣

欠抽樣(也叫下采樣、under-sampling)方法通過減少分類中多數類樣本的樣本數量來實現樣本均衡,最直接的方法是隨機地去掉一些多數類樣本來減小多數類的規模,缺點是會丟失多數類樣本中的一些重要信息。

總體上,過抽樣和欠抽樣都適合大數據分佈不均衡的情況。但是在企業中因爲正樣本充足,只是存在數據不均衡,所以通常採用下采樣的方法。比如正負樣本不均衡1:100 我們採用下采樣的方法,對負樣本直接進行隨機採樣,因爲公司中數據量很大,隨機採樣就能保證採樣得到的數據分佈和原始數據分佈一樣。所以不考慮先聚類然後再每個類中進行隨機採樣。

2 通過正負樣本的懲罰權重解決樣本不均衡

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

使用這種方法時需要對樣本本身做額外處理,只需在算法模型的參數中進行相應設置即可。很多模型和算法中都有基於類別參數的調整設置,以scikit-learn中的SVM爲例,通過在class_weight : {dict, 'balanced'}中針對不同類別針對不同的權重,來手動指定不同類別的權重。如果使用其默認的方法balanced,那麼SVM會將權重設置爲與不同類別樣本數量呈反比的權重來做自動均衡處理,計算公式爲:n_samples / (n_classes * np.bincount(y))。在XGBoost中通過scale_pos_weight=25 來提高正樣本的權重。如果算法本身支持,這種思路是更加簡單且高效的方法。通過研讀源碼發現設置 scale_pos_weight=25 應該是增大了少數樣本的學習率。

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

組合/集成方法指的是在每次生成訓練集時使用所有分類中的小樣本量,同時從分類中的大樣本量中隨機抽取數據來與小樣本量合併構成訓練集,這樣反覆多次會得到很多訓練集和訓練模型。最後在應用時,使用組合方法(例如投票、加權投票等)產生分類預測結果。

例如,在數據集中的正、負例的樣本分別爲100和10000條,比例爲1:100。此時可以將負例樣本(類別中的大量樣本集)隨機分爲100份(當然也可以分更多),每份100條數據;然後每次形成訓練集時使用所有的正樣本(100條)和隨機抽取的負樣本(100條)形成新的數據集。如此反覆可以得到100個訓練集和對應的訓練模型,然後再bagging 。這種解決問題的思路類似於隨機森林。在隨機森林中,雖然每個小決策樹的分類能力很弱,但是通過大量的“小樹”組合形成的“森林”具有良好的模型預測能力。

如果資源夠,並且對於模型的時效性要求不高的話,這種方法比較合適,多應用在數據科學比賽中。

4 通過特徵選擇解決樣本不均衡

上述幾種方法都是基於數據行的操作,通過多種途徑來使得不同類別的樣本數據行記錄均衡。除此以外,還可以考慮使用或輔助於基於列的特徵選擇方法。

一般情況下,樣本不均衡也會導致特徵分佈不均衡,但如果小類別樣本量具有一定的規模,那麼意味着其特徵值的分佈較爲均勻,可通過選擇具有顯著型的特徵配合參與解決樣本不均衡問題,也能在一定程度上提高模型效果。

提示 上述幾種方法的思路都是基於分類問題解決的。實際上,這種從大規模數據中尋找罕見數據的情況,也可以使用非監督式的學習方法,例如使用One-class SVM進行異常檢測。分類是監督式方法,前期是基於帶有標籤(Label)的數據進行分類預測;而採用非監督式方法,則是使用除了標籤以外的其他特徵進行模型擬合,這樣也能得到異常數據記錄。所以,要解決異常檢測類的問題,先是考慮整體思路,然後再考慮方法模型。

 

Ref: 解決樣本類別分佈不均衡的問題 https://www.cnblogs.com/bymo/p/9766358.html#_label1_3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章