分類問題的一個underlying assumption是各個類別的數據都有自己的分布,當某類數據少到難以觀察結構的時候,我們可以考慮拋棄該類數據,轉而學習更為明顯的多數類模式,而后將不符合多數類模式的樣本判斷為異常/少數類,某些時候會有更好的效果。此時該問題退化為異常檢測(anomaly detection)問題。
對於一般的機器學習方法,最常見的評價指標無疑是分類准確度ACC (accuracy),ACC的含義非常直觀並且在通常情況下都很有效。然而對於不平衡的分類任務,ACC並不能很好地反映分類器的性能。考慮以下情況:一個含有10000條樣本的數據集,其中 此時一個將所有樣本都判斷成多數類樣本的分類器能夠獲得99%的分類准確率,這是一個相當高的分數,但給一個完全無法區分出少數類樣本的分類器如此高的分數顯然是不合理的。由於ACC等傳統評價指標的特性,在數據分布不平衡時其往往會導致分類器的輸出傾向於在數據集中占多數的類別:輸出多數類會帶來更高的分類准確率,但在我們所關注的少數類中表現不佳。
類別不平衡問題有一些更加合理的評價准則,這些指標通常是基於真正例TP/真負例TF/假正例FP/假負例FN的個數計算的。在二分類場景下,上述四種樣本的數量可以通過計算混淆矩陣。
基於混淆矩陣我們可以使用准確率(Precision)和召回率(Recall)來評價模型在不平衡數據上的分類精度。F-score(F1)和G-mean(GM)是准確率和召回率的調和平均值 [4,5]。MCC [6](Matthews correlation coefficient,即馬修斯相關系數)考慮了各種樣本的個數,是一個在類別平衡或不平衡下都可使用的評價指標。AUCPRC [7](Area Under Curve of Precision-Recall Curve)指准確率-召回率曲線下的面積。這些評價准則不會被不同類別中樣本的數量所影響,因此通常被認為是“無偏的”,可以在類別不平衡中使用。需要注意的是一個常用的評價指標AUCROC(Area Under Receiver-Operator Characteristic curve)其實是有偏的,它不適用於不平衡場景下的模型評估。
通常情況下,類別不平衡程度越高,數據集的分類難度越大。但在一些工作中,發現存在某些高度不平衡的數據集,在這些數據集上不加任何修改的標准學習模型(如,SVM,Decision Tree等)仍能得到很好的分類結果。顯然,類別不平衡本身並不是分類困難的來源,其背后的原因需要對數據分布以及模型在訓練過程中的行為進行更細致的觀察。
一些研究工作嘗試說明不平衡數據集上分類困難的本質原因,這些工作認為分類困難的原因來自於數據分布中的一些本質因素。如,
-
過多的少數類樣本出現在多數類樣本密集的區域 [8]
-
類別之間的分布嚴重重疊(即不同類別的樣本相對密集地出現在特征空間的同一區域)[8]
-
數據中本身存在的噪聲,尤其是少數類的噪聲 [9]
-
少數類分布的稀疏性(sparsity)以及稀疏性導致的拆分多個子概念(sub-concepts,可理解為子clusters)並且每個子概念僅含有較少的樣本數量 [10]
標准機器學習算法假設屬於不同類別的樣本數量大致相似。因此類別的不均勻分布給在不平衡數據集上應用標准學習算法帶來了困難:這些學習算法的設計背后隱含的優化目標是數據集上的分類准確度,而這會導致學習算法在不平衡數據上更偏向於含更多樣本的多數類。多數不平衡學習(imbalance learning)算法都是為了解決這種“對多數類的偏好”而提出:
1 數據集方法:
數據級方法是不平衡學習領域發展最早、影響力最大、使用最廣泛的一類方法,也可稱為重采樣方法。該類方法關注於通過修改訓練數據集以使得標准學習算法也能在其上有效訓練。根據實現方式的不同,數據級方法可被進一步分類為:
1. 從多數類別中刪除樣本的方法(欠采樣,如RUS、NearMiss[11]、ENN[12]、Tomeklink[13]等)
2. 為少數類別生成新樣本的方法(過采樣,如SMOTE[14],ADASYN[15],Borderline-SMOTE[16]等)
3. 結合上述兩種方案的混合類方法(過采樣+欠采樣去噪,如SMOTE+ENN[17]等)
標准的隨機重采樣方法使用隨機方法來選擇用於預處理的目標樣本。然而隨機方法可能會導致丟棄含有重要信息的樣本(隨機欠采樣)或者引入無意義的甚至有害的新樣本(隨機過采樣),因此有一系列更高級的方法,試圖根據根據數據的分布信息來在進行重采樣的同時保持原有的數據結構
Strength:
1. 該類方法能夠去除噪聲/平衡類別分布:在重采樣后的數據集上訓練可以提高某些分類器的分類性能。
2. 欠采樣方法減小數據集規模:欠采樣方法會去除一些多數類樣本,從而可能降低模型訓練時的計算開銷。
Weakness:
1. 采樣過程計算效率低下:這一系列的“高級”重采樣方法通常使用基於距離的鄰域關系(通常是k-最近鄰方法)來提取數據分布信息。該方式的缺點是需要計算每個數據樣本之間的距離,而計算距離需要的計算量隨着數據集的大小呈平方級增長,因此在大規模數據集上應用這些方法可能會帶來極低的計算效率。
2. 易被噪聲影響:此外在具有高不平衡比且包含大量噪聲的工業數據集中,少數類的結構可能並不能被樣本的分布很好地表示。而被這些重采樣方法用來提取分布信息的最近鄰算法很容易被噪聲干擾,因此可能無法得到准確的分布信息,從而導致不合理的重采樣策略。
3. 過采樣方法生成過多數據:當應用於大規模且高度不平衡的數據集時,過采樣類的方法可能會生成大量的少數類樣本以平衡數據集。這會進一步增大訓練集的樣本數量,增大計算開銷,減慢訓練速度,並可能導致過擬合。
4. 不適用於無法計算距離的復雜數據集:最重要的一點是這些重采樣方法依賴於明確定義的距離度量,使得它們在某些數據集上不可用。在實際應用中,工業數據集經常會含有類別特征(即不分布在連續空間上的特征,如用戶ID)或者缺失值,此外不同特征的取值范圍可能會有巨大的差別。在這些數據集上定義合理的距離度量十分困難。
-
算法級方法
算法級方法專注於修改現有的標准機器學習算法以修正他們對多數類的偏好。在這類方法中最流行的分支是代價敏感學習[18,19](cost-sensitive learning),我們在此也只討論該類算法。代價敏感學習給少數類樣本分配較高的誤分類代價,而給多數類樣本分配較小的誤分類代價。通過這種方式代價敏感學習在學習器的訓練過程中人為提高了少數類別樣本的重要性,以此減輕分類器對多數類的偏好。
Strength:
1. 不增加訓練復雜度:使用該類算法魔改后的算法通常會有更好的表現,並且沒有增加訓練的計算復雜度。
2. 可直接用於多分類問題:該類算法通常只修改誤分類代價,因此可直接擴展到多分類問題上。
Weakness:
1. 需要領域先驗知識:必須注意的是,代價敏感學習中的代價矩陣(cost matrix)需要由領域專家根據任務的先驗知識提供,這在許多現實問題中顯然是不可用的。因此在實際應用時代價矩陣通常被直接設置為歸一化的不同類別樣本數量比。由於缺乏領域知識的指導,這種擅自設置的代價矩陣並不能保證得到最優的分類性能。
2. 不能泛化到不同任務:對於特定問題設計的代價矩陣只能用於該特定任務,在其他任務上使用時並不能保證良好的性能表現。
3. 依賴於特定分類器:另一方面,對於諸如神經網絡的需要以批次訓練(mini-batch training)方法訓練的模型,少數類樣本僅僅存在於在很少的批次中,而大部分批次中只含有多數類樣本,這會給神經網絡訓練帶來災難性的后果:使用梯度下降更新的非凸優化過程會很快陷入局部極值點/鞍點(梯度為0),導致網絡無法進行有效學習。使用敏感代價學習來給樣本加權並不能解決這個問題。
-
集成學習方法
集成學習類方法專注於將一種數據級或算法級方法與集成學習相結合,以獲得強大的集成分類器。由於其在類別不平衡任務中表現出色,在實際應用中集成學習越來越受歡迎。它們中的大多數基於某種特定的集成學習算法(例如,Adaptive Boosting [20])並在集成的過程中嵌入一種其他的不平衡學習方法(例如,SMOTE[14])。
e.g., SMOTE+Boosting=SMOTEBoost [21]; SMOTE+Bagging=SMOTEBagging [22];
另有一些集成學習方法的基學習器也是集成學習器(例如,EasyEnsemble,BalanceCascade[23])。因此最終的分類器是一個“集成的集成”。
“集成的集成”並不代表一定會有更好的表現,作為基學習器的集成學習方法也會影響分類性能。如上述兩種方法使用AdaBoost作為基分類器,Boosting類方法本身就對噪聲敏感,加上BalanceCascade本身有相同的問題,因此使用非集成分類器可能效果反而更好(如直接使用C4.5)。
PS,這兩種方法使用AdaBoost做基學習器的原因大概率是為了蹭熱點(2010年左右)。
Strength:
1. 效果通常較好:沒有什么問題是ensemble不能解決的,如果有,再多加一個base learner。根據我的經驗集成學習方法(魔改的)仍然是解決不平衡學習問題最有效的方法。
2. 可使用迭代過程中的反饋進行動態調整:極少數的集成方法具有了動態重采樣的思想,如BalanceCascade會在每輪迭代中丟棄那些已經被當前分類器很好地分類的多數類樣本(assumption是這些樣本已經不含對模型有貢獻的信息)。該方法在實際應用時也實現了相比於其他降采樣方法更快的收斂速度,使其可以使用相對較少的分類器來得到更優的分類表現。
Weakness:
1. 包含所使用的不平衡學習方法的缺點:由於大多數不平衡集成學習方法仍然在其pipeline中使用了標准的數據級/算法級方法,因此上述兩類方法的缺點也同樣存在於使用他們的集成方法中。
2. 過采樣+集成進一步增大計算開銷:當應用於實際任務時,即便集成能夠提升大部分方法的分類表現,這些數據級/算法級方法仍然存在計算效率低,適用性差並且易被噪聲影響的缺點。例如,作為過采樣方法的SMOTE在單獨使用時已經引入了大量的新訓練樣本,使用SMOTE生成更多的訓練數據集並訓練更多的分類器只會使整個訓練過程變得更慢。
3. 對噪聲不魯棒:BalanceCascade做出了非常有意義的探索,但其一味保留難以分類樣本的策略可能導致在后期的迭代中過度擬合噪聲/離群點,並最終惡化集成分類器的表現。換言之,其對噪聲不魯棒
-
欠采樣:一般是用來平衡數據集、去噪。平衡數據集的有隨機欠采樣/NearMiss,采樣和訓練速度都很快。隨機欠采樣在任何情況下都能用,但在數據集不平衡程度較高時會不可避免地丟棄大部分多數類樣本造成信息損失。NearMiss對噪聲極端敏感,有噪聲基本就廢掉。去噪方法有很多,如Tomeklink,AllKNN等,需要數據集上有良好定義的距離度量,在大規模數據集上計算量大。去噪之后對有的分類器有效,有的無效。
-
過采樣:隨機過采樣任何情況下都不要用,及其容易造成過擬合。SMOTE、ADASYN在小規模數據上可以一試。當數據規模大且不平衡程度高時,過采樣方法生成巨量的合成樣本,需要很多額外計算資源。同時此類過采樣基於少數類樣本的結構信息,在少數類的表示質量很差時甚至會反向優化:過采樣效果還不如直接訓練。
-
混合采樣:理論上加入了去噪類的欠采樣算法來清潔過采樣之后的數據集。實際使用起來我沒感覺到有什么不同,唯一的區別是加了去噪方法之后更慢了。
-
Cost-sensitive:在數據集不平衡程度不高時可用,訓練分類器的效率跟使用原始數據訓練沒有什么區別。缺點是一般需要自己當“領域專家”來設置cost matrix(多了個參數要調),設的不好通常也會得到不理想的效果。此外在不平衡嚴重的時候,由於沒有對數據集的修改,神經網絡的訓練會crash:連續數個mini-batch都是多數類樣本,分分鍾陷到local optimal/鞍點。
-
集成:隨機降采樣+集成,在不平衡比較高時需要較多的基學習器來達到較好的效果。注意Boosting容易被噪聲影響,Bagging方法是真正的萬金油,增加基學習器數量效果一般不會下降。高級降采樣+集成,也可以嘗試,運行會慢並且效果不能保證比隨機方法好。高級過采樣+集成,同上,數據規模大且不平衡程度高情況下,訓練樣本數量爆炸。尤其是集成方法還要訓練好多個基學習器。BalanceCascade,信息利用效率高,只用很少的基學習器就能達到較好的效果,但對噪聲不魯棒