1. 程式人生 > >【機器學習】類別不平衡學習

【機器學習】類別不平衡學習

本文主要記錄 《機器學習》一書中關於類別不平衡問題的處理。

  類別不平衡問題(class-imbalance)就是說對於分類任務來說,不同類別的訓練樣例相差很大的情況。不是一般性,這裡主要介紹負樣本遠遠多於正樣本的情況。(在閱讀深度神經網路論文時,發現這種情況非常常見)。

  首先從線性分類器的角度來進行理解。使用 y=ωTx+b 對新樣本 x 進行分類的時候,實際上是在用預測出的 y 與一個閾值進行比較,比如通常情況下我們將這個閾值設定為 0.5。當大於 0.5 則判定為正例,否則判定為反例。y 實際上表達了正例的可能性,機率 y1y 反映的是正例的可能性與反例的可能性的比值

。當輸出為 0.5 的時候表示兩種可能性相同。所以有如下決策:

y1y>0.5
  然而,當訓練樣本中的正負樣本數目不同的時候,這時我們令 m+ 表示正例樣本的數量,m 表示負樣本的數量,則可以得到觀測機率 m+m。因為通常假設訓練集是真是樣本集的無偏取樣,所以觀測機率也就代表了真實機率。所以應該存在下面的判定決策:y1y<m+m
但是分類器是根據y1y>0.5 進行決策,所以,需要對上面這個預測值進行調整。只需要做出如下調整即可:
y1y=y1y×mm+

而這也就是類別不平衡學習的基本策略——再縮放(rescaling)

  從上面的公式中我們就可以看出,再縮放的思想十分簡單,但是在實際應用中卻並不是很容易,主要是 “訓練集是真實樣本總體的無偏取樣” 這個假設往往不成立,也就是說,不一定能有效基於訓練樣本的觀測機率來推斷出真是機率。

  目前主要有三種方法:

  1. 直接對反例樣本進行“欠取樣”(undersampling),也就是去除一些反例使得正反樣本數量接近,然後進行學習;
  2. 對訓練集中的樣本進行“過取樣”(oversampling),也就是增加一些正例使得正反數目接近,然後進行學習;
  3. 直接基於原始訓練集進行學習,但是在用訓練好的分類器進行預測的時候,將上面的y1y=y1y×mm+ 嵌入到決策過程中,這種方法稱為“閾值移動(threshold-moving)”。

在應用上面的方法的時候,需要注意以下幾點:

  • 過取樣方法不能簡單的對正例樣本進行重複取樣,這樣做會造成嚴重的過擬合現象。典型演算法是通過對訓練集裡的正例進行來產生額外的正例
  • 欠取樣方法採用隨機丟棄反例的方法也不妥,這樣可能會丟失一些重要的資訊;典型演算法是利用整合學習機制,將反例劃分為若干個集合供不同的學習器進行使用,這樣對每個學習器看來都進行了欠取樣,但是在全域性看來並不會丟失重要資訊。

參考內容:周志華–機器學習 Chapter 3.7