機(jī)器學(xué)習(xí):如何解決機(jī)器學(xué)習(xí)中數(shù)據(jù)不平衡問(wèn)題

這幾年來(lái),機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘非晨骼火熱突委,它們逐漸為世界帶來(lái)實(shí)際價(jià)值瘟斜。與此同時(shí),越來(lái)越多的機(jī)器學(xué)習(xí)算法從學(xué)術(shù)界走向工業(yè)界术陶,而在這個(gè)過(guò)程中會(huì)有很多困難凑懂。數(shù)據(jù)不平衡問(wèn)題雖然不是最難的,但絕對(duì)是最重要的問(wèn)題之一瞳别。

一征候、數(shù)據(jù)不平衡

在學(xué)術(shù)研究與教學(xué)中杭攻,很多算法都有一個(gè)基本假設(shè)祟敛,那就是數(shù)據(jù)分布是均勻的。當(dāng)我們把這些算法直接應(yīng)用于實(shí)際數(shù)據(jù)時(shí)兆解,大多數(shù)情況下都無(wú)法取得理想的結(jié)果馆铁。因?yàn)閷?shí)際數(shù)據(jù)往往分布得很不均勻,都會(huì)存在“長(zhǎng)尾現(xiàn)象”锅睛,也就是所謂的“二八原理”埠巨。下圖是新浪微博交互分布情況:

可以看到大部分微博的總互動(dòng)數(shù)(被轉(zhuǎn)發(fā)、評(píng)論與點(diǎn)贊數(shù)量)在0-5之間现拒,交互數(shù)多的微博(多于100)非常之少辣垒。如果我們?nèi)ヮA(yù)測(cè)一條微博交互數(shù)所在檔位,預(yù)測(cè)器只需要把所有微博預(yù)測(cè)為第一檔(0-5)就能獲得非常高的準(zhǔn)確率印蔬,而這樣的預(yù)測(cè)器沒(méi)有任何價(jià)值勋桶。那如何來(lái)解決機(jī)器學(xué)習(xí)中數(shù)據(jù)不平衡問(wèn)題呢?這便是這篇文章要討論的主要內(nèi)容。

嚴(yán)格地講例驹,任何數(shù)據(jù)集上都有數(shù)據(jù)不平衡現(xiàn)象捐韩,這往往由問(wèn)題本身決定的,但我們只關(guān)注那些分布差別比較懸殊的鹃锈;另外荤胁,雖然很多數(shù)據(jù)集都包含多個(gè)類別,但這里著重考慮二分類屎债,因?yàn)榻鉀Q了二分類中的數(shù)據(jù)不平衡問(wèn)題后仅政,推而廣之就能得到多分類情況下的解決方案。綜上扔茅,這篇文章主要討論如何解決二分類中正負(fù)樣本差兩個(gè)及以上數(shù)量級(jí)情況下的數(shù)據(jù)不平衡問(wèn)題已旧。

不平衡程度相同(即正負(fù)樣本比例類似)的兩個(gè)問(wèn)題,解決的難易程度也可能不同召娜,因?yàn)閱?wèn)題難易程度還取決于我們所擁有數(shù)據(jù)有多大运褪。比如在預(yù)測(cè)微博互動(dòng)數(shù)的問(wèn)題中,雖然數(shù)據(jù)不平衡玖瘸,但每個(gè)檔位的數(shù)據(jù)量都很大——最少的類別也有幾萬(wàn)個(gè)樣本秸讹,這樣的問(wèn)題通常比較容易解決;而在癌癥診斷的場(chǎng)景中雅倒,因?yàn)榛及┌Y的人本來(lái)就很少璃诀,所以數(shù)據(jù)不但不平衡,樣本數(shù)還非常少蔑匣,這樣的問(wèn)題就非常棘手劣欢。綜上,可以把問(wèn)題根據(jù)難度從小到大排個(gè)序:大數(shù)據(jù)+分布均衡<大數(shù)據(jù)+分布不均衡<小數(shù)據(jù)+數(shù)據(jù)均衡<小數(shù)據(jù)+數(shù)據(jù)不均衡裁良。說(shuō)明:對(duì)于小數(shù)據(jù)集,機(jī)器學(xué)習(xí)的方法是比較棘手的凿将。對(duì)于需要解決的問(wèn)題,拿到數(shù)據(jù)后价脾,首先統(tǒng)計(jì)可用訓(xùn)練數(shù)據(jù)有多大牧抵,然后再觀察數(shù)據(jù)分布情況。經(jīng)驗(yàn)表明侨把,訓(xùn)練數(shù)據(jù)中每個(gè)類別有5000個(gè)以上樣本犀变,其實(shí)也要相對(duì)于特征而言,來(lái)判斷樣本數(shù)目是不是足夠秋柄,數(shù)據(jù)量是足夠的获枝,正負(fù)樣本差一個(gè)數(shù)量級(jí)以內(nèi)是可以接受的,不太需要考慮數(shù)據(jù)不平衡問(wèn)題(完全是經(jīng)驗(yàn)骇笔,沒(méi)有理論依據(jù)省店,僅供參考)机隙。

