詳解類別不平衡問題


本文詳細介紹了類別不平衡問題,目錄:

  • 1 什么是類別不平衡問題?
  • 2 類別不平衡導致分類困難的原因?
  • 3 類別不平衡的解決方法?
  • 4 如何選擇類別不平衡中學習的評價指標?
  • 5 關於解決方法選擇的一些建議?
  • 6 小結

1 什么是類別不平衡問題?

類別不平衡(class-imbalance),也叫數據傾斜,數據不平衡,就是指分類任務中不同類別的訓練樣例數目差別很大的情況。在現實的分類學習任務中,我們經常會遇到類別不平衡,例如交易欺詐、廣告點擊率預測、病毒腳本判斷等;或者在通過拆分法解決多分類問題時,即使原始問題中不同類別的訓練樣例數目相當,在使用OvR(One vs. Rest)、MvM(Many vs. Many)策略后產生的二分類任務仍然可能出現類別不平衡現象。而標准機器學習算法通常假設不同類別的樣本數量大致相似,所以類別不平衡現象會導致學習算法效果大打折扣。因此有必要了解類別不平衡時處理的基本方法。

2 類別不平衡導致分類困難的原因?

通常情況下,類別不平衡程度越高,數據集的分類難度越大,但情況並非總是如此。下面列了幾種類別不平衡的情況:

  • 1)正負樣本特征區別較大,邊界較寬;(這是最好的情況)
  • 2)少數類分布的稀疏性(sparsity)以及稀疏性導致的拆分多個子概念(sub-concepts,可理解為子clusters)並且每個子概念僅含有較少的樣本數量 ;
  • 3)離群點過多(即過多的少數類樣本出現在多數類樣本密集的區域);
  • 4)類別之間的分布嚴重重疊(即不同類別的樣本相對密集地出現在特征空間的同一區域);
  • 5)數據中本身存在的噪聲,尤其是少數類的噪聲。

第1種是最好的情況,在這些數據集上直接使用合適的模型(如SVM,Decision Tree等對類別不平衡問題不敏感的模型)通常也能得到很好的分類結果。所以從這種情況來看,類別不平衡本身並不是分類困難的來源,下面幾種情況才是。

第2種情況又被稱為small disjuncts問題。它導致分類困難的原因很直觀:在同樣的特征空間中,相比於只有一個cluster的簡單少數類分布,具有多個子概念的少數類分布需要模型給出更復雜的決策邊界來獲得良好的預測。在模型復雜度不變的情況下,分類性能會因子概念個數的增多而變差。因此該問題的解決辦法也較為簡單:上更大容量的模型(DL: 更寬,更深,更強)。

第3和第4種情況表現了類似的困難,即部分或大部分少數類樣本嵌入到多數類樣本密集的區域,導致邊界模糊,分類困難,這種困難程度隨着類別不平衡的增大而進一步加劇。

第5種情況就不用說了,噪聲啥時候都很討厭,少數類的噪聲更是雪上加霜。

下圖給出一個直觀的可視化來幫助理解類別不平衡比/類別分布重疊之間的關系:即使不平衡比相同,類別重疊/不重疊的數據集也會表現出極其不同的分類難度。深藍色的點代表它們可以被模型很好地分類,而深紅色的樣本點代表模型完全無法正確分類這些數據點。數據硬度指分類器訓練完成后輸出概率與ground truth label的殘差(i.e., |F(x)-y|)。

在圖(a)中,數據集是用兩個不重疊的的二維高斯分布生成的,來代表情況1。我們可以觀察到不平衡比的增長並不會影響分類該數據集的難度(圖(c))。而在圖(b)中,數據集由兩個相互重疊的二維高斯混合分布生成,來代表情況2、3、4。可以看出,隨着不平衡比的增加,它從一個相對簡單的分類任務變成了一個極其困難的任務(圖(d))。

另外,在實際的工業應用當中,這些難度因素還會與其他實際問題一同出現,如特征中的缺失值,巨大的數據集規模等。

3 類別不平衡的解決方法?

