1. 程式人生 > >分類中解決類別不平衡問題

分類中解決類別不平衡問題


關注微信公眾號【Microstrong】,我現在研究方向是機器學習、深度學習,分享我在學習過程中的讀書筆記!一起來學習,一起來交流,一起來進步吧!

1.什麼是類別不平衡問題

如果不同類別的訓練樣例數目稍有差別,通常影響不大,但若差別很大,則會對學習過程造成困擾。例如有998個反例,但是正例只有2個,那麼學習方法只需要返回一個永遠將新樣本預測為反例的學習器,就能達到99.8%的精度;然而這樣的學習器往往沒有價值,因為它不能預測出任何正例。

類別不平衡(class-imbalance)就是指分類任務中不同類別的訓練樣例數目差別很大的情況。在現實的分類學習任務中,我們經常會遇到類別不平衡,例如在通過拆分法解決多分類問題時,即使原始問題中不同類別的訓練樣例數目相當,在使用OvR(一對其餘,One vs. Rest,簡稱OvR)、MvM(多對多,Many vs. Many,簡稱MvM)策略後產生的二分類任務扔可能出現類別不平衡現象,因此有必要了解類別不平衡性處理的基本方法。

2.解決類別不平衡問題

2.1欠取樣方法

(1)什麼是欠取樣方法

直接對訓練集中多數類樣本進行“欠取樣”(undersampling),即去除一些多數類中的樣本使得正例、反例數目接近,然後再進行學習。

(2)隨機欠取樣方法

隨機欠取樣顧名思義即從多數類中隨機選擇一些樣樣本組成樣本集 。然後將樣本集 中移除。新的資料集

缺點:

隨機欠取樣方法通過改變多數類樣本比例以達到修改樣本分佈的目的,從而使樣本分佈較為均衡,但是這也存在一些問題。對於隨機欠取樣,由於取樣的樣本集合要少於原來的樣本集合,因此會造成一些資訊缺失,即將多數類樣本刪除有可能會導致分類器丟失有關多數類的重要資訊。

為了克服隨機欠取樣方法導致的資訊缺失問題,又要保證演算法表現出較好的不均衡資料分類效能,出現了欠取樣法代表性的演算法EasyEnsemble和BalanceCascade演算法。

(3)欠取樣代表性演算法-EasyEnsemble

演算法步驟:

1)從多數類中有放回的隨機取樣n次,每次選取與少數類數目相近的樣本個數,那麼可以得到n個樣本集合記作

2)然後,將每一個多數類樣本的子集與少數類樣本合併並訓練出一個模型,可以得到n個模型。

3)最終將這些模型組合形成一個整合學習系統,最終的模型結果是這n個模型的平均值。

圖1:EasyEnsemble演算法

(4)欠取樣代表性演算法-BalanceCascade

BalanceCascade演算法基於Adaboost,將Adaboost作為基分類器,其核心思路是:

1)在每一輪訓練時都使用多數類與少數類數量相等的訓練集,訓練出一個Adaboost基分類器。

2)然後使用該分類器對全體多數類進行預測,通過控制分類閾值來控制假正例率(False Positive Rate),將所有判斷正確的類刪除。

3)最後,進入下一輪迭代中,繼續降低多數類數量。

圖2:BalanceCascade演算法

擴充套件閱讀:

這篇論文提出了兩種欠取樣的方法:EasyEnsemble和BalanceCascade。

2.2過取樣方法

(1)什麼是過取樣方法

對訓練集裡的少數類進行“過取樣”(oversampling),即增加一些少數類樣本使得正、反例數目接近,然後再進行學習。

(2)隨機過取樣方法

隨機過取樣是在少數類中隨機選擇一些樣本,然後通過複製所選擇的樣本生成樣本集,將它們新增到中來擴大原始資料集從而得到新的少數類集合。新的資料集

缺點:

對於隨機過取樣,由於需要對少數類樣本進行復制來擴大資料集,造成模型訓練複雜度加大。另一方面也容易造成模型的過擬合問題,因為隨機過取樣是簡單的對初始樣本進行復制取樣,這就使得學習器學得的規則過於具體化,不利於學習器的泛化效能,造成過擬合問題。

為了解決隨機過取樣中造成模型過擬合問題,又能保證實現資料集均衡的目的,出現了過取樣法代表性的演算法SMOTE和Borderline-SMOTE演算法。

(3)過取樣代表性演算法-SMOTE

SMOTE全稱是Synthetic Minority Oversampling即合成少數類過取樣技術。SMOTE演算法是對隨機過取樣方法的一個改進演算法,由於隨機過取樣方法是直接對少數類進行重採用,會使訓練集中有很多重複的樣本,容易造成產生的模型過擬合問題。而SOMT演算法的基本思想是對每個少數類樣本,從它的最近鄰中隨機選擇一個樣本 是少數類中的一個樣本),然後在 之間的連線上隨機選擇一點作為新合成的少數類樣本。