二、如何解決

解決這一問(wèn)題的基本思路是讓正負(fù)樣本在訓(xùn)練過(guò)程中擁有相同的話語(yǔ)權(quán)萨西,比如利用采樣與加權(quán)等方法有鹿。為了方便起見(jiàn),我們把數(shù)據(jù)集中樣本較多的那一類稱為“大眾類”谎脯,樣本較少的那一類稱為“小眾類”葱跋。

1. 采樣

采樣方法是通過(guò)對(duì)訓(xùn)練集進(jìn)行處理使其從不平衡的數(shù)據(jù)集變成平衡的數(shù)據(jù)集,在大部分情況下會(huì)對(duì)最終的結(jié)果帶來(lái)提升源梭。

采樣分為上采樣(Oversampling)和下采樣(Undersampling)娱俺,上采樣是把小眾類復(fù)制多份,下采樣是從大眾類中剔除一些樣本废麻,或者說(shuō)只從大眾類中選取部分樣本荠卷。

隨機(jī)采樣最大的優(yōu)點(diǎn)是簡(jiǎn)單,但缺點(diǎn)也很明顯烛愧。上采樣后的數(shù)據(jù)集中會(huì)反復(fù)出現(xiàn)一些樣本油宜,訓(xùn)練出來(lái)的模型會(huì)有一定的過(guò)擬合;而下采樣的缺點(diǎn)顯而易見(jiàn)怜姿,那就是最終的訓(xùn)練集丟失了數(shù)據(jù)慎冤,模型只學(xué)到了總體模式的一部分。

上采樣會(huì)把小眾樣本復(fù)制多份沧卢,一個(gè)點(diǎn)會(huì)在高維空間中反復(fù)出現(xiàn)蚁堤,這會(huì)導(dǎo)致一個(gè)問(wèn)題,那就是運(yùn)氣好就能分對(duì)很多點(diǎn)但狭,否則分錯(cuò)很多點(diǎn)披诗。為了解決這一問(wèn)題,可以在每次生成新數(shù)據(jù)點(diǎn)時(shí)加入輕微的隨機(jī)擾動(dòng)立磁,經(jīng)驗(yàn)表明這種做法非常有效呈队。

因?yàn)橄虏蓸訒?huì)丟失信息,如何減少信息的損失呢息罗?第一種方法叫做EasyEnsemble掂咒,利用模型融合的方法(Ensemble):多次下采樣(放回采樣才沧,這樣產(chǎn)生的訓(xùn)練集才相互獨(dú)立)產(chǎn)生多個(gè)不同的訓(xùn)練集迈喉,進(jìn)而訓(xùn)練多個(gè)不同的分類器,通過(guò)組合多個(gè)分類器的結(jié)果得到最終的結(jié)果温圆。第二種方法叫做BalanceCascade挨摸,利用增量訓(xùn)練的思想(Boosting):先通過(guò)一次下采樣產(chǎn)生訓(xùn)練集,訓(xùn)練一個(gè)分類器岁歉,對(duì)于那些分類正確的大眾樣本不放回得运,然后對(duì)這個(gè)更小的大眾樣本下采樣產(chǎn)生訓(xùn)練集膝蜈,訓(xùn)練第二個(gè)分類器,以此類推熔掺,最終組合所有分類器的結(jié)果得到最終結(jié)果饱搏。第三種方法是利用KNN試圖挑選那些最具代表性的大眾樣本,叫做NearMiss置逻,這類方法計(jì)算量很大推沸,感興趣的可以參考“Learning