每種解決方法都有其適用范圍,需要因地制宜。甚至有時候根本就不需要專門處理,比如這兩種情況:

  • 已經給定了問題的指標是ROC的AUC,那么此時不處理和處理的差別沒那么大,因為ROC對類別不平衡並不敏感(注意:這可能會出現在比賽中,如果是自己定義問題,要慎用ROC);
  • 任務中正樣本和負樣本是同等重要的,即預測對一個正樣本和預測對一個負樣本是同等重要的,那么不做處理,讓那些正樣本被淹沒也沒啥影響。

但是,如果我們對於召回有特別大的需求,也就是說我們更關心正樣本,那么這個時候如果不做任何處理就很難拿到我們所希望的結果。因此,下面介紹幾種解決這個問題的方法,包括省心的方法、調整數據、調整算法和集成。

注:本文中正樣本(正例)就是少數類,負樣本(負例)就是多數類,欠采樣同下采樣,過采樣同上采樣。

3.1 省心的方法

在介紹后面三種高級方法之前,先介紹幾種朴實無華但很省心的方法。

主動收集數據

針對少量樣本數據,可以盡可能去擴大這些少量樣本的數據集,或者盡可能去增加他們特有的特征來豐富數據的多樣性(盡量轉化成情況1)。譬如,如果是一個情感分析項目,在分析數據比例時發現負樣本(消極情感)的樣本數量較少,那么我們可以盡可能在網站中搜集更多的負樣本數量,或者花錢去買,畢竟數據少了會帶來很多潛在的問題。

將任務轉換成異常檢測問題

如果少數類樣本太少,少數類的結構可能並不能被少數類樣本的分布很好地表示,那么用平衡數據或調整算法的方法不一定有效。如果這些少數類樣本在特征空間中再分布的比較散,情況會更加糟糕。這時候不如將其轉換為無監督的異常檢測算法,不用過多的去考慮將數據轉換為平衡問題來解決。

調整權重

可以簡單的設置損失函數的權重,讓模型增加對多數類的懲罰,更多的關注少數類。在python的scikit-learn中我們可以使用class_weight參數來設置權重。

另外,調整權重方法也適合於這種情況:不同類型的錯誤所造成的后果不同。例如在醫療診斷中,錯誤地把健康人診斷為患者可能會帶來進一步檢查的麻煩,但是錯誤地把患者診斷為健康人,則可能會喪失了拯救生命的最佳時機;再如,門禁系統錯誤地把可通行人員攔在門外,將使得用戶體驗不佳,但錯誤地把陌生人放進門內,則會造成嚴重的安全事故;在信用卡盜用檢查中,將正常使用誤認為是盜用,可能會使用戶體驗不佳,但是將盜用誤認為是正常使用,會使用戶承受巨大的損失。為了權衡不同類型錯誤所造成的不同損失,可為錯誤賦予“非均等代價”(unequal cost)。

閾值調整(threshold moving)

直接基於原始訓練集進行學習,但在用訓練好的分類器進行預測時,將原本默認為0.5的閾值調整到 \(\frac{|P|}{(|P|+|N|)}\)即可。(大部分是負樣本,因此分類器傾向於給出較低的分數)

3.2 調整數據

調整數據的方法(也稱為重采樣方法)是不平衡學習領域發展最早、影響力最大、使用最廣泛的一類方法,關注於通過修改訓練數據集以使得標准學習算法也能在其上有效訓練。根據實現方式的不同,可被進一步分類為:

  • 從多數類別中刪除樣本(欠采樣,如ENN、Tomeklink、NearMiss等)
  • 為少數類別生成新樣本(過采樣,如SMOTE、Borderline-SMOTE、ADASYN等)
  • 上述兩種方案的結合(過采樣+欠采樣去噪,如SMOTE+ENN等)

由於隨機欠采樣可能會丟失含有重要信息的樣本,隨機過采樣可能會招致嚴重的過擬合(簡單的復制少數類的樣本),引入無意義的甚至有害的新樣本(粗暴地合成少數類樣本),因此發展了一系列更高級的方法,試圖根據數據的分布信息來在進行重采樣的同時保持原有的數據結構。

注意:在重采樣過程中,要盡可能的保持訓練樣本和測試樣本的概率分布是一致的。如果違背了獨立同分布的假設,很可能會產生不好的效果。

3.2.1 欠采樣(under sampling)

