注:本文主要探討分類任務(wù)的類別不均衡,回歸任務(wù)的樣本不均衡詳見《Delving into Deep Imbalanced Regression

1.2 不均衡的根本影響

很多時候我們遇到樣本不均衡問題時,很直接的反應(yīng)就是去“打破”這種不平衡。但是樣本不均衡有什么影響?有必要去解決嗎?

具體舉個例子,在一個欺詐識別的案例中,好壞樣本的占比是1000:1,而如果我們直接拿這個比例去學(xué)習(xí)模型的話,因為扔進去模型學(xué)習(xí)的樣本大部分都是好的,就很容易學(xué)出一個把所有樣本都預(yù)測為好的模型,而且這樣預(yù)測的概率準確率還是非常高的。而模型最終學(xué)習(xí)的并不是如何分辨好壞,而是學(xué)習(xí)到了”好 遠比 壞的多“這樣的先驗信息,憑著這個信息把所有樣本都判定為“好”就可以了。這樣就背離了模型學(xué)習(xí)去分辨好壞的初衷了。

所以,樣本不均衡帶來的根本影響是:模型會學(xué)習(xí)到訓(xùn)練集中樣本比例的這種先驗性信息,以致于實際預(yù)測時就會對多數(shù)類別有側(cè)重(可能導(dǎo)致多數(shù)類精度更好,而少數(shù)類比較差)。如下圖(示例代碼請見:github.com/aialgorithm),類別不均衡情況下的分類邊界會偏向“侵占”少數(shù)類的區(qū)域。更重要的一點,這會影響模型學(xué)習(xí)更本質(zhì)的特征,影響模型的魯棒性。

總結(jié)一下也就是,我們通過解決樣本不均衡,可以減少模型學(xué)習(xí)樣本比例的先驗信息,以獲得能學(xué)習(xí)到辨別好壞本質(zhì)特征的模型

1.3 判斷解決不均衡的必要性

從分類效果出發(fā),通過上面的例子可知,不均衡對于分類結(jié)果的影響不一定是不好的,那什么時候需要解決樣本不均衡

二、樣本不均衡解決方法

基本上,在學(xué)習(xí)任務(wù)有些難度的前提下,不均衡解決方法可以歸結(jié)為:通過某種方法使得不同類別的樣本對于模型學(xué)習(xí)中的Loss(或梯度)貢獻是比較均衡的。以消除模型對不同類別的偏向性,學(xué)習(xí)到更為本質(zhì)的特征。本文從數(shù)據(jù)樣本、模型算法、目標(損失)函數(shù)、評估指標等方面,對個中的解決方法進行探討。

2.1 樣本層面

2.1.1欠采樣、過采樣

最直接的處理方式就是樣本數(shù)量的調(diào)整了,常用的可以:

2.1.2 數(shù)據(jù)增強

數(shù)據(jù)增強(Data Augmentation)是在不實質(zhì)性的增加數(shù)據(jù)的情況下,從原始數(shù)據(jù)加工出更多數(shù)據(jù)的表示,提高原數(shù)據(jù)的數(shù)量及質(zhì)量,以接近于更多數(shù)據(jù)量產(chǎn)生的價值,從而提高模型的學(xué)習(xí)效果(其實也是過采樣的方法的一種。具體介紹及代碼可見【數(shù)據(jù)增強】)。如下列舉常用的方法:

樣本變換數(shù)據(jù)增強即采用預(yù)設(shè)的數(shù)據(jù)變換規(guī)則進行已有數(shù)據(jù)的擴增,包含單樣本數(shù)據(jù)增強和多樣本數(shù)據(jù)增強。

單樣本增強(主要用于圖像):主要有幾何操作、顏色變換、隨機擦除、添加噪聲等方法產(chǎn)生新的樣本,可參見imgaug開源庫。

多樣本增強:是通過組合及轉(zhuǎn)換多個樣本,主要有Smote類(可見imbalanced-learn.org/stable/references/over_sampling.html)、SamplePairing、Mixup等方法在特征空間內(nèi)構(gòu)造已知樣本的鄰域值樣本。

生成模型如變分自編碼網(wǎng)絡(luò)(Variational Auto-Encoding network, VAE)和生成對抗網(wǎng)絡(luò)(Generative Adversarial Network, GAN),其生成樣本的方法也可以用于數(shù)據(jù)增強。這種基于網(wǎng)絡(luò)合成的方法相比于傳統(tǒng)的數(shù)據(jù)增強技術(shù)雖然過程更加復(fù)雜, 但是生成的樣本更加多樣。

數(shù)據(jù)樣本層面解決不均衡的方法,需要關(guān)注的是:

2.2 損失函數(shù)的層面

損失函數(shù)層面主流的方法也就是常用的代價敏感學(xué)習(xí)(cost-sensitive),為不同的分類錯誤給予不同懲罰力度(權(quán)重),在調(diào)節(jié)類別平衡的同時,也不會增加計算復(fù)雜度。如下常用方法:

2.2.1 class weight

這最常用也就是scikit模型的’class weight‘方法,If ‘balanced’, class weights will be given by n_samples / (n_classes * np.bincount(y)). If a dictionary is given, keys are classes and values are corresponding class weights. If None is given, the class weights will be uniform.,class weight可以為不同類別的樣本提供不同的權(quán)重(少數(shù)類有更高的權(quán)重),從而模型可以平衡各類別的學(xué)習(xí)。如下圖通過為少數(shù)類做更高的權(quán)重,以避免決策偏重多數(shù)類的現(xiàn)象(類別權(quán)重除了設(shè)定為balanced,還可以作為一個超參搜索。示例代碼請見github.com/aialgorithm):

