1. 程式人生 > >如何解決樣本不均衡問題

如何解決樣本不均衡問題

介紹 ring 倒數 算法思想 ssi pan 訓練集 交叉驗證 權重

解決樣本不均衡的問題很多,主流的幾個如下:

1.樣本的過采樣和欠采樣。

2..使用多個分類器進行分類。

3.將二分類問題轉換成其他問題。

4.改變正負類別樣本在模型中的權重。

一、樣本的過采樣和欠采樣。

1.過采樣:將稀有類別的樣本進行復制,通過增加此稀有類樣本的數量來平衡數據集。該方法適用於數據量較小的情況。

2.欠抽樣:從豐富類別的樣本中隨機選取和稀有類別相同數目的樣本,通過減少豐富類的樣本量啦平衡數據集。該方法適用於數據量較大的情況。

3.也可以將過采樣和欠采樣結合在一起使用。

4.使用SMOTE方法來構造樣本。

  SMOTE算法是一種過采樣的算法。這個算法不是簡單的復制已有的數據,而是在原有數據基礎上,通過算法產生新生數據。

  算法思想:基於距離度量的方式計算兩個或多個稀有類樣本之間的相似性。

       然後選擇其中的一個樣本作為基礎樣本,

       再在鄰居樣本中隨機選取一定數量的樣本對那個基礎樣本的一個屬性進行噪聲。每次處理一個屬性,通過這樣的方式產生新生數據。

二、使用多個分類器進行分類。

  方法一中介紹的過采樣,欠采樣,都存在相應的問題。

  過采樣:可能會存在過擬合問題。(可以使用SMOTE算法,增加隨機的噪聲的方式來改善這個問題)

  欠采樣:可能會存在信息減少的問題。因為只是利用了一部分數據,所以模型只是學習到了一部分模型。

  有以下兩種方法可以解決欠采樣所帶來的問題。

  方法一:模型融合 (bagging的思想 )

  思路:從豐富類樣本中隨機的選取(有放回的選取)和稀有類等量樣本的數據。和稀有類樣本組合成新的訓練集。這樣我們就產生了多個訓練集,並且是互相獨立的,然後訓練得到多個分類器。

     若是分類問題,就把多個分類器投票的結果(少數服從多數)作為分類結果。

     若是回歸問題,就將均值作為最後結果。

  方法二:增量模型 (boosting的思想)

  思路:使用全部的樣本作為訓練集,得到分類器L1

     從L1正確分類的樣本中和錯誤分類的樣本中各抽取50%的數據,即循環的一邊采樣一個。此時訓練樣本是平衡的。訓練得到的分類器作為L2.

     從L1和L2分類結果中,選取結果不一致的樣本作為訓練集得到分類器L3.

     最後投票L1,L2,L3結果得到最後的分類結果。

三、將二分類問題轉換成其他問題。

  可以將不平衡的二分類問題轉換成異常點檢測,或者一分類問題(可使用one-class svm建模)

四、改變正負類別樣本在模型中的權重。

  使用代價函數學習得到每個類的權值,大類的權值小,小類的權值大。剛開始,可以設置每個類別的權值與樣本個數比例的倒數,然後可以使用過采樣進行調優。

五、註意點:

  1.不平衡問題的評價指標

  準確度這個評價指標在類別不均衡的分類任務中並不能work。幾個比傳統的準確度更有效的評價指標:

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

  Kappa (Cohen kappa)
  ROC曲線(ROC Curves):見Assessing and Comparing Classifier Performance with ROC Curves

  2.交叉驗證

  在K-Fold 校驗中,每一份數據集中原則上應該保持類別樣本比例一樣或者近似,如果每份數據集中小類樣本數目過少,那麽應該降低K的值,知道小類樣本的個數足夠。

如何解決樣本不均衡問題