SMOTE演算法合成新少數類樣本的演算法描述如下:

1).對於少數類中的每一個樣本,以歐氏距離為標準計算它到少數類樣本集中所有樣本的距離,得到其k近鄰。

2).根據樣本不平衡比例設定一個取樣比例以確定取樣倍率N,對於每一個少數類樣本,從其k近鄰中隨機選擇若干個樣本,假設選擇的是

3).對於每一個隨機選出來的近鄰,分別與按照如下公式構建新的樣本。


我們用圖文表達的方式,再來描述一下SMOTE演算法。

1).先隨機選定一個少數類樣本

2).找出這個少數類樣本 x_{i} 的K個近鄰(假設K=5),5個近鄰已經被圈出。

3).隨機從這K個近鄰中選出一個樣本 \hat{x_{i}} (用綠色圈出來了)。

4).在少數類樣本 x_{i} 和被選中的這個近鄰樣本 \hat{x_{i}} 之間的連線上,隨機找一點。這個點就是人工合成的新的樣本點(綠色正號標出)。

SMOTE演算法摒棄了隨機過取樣複製樣本的做法,可以防止隨機過取樣中容易過擬合的問題,實踐證明此方法可以提高分類器的效能。但是SMOTE演算法也存以下兩個缺點:

1)由於對每個少數類樣本都生成新樣本,因此容易發生生成樣本重疊的問題。

2)在SMOTE演算法中,出現了過度泛化的問題,主要歸結於產生合成樣本的方法。特別是,SMOTE演算法對於每個原少數類樣本產生相同數量的合成數據樣本,而沒有考慮其鄰近樣本的分佈特點,這就使得類間發生重複的可能性增大。

解釋缺點2)的原因:結合前面所述的SMOTE演算法的原理,SMOTE演算法產生新的人工少數類樣本過程中,只是簡單的在同類近鄰之間插值,並沒有考慮少數類樣本週圍多數類樣本的分佈情況。如3圖所示,綠色正號1、2分佈在多數類樣本週圍,它們離多數類樣本最近,這就導致它們有可能被劃分成多數類樣本。因此從3圖中可以看出,SMOTE演算法的樣本生成機制存在一定的盲目性。

圖3:SOMTE演算法結果

為了克服以上兩點的限制,多種不同的自適應抽樣方法相繼被提出,其中具有代表性的演算法包括Borderline-SMOTE演算法。

擴充套件閱讀:

這篇論文提出了SMOTE演算法。

(4)Borderline-SMOTE演算法介紹

對於Borderline-SMOTE演算法最感興趣的就是用於識別少數類種子樣本的方法。在Borderline-SMOTE演算法中,識別少數類種子樣本的過程如下:

1)首先,對於每個 ,確定一系列最近鄰樣本集,成該資料集為,且

2)然後,對每個樣本,判斷出最近鄰樣本集中屬於多數類樣本的個數,即:

3)最後,選擇滿足下面不等式的


上面式子表明,只有最近鄰樣本集中多數類多於少數類的那些 才會被選中形成“危險集”(DANGER)。因此,DANGER集中的樣本代表少數類樣本的邊界(最容易被錯分的樣本)。然後對DANGER集中使用SMOTE演算法在邊界附近產生人工合成少數類樣本。

我們可以看出,如果。 即: 的所有k個最近鄰樣本都屬於多類。如4圖所示的樣本點C,我們就認為樣本點C是噪聲且它不能生成合成樣本。

圖4:基於在邊界上樣本的資料建立

通過上面的介紹,我們對Borderline-SMOTE演算法有了一定的瞭解。為了讓大家理解的更透徹這個演算法,我再給大家畫一個流程圖,詳細介紹一下。

圖5:Borderline-SMOTE演算法流程圖

流程圖5中,訓練樣本集為F,少數類樣本

1)步驟一:

(i)計算少數類樣本集中每一個樣本在訓練集F中的k個最近鄰。

(ii)然後,根據這k個最近鄰對 中的樣本進行歸類:

  • 假設這k個最近鄰都是多數類樣本,則我們將該樣本定義為噪聲樣本,將它放在集合中。
  • 反正k個最近鄰都是少數類樣本則該樣本是遠離分類邊界的,將其放入S集合中。
  • 最後,K個最近鄰即有多數類樣本又有少數類樣本,則認為是邊界樣本,放入B集合中。

2)步驟二:

