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

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

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

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

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

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


不平衡程度相同(即正負(fù)樣本比例類似)的兩個(gè)問題,解決的難易程度也可能不同,因?yàn)閱栴}難易程度還取決于我們所擁有數(shù)據(jù)有多大。比如在預(yù)測微博互動(dòng)數(shù)的問題中,雖然數(shù)據(jù)不平衡,但每個(gè)檔位的數(shù)據(jù)量都很大——最少的類別也有幾萬個(gè)樣本,這樣的問題通常比較容易解決;而在癌癥診斷的場景中,因?yàn)榛及┌Y的人本來就很少,所以數(shù)據(jù)不但不平衡,樣本數(shù)還非常少,這樣的問題就非常棘手。綜上,可以把問題根據(jù)難度從小到大排個(gè)序:大數(shù)據(jù)+分布均衡<大數(shù)據(jù)+分布不均衡<小數(shù)據(jù)+數(shù)據(jù)均衡<小數(shù)據(jù)+數(shù)據(jù)不均衡。對于需要解決的問題,拿到數(shù)據(jù)后,首先統(tǒng)計(jì)可用訓(xùn)練數(shù)據(jù)有多大,然后再觀察數(shù)據(jù)分布情況。經(jīng)驗(yàn)表明,訓(xùn)練數(shù)據(jù)中每個(gè)類別有5000個(gè)以上樣本,數(shù)據(jù)量是足夠的,正負(fù)樣本差一個(gè)數(shù)量級以內(nèi)是可以接受的,不太需要考慮數(shù)據(jù)不平衡問題(完全是經(jīng)驗(yàn),沒有理論依據(jù),僅供參考)。

二、如何解決

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

1.?采樣

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

采樣分為上采樣(Oversampling)下采樣(Undersampling),上采樣是把小種類復(fù)制多份,下采樣是從大眾類中剔除一些樣本,或者說只從大眾類中選取部分樣本。

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

上采樣會(huì)把小眾樣本復(fù)制多份,一個(gè)點(diǎn)會(huì)在高維空間中反復(fù)出現(xiàn),這會(huì)導(dǎo)致一個(gè)問題,那就是運(yùn)氣好就能分對很多點(diǎn),否則分錯(cuò)很多點(diǎ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è)不同的分類器,通過組合多個(gè)分類器的結(jié)果得到最終的結(jié)果。第二種方法叫做BalanceCascade,利用增量訓(xùn)練的思想(Boosting):先通過一次下采樣產(chǎn)生訓(xùn)練集,訓(xùn)練一個(gè)分類器,對于那些分類正確的大眾樣本不放回,然后對這個(gè)更小的大眾樣本下采樣產(chǎn)生訓(xùn)練集,訓(xùn)練第二個(gè)分類器,以此類推,最終組合所有分類器的結(jié)果得到最終結(jié)果。第三種方法是利用KNN試圖挑選那些最具代表性的大眾樣本,叫做NearMiss,這類方法計(jì)算量很大,感興趣的可以參考“Learningfrom Imbalanced Data”這篇綜述的3.2.1節(jié)。

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

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

其中最常見的一種方法叫做SMOTE,它利用小眾樣本在特征空間的相似性來生成新樣本。對于小眾樣本?xi∈Smin?,從它屬于小眾類的K近鄰中隨機(jī)選取一個(gè)樣本點(diǎn)?x^i?,生成一個(gè)新的小眾樣本?xnew:?xnew=xi+(x^?xi)×δ?,其中?δ∈[0,1]?是隨機(jī)數(shù)。

上圖是SMOTE方法在?K=6?近鄰下的示意圖,黑色方格是生成的新樣本。

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

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

ADASYN的解決思路是根據(jù)數(shù)據(jù)分布情況為不同小眾樣本生成不同數(shù)量的新樣本。首先根據(jù)最終的平衡程度設(shè)定總共需要生成的新小眾樣本數(shù)量?G?,然后為每個(gè)小眾樣本?xi?計(jì)算分布比例?Γi?:?Γi=Δi/KZ?,其中?Γi?是?xi?K近鄰中大眾樣本的數(shù)量,?Z?用來歸一化使得?∑Γi=1?,最后為小眾樣本?xi?生成新樣本的個(gè)數(shù)為?gi=Γi×G?,確定個(gè)數(shù)后再利用SMOTE生成新樣本。

3.?加權(quán)

除了采樣和生成新數(shù)據(jù)等方法,我們還可以通過加權(quán)的方式來解決數(shù)據(jù)不平衡問題,即對不同類別分錯(cuò)的代價(jià)不同,如下圖:

kC(k,1)C(k,2)...0

12...k

10C(1,2)...C(1,k)

2C(2,1)0......

...............

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

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

4.?一分類

對于正負(fù)樣本極不平衡的場景,我們可以換一個(gè)完全不同的角度來看待問題:把它看做一分類(One ClassLearning)或異常檢測(Novelty Detection)問題。這類方法的重點(diǎn)不在于捕捉類間的差別,而是為其中一類進(jìn)行建模,經(jīng)典的工作包括One-class SVM等。

三、如何選擇

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

在正負(fù)樣本都非常之少的情況下,應(yīng)該采用數(shù)據(jù)合成的方式;在負(fù)樣本足夠多,正樣本非常之少且比例及其懸殊的情況下,應(yīng)該考慮一分類方法;在正負(fù)樣本都足夠多且比例不是特別懸殊的情況下,應(yīng)該考慮采樣或者加權(quán)的方法。

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

另外,雖然上采樣和下采樣都可以使數(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)生過擬合。對于下采樣,如果計(jì)算資源相對較多且有良好的并行環(huán)境,應(yīng)該選擇Ensemble方法。

四、更進(jìn)一步

更多細(xì)節(jié)與更多方法可以參考TKDE上的這篇綜述:“Learningfrom Imbalanced Data”

[1]https://blog.csdn.net/Losteng/article/details/50947161

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評論 2 380

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