1. 程式人生 > >資料預處理--克服資料不平衡

資料預處理--克服資料不平衡

  這種問題和業務需求也有很強的相關性,可能根據領域知識也能解決一些問題。
  一篇綜述論文:《Learning from Imbalanced Data》。


不平衡資料評估指標

  1)單一評估指標、ROC曲線和PR曲線見機器學習:準確率(Precision)、召回率(Recall)、F值(F-Measure)、ROC曲線、PR曲線
  2)除此之外,Cost Function也可以作為一個指標。
  3)對於多分類,可以使用n個ROC曲線,即將其中一類當做正例,其餘類當做負例。

  參考資料:
  https://blog.csdn.net/shine19930820/article/details/54143241


  https://blog.csdn.net/banbuduoyujian/article/details/54645345


處理資料不平衡的方法(簡單版)

  1)比較簡單常用的,比如:
  資料少的時候常使用上取樣(oversampling),複製觀測值少的類的樣本;
  資料多的時候常使用下采樣(undersampling),去除觀測值多的類的樣本。

  2)通過演算法生成不平衡樣本
  經典的如 SMOTE(字面翻譯 - 綜合少數樣本的過抽樣技術,大概理解),使用兩個或者多個樣本的距離作為度量標準判斷相似度,然後把其中一個樣本加上隨機噪聲(或者叫擾動,此值實在相鄰的樣本的差異之間)來生成新樣本。

  3)其他方法比如加權、用帶懲罰的模型(比如 penalized-SVM 或者 penalized-LDA 等)。

  4)可以換個思路,把樣本很不平衡問題換做異常點檢測?或者用一分類(One-Class-SVM)?或許是考慮用 RandomForest 等對訓練集隨機取樣的模型?

對於深度學習而言,過取樣比欠取樣要好,增加資料好比刪除資料要好


如何克服不平衡(複雜版)

  解決方法主要分為兩個方面。
  第一種方案主要從資料的角度出發,主要方法為抽樣,既然我們的樣本是不平衡的,那麼可以通過某種策略進行抽樣,從而讓我們的資料相對均衡一些;
  第二種方案從演算法的角度出發, 考慮不同誤分類情況代價的差異性對演算法進行優化,使得我們的演算法在不平衡資料下也能有較好的效果。

1)取樣方法:將不平衡資料通過某些方法變成平衡資料。

a)隨機過取樣和欠取樣

  隨機過取樣(Random Oversampling):向minority中新增資料,可通過複製minority資料等,使得minority和majority數目相等。 —-新增重複資料,導致資料過擬合(overfit)
  隨機欠取樣(Random Undersampling):從majority中減掉資料,使得minority和majority數目相等。 —-可能會丟失一些重要的資料。

b)Informed Undersampling

  Informed Undersampling主要有3種演算法:EasyEnsemble、BalanceCascade、K-nearest neighbour(KNN)和one-sided selection(OSS),主要目的是克服傳統隨機欠取樣導致的資料丟失問題。

  EasyEnsemble:多次欠取樣(放回取樣)產生多個不同的訓練集,進而訓練多個不同的分類器,通過組合多個分類器的結果得到最終的結果。—-EasyEnsemble是非監督學習演算法。
  BalanceCascade:先通過一次欠取樣產生訓練集,訓練一個分類器,對於那些分類正確的majority樣本不放回,然後對這個更小的majority樣本下采樣產生訓練集,訓練第二個分類器,以此類推,最終組合所有分類器的結果得到最終結果。 —-BalanceCascade是監督學習演算法。
  KNN:使用K近鄰的方法挑選出一些K個樣本,至於什麼算是鄰近的樣本,每個演算法有不同的定義。

c)Synthetic Sampling with Data Generation

  synthetic minority oversampling technique(SMOTE)演算法,演算法在minority中,基於特徵空間相似度,人工創造一些資料。

d)Adaptive Synthetic Sampling

  為了克服SMOTE的缺點,Adaptive Synthetic Sampling方法被提出,主要包括:Borderline-SMOTE和Adaptive Synthetic Sampling(ADA-SYN)演算法。

  Borderline-SMOTE:對靠近邊界的minority樣本創造新資料。其與SMOTE的不同是:SMOTE是對每一個minority樣本產生綜合新樣本,而Borderline-SMOTE僅對靠近邊界的minority樣本創造新資料。

e)Cluster-based Sampling Method

  基於聚類的取樣演算法(cluster-based sampling method,CBO)用來解決類內和類間資料的不平衡問題。比如K-means技術。

f)Integration of Sampling and Boosting

  SMOTEBoost:基於SMOTE和Adaboost.M2的演算法,其在boosting的每次迭代中都引入了SMOTE的方法,因此生成的每個分類器都集中於minority類,因為最後整合而得的分類器效能較好。

  DataBoost-IM:其將資料生成技術和Adaboost.M1結合,在沒有犧牲majority類準確度的情況下,提高minority的預測率。DataBoost-IM根據類間difficult-to-learn比率去生成綜合樣本。這種方法在解決強不平衡資料方面有很好的效能,但是可能依賴於較適合的資料生成方法。

2)代價敏感方法:取樣方法主要考慮正負例的分佈,而代價敏感方法主要考慮誤分類樣本的代價,通過代價矩陣來度量。

a)Cost-Sensitive Decision Trees

  代價敏感的決策樹應用主要有三種形式:
  (i)代價敏感調整可以用於決策閾值,使用ROC刻畫效能取值範圍,ROC曲線的特徵點用作最後的閾值。
  (ii)對於每個節點的拆分標準,可以作為代價敏感的考慮因素。
  (iii)可以在決策樹上應用代價敏感的剪枝。在不平衡資料,直接移除掉概率低於某一特定閾值的節點,會發現移除的資料大多都是minority的資料,因此,應將重點放在概率估計上,使得剪掉的是positive的資料。

b)Cost-Sensitive Neural Networks

  代價敏感性在神經網路上的應用主要有4個方面:
  (i)代價敏感變更可以應用到概率評估上。
  (ii)神經網路的輸出也可以是代價敏感的。
  (iii)代價敏感變更適用於學習引數。
  (iv)最小誤差函式可以用來預期代價。


克服資料不平衡的例子

  kaggle上的「座頭鯨識別挑戰」。
  在4251個訓練圖片中,有超過2000個類別中只有一張圖片。還有一些類中有2-5個圖片。現在,這是一個嚴重的不平衡類問題。我們不能指望用每個類別的一張圖片對深度學習模型進行訓練(雖然有些演算法可能正是用來做這個的,例如 one-shot 分類問題,但我們現在忽略先這一點)。這也會產生一個問題,即如何劃分訓練樣本和驗證樣本。理想情況下,您會希望每個類都在訓練和驗證樣本中有所體現。

  方法:使用資料擴增,並進行過取樣。先觀察訓練樣本中的一些影象,這些影象都是鯨魚的尾巴。因此,識別很可能與特定的圖片方向有關。我也注意到在資料中有很多影象是黑白圖片或只有R / B / G通道。
  故,以上程式碼塊對不平衡類(數量小於10)中的每個影象都進行如下處理:

1.將每張圖片的 R、G、B 通道分別儲存為增強副本
2.儲存每張圖片非銳化的增強副本
3.儲存每張圖片非銳化的增強副本

  現在在每個不平衡類中都至少有了10個樣本。我們繼續進行訓練。