from Imbalanced Data”這篇綜述的3.2.1節(jié)。

2. 數(shù)據(jù)合成

數(shù)據(jù)合成方法是利用已有樣本生成更多樣本券坞,這類方法在小數(shù)據(jù)場(chǎng)景下有很多成功案例鬓催,比如醫(yī)學(xué)圖像分析等。

SMOTE為每個(gè)小眾樣本合成相同數(shù)量的新樣本恨锚,這帶來(lái)一些潛在的問(wèn)題:一方面是增加了類之間重疊的可能性宇驾,另一方面是生成一些沒(méi)有提供有益信息的樣本。為了解決這個(gè)問(wèn)題猴伶,出現(xiàn)兩種方法:Borderline-SMOTE與ADASYN课舍。

Borderline-SMOTE的解決思路是尋找那些應(yīng)該為之合成新樣本的小眾樣本。即為每個(gè)小眾樣本計(jì)算K近鄰他挎,只為那些K近鄰中有一半以上大眾樣本的小眾樣本生成新樣本布卡。直觀地講,只為那些周圍大部分是大眾樣本的小眾樣本生成新樣本雇盖,因?yàn)檫@些樣本往往是邊界樣本忿等。確定了為哪些小眾樣本生成新樣本后再利用SMOTE生成新樣本。

橫向是真實(shí)分類情況崔挖,縱向是預(yù)測(cè)分類情況贸街,C(i,j)是把真實(shí)類別為j的樣本預(yù)測(cè)為i時(shí)的損失,我們需要根據(jù)實(shí)際情況來(lái)設(shè)定它的值狸相。

這種方法的難點(diǎn)在于設(shè)置合理的權(quán)重薛匪,實(shí)際應(yīng)用中一般讓各個(gè)分類間的加權(quán)損失值近似相等。當(dāng)然這并不是通用法則脓鹃,還是需要具體問(wèn)題具體分析逸尖。

4. 一分類

對(duì)于正負(fù)樣本極不平衡的場(chǎng)景,我們可以換一個(gè)完全不同的角度來(lái)看待問(wèn)題:把它看做一分類(One

Class Learning)或異常檢測(cè)(Novelty

Detection)問(wèn)題瘸右。這類方法的重點(diǎn)不在于捕捉類間的差別娇跟,而是為其中一類進(jìn)行建模,經(jīng)典的工作包括One-class SVM等太颤。

說(shuō)明:對(duì)于正負(fù)樣本極不均勻的問(wèn)題苞俘,使用異常檢測(cè),或者一分類問(wèn)題龄章,也是一個(gè)思路吃谣。

三乞封、如何選擇

解決數(shù)據(jù)不平衡問(wèn)題的方法有很多,上面只是一些最常用的方法岗憋,而最常用的方法也有這么多種肃晚,如何根據(jù)實(shí)際問(wèn)題選擇合適的方法呢?接下來(lái)談?wù)勔恍┪业慕?jīng)驗(yàn)仔戈。

1陷揪、在正負(fù)樣本都非常之少的情況下,應(yīng)該采用數(shù)據(jù)合成的方式杂穷;

2悍缠、在負(fù)樣本足夠多,正樣本非常之少且比例及其懸殊的情況下耐量,應(yīng)該考慮一分類方法飞蚓;

3、在正負(fù)樣本都足夠多且比例不是特別懸殊的情況下廊蜒,應(yīng)該考慮采樣或者加權(quán)的方法趴拧。