下面介紹三種典型欠采樣方法。

Edited Nearest Neighbor (ENN)

針對那些多數類的樣本,如果它的大部分k近鄰樣本都跟它本身的類別不一樣,就說明它處於類別邊緣交界處甚至少數類簇中,我們就把它刪除。

Repeated Edited Nearest Neighbor(RENN)

這個方法就是不斷的重復上述的刪除過程,直到無法再刪除為止。

Tomek Link Removal

其思想是,類別間的邊緣可能增大分類難度,通過去除邊緣中的多數類樣本可以使得類別間margin更大,便於分類。具體方法是:如果有兩個不同類別的樣本,它們的最近鄰都是對方,也就是A的最近鄰是B,B的最近鄰是A,那么A,B就是Tomek link,我們要做的就是將所有Tomek link都刪除掉。那么一個刪除Tomek link的方法就是,將組成Tomek link的兩個樣本,如果有一個屬於多數類樣本,就將該多數類樣本刪除掉。這樣我們可以發現正負樣本就分得更開了。如下圖所示。

3.2.2 過采樣(over sampling)

這里主要介紹兩種比較經典的過采樣方法。

SMOTE(Synthetic Minority Oversampling,合成少數類過采樣)

SMOTE是對隨機過采樣方法的一個改進算法,通過對少數類樣本進行插值來產生更多的少數類樣本。基本思想是針對每個少數類樣本,從它的k近鄰中隨機選擇一個樣本 (該樣本也是少數類中的一個),然后在兩者之間的連線上隨機選擇一點作為新合成的少數類樣本。

SMOTE會隨機選取少數類樣本用以合成新樣本,而不考慮周邊樣本的情況,這樣容易帶來兩個問題:

  • 如果選取的少數類樣本周圍也都是少數類樣本,則新合成的樣本不會提供太多有用信息。這就像支持向量機中遠離margin的點對決策邊界影響不大。
  • 如果選取的少數類樣本周圍都是多數類樣本,這類的樣本可能是噪音,則新合成的樣本會與周圍的多數類樣本產生大部分重疊,致使分類困難。

總的來說我們希望新合成的少數類樣本能處於兩個類別的邊界附近,這樣往往能提供足夠的信息用以分類。這就是下面的 Borderline SMOTE 算法要做的事情。

Borderline SMOTE

過程:

  • 先將所有的少數類樣本分成三類,1. Noise: 所有的k近鄰個樣本都屬於多數類;2. Danger : 超過一半的k近鄰樣本屬於多數類;3. Safe: 超過一半的k近鄰樣本屬於少數類。如下圖所示。
  • Danger類的點都在邊界處,以此為種子作為出發點,然后用SMOTE算法產生新的樣本。若選取的另一端的樣本在Noise或Safe集合中,則隨機插值處應靠近種子樣本端。

3.2.3 欠采樣和過采樣的結合

實際貌似並沒有帶來多少效果提升,可能是對數據分布摻水太多?

  • SMOTE + Tomek Link Removal
  • SMOTE + ENN

3.2.4 調整數據方法的優劣

優點:

  • 能夠去除噪聲/平衡類別分布:在重采樣后的數據集上訓練可以提高某些分類器的分類性能。
  • 欠采樣方法減小數據集規模:可能降低模型訓練時的計算開銷。

缺點:

  • 采樣過程計算效率低下:通常使用基於距離的鄰域關系(通常是k-最近鄰方法)來提取數據分布信息,這方面的計算消耗大。
  • 易被噪聲影響:最近鄰算法容易被噪聲干擾,可能無法得到准確的分布信息,從而導致不合理的重采樣策略。
  • 過采樣方法生成過多數據:會進一步增大訓練集的樣本數量,增大計算開銷,並可能導致過擬合。
  • 不適用於無法計算距離的復雜數據集:工業數據集經常會含有類別特征(如用戶ID)或者缺失值,那難以定義合理的距離度量。

3.3 調整算法

調整算法的方法主要是修改現有的標准機器學習算法以修正他們對多數類的偏好。在這類方法中最流行的分支是代價敏感學習(cost-sensitive learning)。