(i)設邊界樣本集,計算B集合中的每一個樣本,在少數類樣本集中的K個最近鄰,組成集合

(ii)隨機選出s(1<s<n)個最近鄰。

(iii)計算出它們各自與該樣本之間的全部屬性的差值

(iv)然後乘以一個隨機數 。如果 集合或S集合中的樣本,則

(v)最後生成的人工少數類樣本為:

3)步驟三:

重複步驟2的過程,直到生成人工少數類樣本的數目滿足要求,達到均衡樣本集的目的後結束演算法。

擴充套件閱讀:

這篇文章提出了Borderline-SMOTE演算法。

2.3代價敏感學習(cost-sensitive learning)

(1)代價矩陣

取樣演算法從資料層面解決不平衡資料的學習問題;在演算法層面上解決不平衡資料學習的方法主要是基於代價敏感學習演算法(Cost-Sensitive Learning)。

在現實任務中常會遇到這樣的情況:不同型別的錯誤所造成的後果不同。例如在醫療診斷中,錯誤地把患者診斷為健康人與錯誤地把健康人診斷為患者,看起來都是犯了“一次錯誤”,但是後者的影響是增加了進一步檢查的麻煩,前者的後果卻可能是喪失了拯救生命的最佳時機;再如,門禁系統錯誤地把可通行人員攔在門外,將使得使用者體驗不佳,但錯誤地把陌生人放進門內,則會造成嚴重的安全事故;在信用卡盜用檢查中,將正常使用誤認為是盜用,可能會使使用者體驗不佳,但是將盜用誤認為是正常使用,會使使用者承受巨大的損失。為了權衡不同型別錯誤所造成的不同損失,可為錯誤賦予“非均等代價”(unequal cost)。

代價敏感學習方法的核心要素是代價矩陣,如表1所示。其中 表示將第類樣本預測為第類樣本的代價。一般來說, ;若將第0類判別為第1類所造成的損失更大,則 ;損失程度相差越大, 的值差別越大。當 相等時為代價不敏感的學習問題。

表1:代價矩陣

(2)代價敏感學習方法

基於以上代價敏感矩陣的分析,代價敏感學習方法主要有以下三種實現方式,分別是:

1).從學習模型出發,對某一具體學習方法的改造,使之能適應不平衡資料下的學習,研究者們針對不同的學習模型如感知機、支援向量機、決策樹、神經網路等分別提出了其代價敏感的版本。以代價敏感的決策樹為例,可以從三個方面對其進行改造以適應不平衡資料的學習,這三個方面分別是決策閾值的選擇方面、分裂標準的選擇方面、剪枝方面,這三個方面都可以將代價矩陣引入。

2).從貝葉斯風險理論出發,把代價敏感學習看成是分類結果的一種後處理,按照傳統方法學習到一個模型,以實現損失最小為目標對結果進行調整,優化公式如下所示。此方法的優點在於它可以不依賴所用的具體分類器,但是缺點也很明顯,它要求分類器輸出值為概率。


3).從預處理的角度出發,將代價用於權重調整,使得分類器滿足代價敏感的特性,下面講解一種基於Adaboost的權重更新策略AdaCost演算法。

(3)AdaCost演算法

要想了解AdaCost演算法,我們得先知道Adaboost演算法,如圖6所示。Adaboost演算法通過反覆迭代,每一輪迭代學習到一個分類器,並根據當前分類器的表現更新樣本的權重,如圖中紅框所示,其更新策略為正確分類樣本權重降低,錯誤分類樣本權重增大,最終的模型是多次迭代模型的一個加權線性組合。分類越準確的分類器將會獲得越大的權重。

圖6:Adaboost演算法

AdaCost演算法修改了Adaboost演算法的權重更新策略,其基本思想是對代價高的誤分類樣本大大地提高其權重,而對於代價高的正確分類樣本適當地降低其權重,使其權重降低相對較小。總體思想是代價高樣本權重增加得大降低的慢。其樣本權重按照如下公式進行更新。其中 \beta_{-}和\beta_{+} 分別表示樣本被正確和錯誤分類情況下的 \beta 的取值。


2.4不平衡學習的評價方法

(1)F1度量

這一部分涉及到模型的評價方法,如果你還沒有學習過,可以看我的公眾號之前發的關於這部分文章。同時,我也把連結地址貼出來,供大家快速學習。

表2:分類結果混淆矩陣

例如在癌症預測的場景中,假設沒有患癌症的樣本為正例,患癌症的樣本為反例,反例佔的比例很少(大概0.1%),如果直接把分類器設定為預測都是正例,那麼精度和查準率的值都是99.9%。可見精度、錯誤率和查準率都不能表示不平衡資料下的模型表現。而F1值則同時考