4、采樣和加權(quán)在數(shù)學(xué)上是等價(jià)的山叮,但實(shí)際應(yīng)用中效果卻有差別著榴。尤其是采樣了諸如Random Forest等分類方法,訓(xùn)練過(guò)程會(huì)對(duì)訓(xùn)練集進(jìn)行隨機(jī)采樣屁倔。在這種情況下脑又,如果計(jì)算資源允許上采樣往往要比加權(quán)好一些。

5锐借、另外问麸,雖然上采樣和下采樣都可以使數(shù)據(jù)集變得平衡,并且在數(shù)據(jù)足夠多的情況下等價(jià)钞翔,但兩者也是有區(qū)別的严卖。實(shí)際應(yīng)用中,我的經(jīng)驗(yàn)是如果計(jì)算資源足夠且小眾類樣本足夠多的情況下使用上采樣布轿,否則使用下采樣哮笆,因?yàn)樯喜蓸訒?huì)增加訓(xùn)練集的大小進(jìn)而增加訓(xùn)練時(shí)間,同時(shí)小的訓(xùn)練集非常容易產(chǎn)生過(guò)擬合汰扭。

6稠肘、對(duì)于下采樣,如果計(jì)算資源相對(duì)較多且有良好的并行環(huán)境东且,應(yīng)該選擇Ensemble方法启具。


在處理分類問(wèn)題過(guò)程中本讥,數(shù)據(jù)的不平衡分布珊泳,往往對(duì)分類結(jié)果產(chǎn)生比較大的影響鲁冯。以下是針對(duì)二項(xiàng)分類的數(shù)據(jù)不平衡問(wèn)題進(jìn)行分析。

1) 可以擴(kuò)大數(shù)據(jù)樣本色查?

? ? ? 擴(kuò)大數(shù)據(jù)樣本是一個(gè)容易被忽視的選擇薯演。在集合中,一個(gè)更大的數(shù)據(jù)集秧了,就有有可能挖掘出不同的或許更平衡的方面跨扮。之后當(dāng)尋找重復(fù)采集的數(shù)據(jù)樣本時(shí),一些小樣本類數(shù)據(jù)的例子可能是有幫助的验毡。

2)績(jī)效標(biāo)準(zhǔn)的選擇

? ? ? 混淆矩陣:將要預(yù)測(cè)的數(shù)據(jù)分到表里來(lái)顯示正確的預(yù)測(cè)衡创,并了解其不正確的預(yù)測(cè)類型。

? ? ? 精度:(準(zhǔn)確率/命中率)一種分類準(zhǔn)確性的處理法晶通。

? ? ? 召回率:又稱“查全率”璃氢,一種分類完整性的處理方法。

? ? ? F1分?jǐn)?shù)(F-score):精度和召回率的加權(quán)平均狮辽。

? ? ? kappa(Cohen's kappa):根據(jù)數(shù)據(jù)集合中數(shù)據(jù)的不平衡點(diǎn)來(lái)標(biāo)準(zhǔn)化分類精度一也。

? ? ? ROC曲線:類似于精度和召回率,準(zhǔn)確性被分為敏感性和特異性喉脖,并且可以基于這些值的平衡閾值來(lái)進(jìn)行選擇椰苟。

3)數(shù)據(jù)的重新抽樣

? ? ? 主要采用以下兩種方法:

? ? ? a)過(guò)抽樣:通過(guò)復(fù)制少數(shù)類樣本

? ? ? b)欠抽樣:刪除多數(shù)類樣本

? ? ? 一些經(jīng)驗(yàn)規(guī)則:

當(dāng)數(shù)據(jù)量很大的時(shí)候可以考慮測(cè)試欠抽樣(大于一萬(wàn)條記錄)

當(dāng)數(shù)據(jù)量比較少時(shí),可以考慮過(guò)抽樣

考慮隨機(jī)和非隨機(jī)的抽樣方案(例如分層)

考慮不同的重抽樣比率(例如1:1 树叽,1:2等)舆蝴,比較結(jié)果

4) 嘗試生成人工樣本