clf2?=?LogisticRegression(class_weight={0:1,1:10})??#?代價敏感學(xué)習(xí)

2.2.2 OHEM 和 Focal Loss

In this work, we first point out that the class imbalance can be summarized to the imbalance in difficulty and the imbalance in difficulty can be summarized to the imbalance in gradient norm distribution. 

–原文可見《Gradient Harmonized Single-stage Detector》

上文的大意是,類別的不平衡可以歸結(jié)為難易樣本的不平衡,而難易樣本的不平衡可以歸結(jié)為梯度的不平衡。按照這個思路,OHEM和Focal loss都做了兩件事:難樣本挖掘以及類別的平衡。(另外的有 GHM、 PISA等方法,可以自行了解)

2.3 模型層面

模型方面主要是選擇一些對不均衡比較不敏感的模型,比如,對比邏輯回歸模型(lr學(xué)習(xí)的是全量訓(xùn)練樣本的最小損失,自然會比較偏向去減少多數(shù)類樣本造成的損失),決策樹在不平衡數(shù)據(jù)上面表現(xiàn)相對好一些,樹模型是按照增益遞歸地劃分數(shù)據(jù)(如下圖),劃分過程考慮的是局部的增益,全局樣本是不均衡,局部空間就不一定,所以比較不敏感一些(但還是會有偏向性)。相關(guān)實驗可見arxiv.org/abs/2104.02240。

解決不均衡問題,更為優(yōu)秀的是基于采樣+集成樹模型等方法,可以在類別不均衡數(shù)據(jù)上表現(xiàn)良好。

2.3.1采樣+集成學(xué)習(xí)

這類方法簡單來說,通過重復(fù)組合少數(shù)類樣本與抽樣的同樣數(shù)量的多數(shù)類樣本,訓(xùn)練若干的分類器進行集成學(xué)習(xí)。

通常,在數(shù)據(jù)集噪聲較小的情況下,可以用BalanceCascade,可以用較少的基分類器數(shù)量得到較好的表現(xiàn)(基于串行的集成學(xué)習(xí)方法,對噪聲敏感容易過擬合)。噪聲大的情況下,可以用EasyEnsemble,基于串行+并行的集成學(xué)習(xí)方法,bagging多個Adaboost過程可以抵消一些噪聲影響。此外還有RUSB、SmoteBoost、balanced RF等其他集成方法可以自行了解。

2.3.2 異常檢測

類別不平衡很極端的情況下(比如少數(shù)類只有幾十個樣本),將分類問題考慮成異常檢測(anomaly detection)問題可能會更好。

異常檢測是通過數(shù)據(jù)挖掘方法發(fā)現(xiàn)與數(shù)據(jù)集分布不一致的異常數(shù)據(jù),也被稱為離群點、異常值檢測等等。無監(jiān)督異常檢測按其算法思想大致可分為幾類:基于聚類的方法、基于統(tǒng)計的方法、基于深度的方法(孤立森林)、基于分類模型(one-class SVM)以及基于神經(jīng)網(wǎng)絡(luò)的方法(自編碼器AE)等等。具體方法介紹及代碼可見【異常檢測方法速覽】

2.4 決策及評估指標

本節(jié)關(guān)注的重點是,當(dāng)我們采用不平衡數(shù)據(jù)訓(xùn)練模型,如何更好決策以及客觀地評估不平衡數(shù)據(jù)下的模型表現(xiàn)。對于分類常用的precision、recall、F1、混淆矩陣,樣本不均衡的不同程度,都會明顯改變這些指標的表現(xiàn)。

對于類別不均衡下模型的預(yù)測,我們可以做分類閾值移動,以調(diào)整模型對于不同類別偏好的情況(如模型偏好預(yù)測負樣本,偏向0,對應(yīng)的我們的分類閾值也往下調(diào)整),達到?jīng)Q策時類別平衡的目的。這里,通常可以通過P-R曲線,選擇到較優(yōu)表現(xiàn)的閾值。

對于類別不均衡下的模型評估,可以采用AUC、AUPRC(更優(yōu))評估模型表現(xiàn)。AUC的含義是ROC曲線的面積,其數(shù)值的物理意義是:隨機給定一正一負兩個樣本,將正樣本預(yù)測分值大于負樣本的概率大小。AUC對樣本的正負樣本比例情況是不敏感,即使正例與負例的比例發(fā)生了很大變化,ROC曲線面積也不會產(chǎn)生大的變化。具體可見?【 評估指標】

小結(jié):

我們通過解決樣本不均衡,可以減少模型學(xué)習(xí)樣本比例的先驗信息,以獲得能學(xué)習(xí)到辨別好壞本質(zhì)特征的模型。
可以將不均衡解決方法歸結(jié)為:通過某種方法使得不同類別的樣本對于模型學(xué)習(xí)中的Loss(或梯度)貢獻是比較均衡的。具體可以從數(shù)據(jù)樣本、模型算法、目標函數(shù)、評估指標等方面進行優(yōu)化,其中數(shù)據(jù)增強、代價敏感學(xué)習(xí)及采樣+集成學(xué)習(xí)是比較常用的,效果也是比較明顯的。其實,不均衡問題解決也是結(jié)合實際再做方法選擇、組合及調(diào)整,在驗證中調(diào)優(yōu)的過程。

文章轉(zhuǎn)自微信公眾號@算法進階

上一篇:

機器學(xué)習(xí)可視化技術(shù)概覽(Python)

下一篇:

圖解 72 個機器學(xué)習(xí)基礎(chǔ)知識點
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費