1. 程式人生 > >如何解決機器學習深度學習訓練集樣本不均衡的問題!

如何解決機器學習深度學習訓練集樣本不均衡的問題!

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

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的值,知道小類樣本的個數足夠。