? ? ??一種簡(jiǎn)單的生成人工樣本的方法是從少數(shù)類的實(shí)例中隨機(jī)抽樣屬性。

? ? ??在數(shù)據(jù)集中题诵,可以根據(jù)經(jīng)驗(yàn)對(duì)數(shù)據(jù)集抽樣或者可以使用類似于樸素貝葉斯這種可以在反向運(yùn)行時(shí)须误,對(duì)每個(gè)屬性進(jìn)行獨(dú)立抽樣的模型。

? ? ? 比較常見(jiàn)的算法SMOTE(Syntheic Minority

Over-sampling)仇轻,屬于過(guò)度抽樣的方法京痢。原理是從少數(shù)類樣本數(shù)據(jù)中生成人工樣本,而不是創(chuàng)建副本篷店。該算法選擇連個(gè)或更多個(gè)類似的例子(使用距離度量)祭椰,然后隨機(jī)干擾一個(gè)實(shí)例中的一個(gè)屬性,比較器差異疲陕。

SMOTE的深入了解方淤,參考論文 ?“SMOTE:Syntheic Minority Over-sampling Technique”?

? ? ? SMOTE的實(shí)現(xiàn):

在 Python中,“UnbalanceDataset”模塊蹄殃,提拱了許多SMOTE的實(shí)現(xiàn)方法携茂,以及各種抽樣技術(shù),

在R中诅岩,DMwR包中提拱了SMOTE的實(shí)現(xiàn)方法

Weka中讳苦,可以使用SMOTE supervised filter

5)嘗試不同的算法

? ? ?決策樹(shù)算法在處理不平衡數(shù)據(jù)集的表現(xiàn)不錯(cuò)带膜。流行的決策樹(shù)算法有C5.0、CART鸳谜、隨機(jī)森林膝藕。

6)嘗試名義變量模型

7)從不同的觀點(diǎn)進(jìn)行思考

? ? ?異常檢測(cè)和變化檢測(cè)

? ? ?異常檢測(cè)是罕見(jiàn)事件的檢測(cè)。這種思維的轉(zhuǎn)變?cè)谟诳紤]以小磊作為異常值類咐扭,它可以幫助獲得一種新方法來(lái)分離和分類樣本芭挽。

8)嘗試新的方法

? ? ?可以思考將大問(wèn)題分解成小問(wèn)題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝗肪,一起剝皮案震驚了整個(gè)濱河市袜爪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌薛闪,老刑警劉巖饿敲,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逛绵,居然都是意外死亡怀各,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門术浪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓢对,“玉大人,你說(shuō)我怎么就攤上這事胰苏∷队迹” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵硕并,是天一觀的道長(zhǎng)法焰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)倔毙,這世上最難降的妖魔是什么埃仪? 我笑而不...
    開(kāi)封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮陕赃,結(jié)果婚禮上卵蛉,老公的妹妹穿的比我還像新娘。我一直安慰自己么库,他們只是感情好傻丝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著诉儒,像睡著了一般葡缰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天泛释,我揣著相機(jī)與錄音滤愕,去河邊找鬼。 笑死胁澳,一個(gè)胖子當(dāng)著我的面吹牛该互,可吹牛的內(nèi)容都是我干的米者。 我是一名探鬼主播韭畸,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔓搞!你這毒婦竟也來(lái)了胰丁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喂分,失蹤者是張志新(化名)和其女友劉穎锦庸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒲祈,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甘萧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梆掸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扬卷。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酸钦,靈堂內(nèi)的尸體忽然破棺而出怪得,到底是詐尸還是另有隱情,我是刑警寧澤卑硫,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布徒恋,位于F島的核電站,受9級(jí)特大地震影響欢伏,放射性物質(zhì)發(fā)生泄漏入挣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一硝拧、第九天 我趴在偏房一處隱蔽的房頂上張望财岔。 院中可真熱鬧,春花似錦河爹、人聲如沸匠璧。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夷恍。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酿雪,已是汗流浹背遏暴。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留指黎,地道東北人朋凉。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像醋安,于是被迫代替她去往敵國(guó)和親杂彭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容