代價敏感學習是對調整權值方法的擴展,調整權重的方法通常用在二分類中,但是代價敏感學習把這種思想進一步擴展,可以設置代價矩陣用於多分類,也可以用代價矩陣對標准算法進行改造,使其適應不平衡數據的學習,比如針對決策樹,可以將代價矩陣代入到決策閾值選擇、分裂標准、剪枝這三個方面。

代價敏感學習的優點:

  • 不增加訓練復雜度,可直接用於多分類問題。

代價敏感學習的缺點:

  • 需要領域先驗知識:代價矩陣需要由領域專家根據任務的先驗知識提供,這在許多現實問題中顯然是不可用的。因此在實際應用時代價矩陣通常被直接設置為歸一化的不同類別樣本數量比,不能保證得到最優的分類性能。
  • 不適合某些分類器:對於需要以批次訓練(mini-batch training)方法訓練的模型(如神經網絡),少數類樣本僅僅存在於在很少的批次中,這會導致梯度下降更新的非凸優化過程會很快陷入鞍點,使得網絡無法進行有效學習。

3.4 集成方法

人多力量大,總有一款集成方法適合你。這里主要介紹兩種:EasyEnsemble算法和BalanceCascade算法。

EasyEnsemble算法

類似Bagging的方法。每次從負例N(多數類)中有放回抽取出一個子集N',大小同正例P(少數類);將每個子集N'與P聯合起來訓練生成多個基分類器;最終將這些基分類器組合形成一個集成學習系統(通過加權平均或者算術平均)。

BalanceCascade算法

基於Adaboost,將Adaboost作為基分類器。在每一輪訓練時都使用與正例P數量相等的訓練集N',訓練出一個Adaboost基分類器;然后使用該分類器對負例集合N進行預測,通過控制分類閾值來控制假正例率FPR為f,將N中所有判斷正確的負例刪除;重復迭代T次。(注意:每一次刪除后留下的比例為f,則迭代T-1次后剩下的負例數量為|N|*f^(T-1),即等於正例個數|P|,然后再迭代最后一次。)

優點:

  • 效果通常較好:沒有什么問題是ensemble不能解決的,如果有,再多加一個base learner。根據前人經驗,集成學習方法仍然是解決不平衡學習問題最有效的方法。
  • 可使用迭代過程中的反饋進行動態調整:BalanceCascade會在每輪迭代中丟棄那些已經被當前分類器很好地分類的多數類樣本,具有動態重采樣的思想。

缺點:

  • 容易引入基學習器不平衡學習的缺點;
  • 進一步增大計算開銷;
  • BalanceCascade對噪聲不魯棒:一味保留難以分類樣本的策略可能導致在后期的迭代中過度擬合噪聲/離群點。

4 如何選擇類別不平衡中學習的評價指標?

由於類別不平衡,而且我們也比較關心少數類的正樣本,因此:

  • 可以使用聚焦於正例的PR曲線、F1值等;
  • precision的假設是分類器的閾值是0.5,因此如果使用precision,請注意調整分類閾值。相比之下,precision@n更有意義。

注意:

  • 盡量不要用accuracy,在這里沒啥意義;
  • 盡量不要選擇ROC:ROC曲線對類別不平衡問題不敏感,這是其優點也是其缺點。在類別不平衡情況下,而且我們也比較關心少數類時,ROC曲線給出的過於樂觀的估計就非常具有迷惑性。如果采用ROC曲線來作為評價指標,很容易因為AUC值高,而忽略了少數類樣本的實際分類效果其實並不理想的情況。

5 關於解決方法選擇的一些建議?

由於三維以上的特征空間難以可視化,所以通常難以直觀地針對數據本身的特點去選擇合適的方法,但是各種方法都有其適用的范圍,這是難點所在。如果非要推薦一款又高級又好用的方法,那就先試試 隨機降采樣 + Bagging。

6 小結

  • 類別不平衡有5種常見的情況,其中情況1是最好的情況,只需要使用合適的分類器和評價指標;
  • 解決方法需要因地制宜(甚至有時候不需要專門處理),包括省心的方法、調整數據、調整算法和集成;
  • 類別不平衡中學習的評價指標最好選用聚焦於正例的指標,而非Accuracy和ROC;
  • 隨機降采樣 + Bagging是萬金油。

Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM