非平衡數(shù)據(jù)集與準(zhǔn)確度悖論

分類問題是機(jī)器學(xué)習(xí)的研究重點(diǎn),而后者在實(shí)踐中常常碰到非均衡數(shù)據(jù)集這個(gè)難題壮虫。非均衡數(shù)據(jù)集(imbalanced data)又稱為非平衡數(shù)據(jù)集,指的是針對(duì)分類問題,數(shù)據(jù)集中各個(gè)類別所占比例并不平均妄均。

比如在網(wǎng)絡(luò)廣告行業(yè),需要對(duì)用戶是否點(diǎn)擊網(wǎng)頁上的廣告進(jìn)行建模哪自。為了處理方便丰包,我們記“點(diǎn)擊廣告”為類別1,“不點(diǎn)擊廣告”為類別0壤巷。因此這是一個(gè)二元分類問題邑彪。在訓(xùn)練模型的歷史數(shù)據(jù)里有1000個(gè)數(shù)據(jù)點(diǎn)(1000行),其中類別1的數(shù)據(jù)點(diǎn)只有10個(gè)胧华,剩下的990個(gè)數(shù)據(jù)全部為類別0寄症。這就是一個(gè)非均衡數(shù)據(jù)集,類別之間的比例為99:1矩动。與二元分類問題類似有巧,多元分類問題同樣會(huì)面對(duì)非均衡數(shù)據(jù)集這個(gè)難題。不過在這個(gè)問題上悲没,多元分類的處理的方案與二元的相似篮迎,因此為了表述簡潔利于理解,下面的討論將針對(duì)二元分類問題。

非均衡數(shù)據(jù)集在現(xiàn)實(shí)中是十分常見的甜橱。它給模型搭建帶來了困難逊笆,如果不小心處理,會(huì)導(dǎo)致得到的模型結(jié)果毫無意義岂傲。在討論這個(gè)話題之前难裆,讓我們稍稍離題一下,來看看所謂的準(zhǔn)確度悖論(accuracy paradox)譬胎。

注意:本篇文章的完整代碼在這里下載

一差牛、準(zhǔn)確度悖論

對(duì)于二元分類問題,模型的預(yù)測結(jié)果按準(zhǔn)確與否可以分為如下4類堰乔,見表1偏化。

表1

其中,TP和TN這兩個(gè)部分都表示模型的預(yù)測結(jié)果是正確的镐侯,這兩者之和的比例越高侦讨,說明模型的效果越好。由此可以定義評(píng)估模型效果的指標(biāo)——準(zhǔn)確度(accurary苟翻,ACC)韵卤。

ACC = \frac{TP + TN}{TP + FP + FN + TN} \tag{1}

準(zhǔn)確度這個(gè)指標(biāo)看似很合理,但面對(duì)非均衡數(shù)據(jù)集時(shí)崇猫,這個(gè)指標(biāo)會(huì)嚴(yán)重失真沈条,甚至變得毫無意義。來看下面這個(gè)例子:數(shù)據(jù)集里有1000個(gè)數(shù)據(jù)點(diǎn)诅炉,其中990個(gè)為類別0蜡歹,而剩下的10個(gè)為類別1,如圖1所示涕烧。

圖1

模型A對(duì)所有數(shù)據(jù)的預(yù)測都是類別0月而,因此這個(gè)模型其實(shí)并沒有提供什么預(yù)測功能。但它的準(zhǔn)確度卻高達(dá)99%议纯。模型B的預(yù)測效果其實(shí)很不錯(cuò):對(duì)于類別1父款,10個(gè)數(shù)據(jù)里有9個(gè)預(yù)測正確;而對(duì)于類別0瞻凤,990個(gè)數(shù)據(jù)里有900個(gè)預(yù)測正確憨攒,但它的準(zhǔn)確度只有90.9%遠(yuǎn)低于模型A。
這就是所謂的準(zhǔn)確度悖論:面對(duì)非均衡數(shù)據(jù)集時(shí)阀参,準(zhǔn)確度這個(gè)評(píng)估指標(biāo)會(huì)使模型嚴(yán)重偏向占比更多的類別浓恶,導(dǎo)致模型的預(yù)測功能失效。這也是之前文章(分類模型的評(píng)估(一))討論模型評(píng)估時(shí)结笨,我們并沒有介紹準(zhǔn)確度這個(gè)指標(biāo)的原因包晰。事實(shí)上湿镀,分類模型的評(píng)估(二)里討論的AUC(曲線下面積)在面對(duì)非均衡數(shù)據(jù)集時(shí),也能保持穩(wěn)定伐憾,不會(huì)發(fā)生如準(zhǔn)確度悖論這樣的失真勉痴。

二、一個(gè)例子

非均衡數(shù)據(jù)集除了會(huì)引起準(zhǔn)確度悖論外树肃,它對(duì)搭建模型有什么影響呢蒸矛?下面通過一個(gè)簡單的例子來說明這個(gè)問題。我們按公式(2)產(chǎn)生模型數(shù)據(jù)胸嘴,其中變量y為因變量雏掠;x_1, x_2為自變量;\varepsilon為隨機(jī)擾動(dòng)項(xiàng)劣像,它服從邏輯分布乡话。

y = \begin{cases}1, x_1 - x_2 + \varepsilon > 0 \\0, else \end{cases}\tag{2}

由此可見,產(chǎn)生的模型數(shù)據(jù)完美地符合邏輯回歸模型的假設(shè)耳奕。因此使用邏輯回歸對(duì)數(shù)據(jù)建模绑青,得到結(jié)果按理說應(yīng)該非常好。但事實(shí)上屋群,當(dāng)數(shù)據(jù)集是均衡時(shí)闸婴,也就是說類別1所占比例大約為0.5時(shí),模型效果是還不錯(cuò)芍躏。但當(dāng)類別1所占比例接近0時(shí)邪乍,也就是數(shù)據(jù)集是非均衡時(shí),模型的效果就很差了对竣。雖然數(shù)據(jù)集里類別1的個(gè)數(shù)不變庇楞,但模型的預(yù)測結(jié)果幾乎都是類別0,如圖2a所示柏肪。正如上面討論的那樣,ACC這個(gè)指標(biāo)在非均衡數(shù)據(jù)集里會(huì)失真芥牌,而AUC則可以保持穩(wěn)定烦味,能正確衡量模型的好壞,如圖2b所示壁拉。

圖2

上面的例子從直觀上展示了非均衡數(shù)據(jù)集對(duì)搭建模型的影響谬俄。那么造成這種結(jié)果的原因是什么呢?從數(shù)學(xué)角度來講弃理,邏輯回歸參數(shù)的估算公式如下:(懲罰項(xiàng)并不影響這里的討論溃论,因此我們?cè)诖耸÷缘魬土P項(xiàng)。)

h(X_i) = \frac{1}{1 + e^{-X_i\beta}}\\ \hat{\beta} = argmin_{\beta}\sum_i -y_i\ln h(X_i) - (1 - y_i)\ln [1 - h(X_i)] \tag{3}

在這個(gè)公式里痘昌,每個(gè)數(shù)據(jù)點(diǎn)的權(quán)重都是一樣的钥勋,都為1炬转。也就是說,模型對(duì)于類別1所承受的損失為:-y_i\ln h(X_i)算灸。這個(gè)值幾乎等于模型對(duì)于類別0所承受的損失:-(1 - y_i)\ln [1 - h(X_i)]扼劈。如果某一類別的數(shù)據(jù)特別多,不妨假定為類別0菲驴,那么在類別1某點(diǎn)的附件荐吵,極有可能存在大量的類別0。在這種情況下赊瞬,根據(jù)公式(3)先煎,模型會(huì)選擇“犧牲”類別1,從而導(dǎo)致預(yù)測結(jié)果幾乎都為類別0巧涧。

上面的結(jié)論并不只針對(duì)邏輯回歸這個(gè)分類模型薯蝎,對(duì)于其他分類模型,也同樣成立褒侧。

三良风、解決方法

針對(duì)非均衡數(shù)據(jù)集,最常見也是最方便的解決方案是修改損失函數(shù)里不同類別的權(quán)重闷供。以邏輯回歸為例烟央,將它的損失函數(shù)改寫為公式(4)。

\hat{\beta} = argmin_{\beta}\sum_i -w_1y_i\ln h(X_i) - w_0(1 - y_i)\ln [1 - h(X_i)] \tag{4}

當(dāng)類別1所占比例很少時(shí)歪脏,則增加w_1疑俭,也就是增加模型對(duì)于類別1所承受的損失,反之亦然婿失。在大多數(shù)情況下钞艇,類別權(quán)重的選擇原則是,類別權(quán)重等于類別所占比例的倒數(shù)豪硅,如程序清單1中第7哩照、8行代碼所示。經(jīng)過權(quán)重調(diào)整后懒浮,訓(xùn)練模型的數(shù)據(jù)集相當(dāng)于回到了均衡狀態(tài)飘弧。權(quán)重調(diào)整的代碼非常簡單,如第10行代碼所示砚著,通過“class_weight”參數(shù)調(diào)整各個(gè)類別的權(quán)重。事實(shí)上稽穆,“class_weight”也可以被賦值為“balanced”,即“class_weight= 'balanced'”柱彻,這時(shí)模型會(huì)自動(dòng)調(diào)整各個(gè)類別的權(quán)重豪娜。

程序清單1 非平衡數(shù)據(jù)集

 1  |  from sklearn.linear_model import LogisticRegression
 2  |  
 3  |  def balanceData(X, Y):
 4  |      """
 5  |      通過調(diào)整各個(gè)類別的比重,解決非均衡數(shù)據(jù)集的問題
 6  |      """
 7  |      positiveWeight = len(Y[Y>0]) / float(len(Y))
 8  |      classWeight = {1: 1. / positiveWeight, 0: 1. / (1 - positiveWeight)}
 9  |      # 為了消除懲罰項(xiàng)的干擾绒疗,將懲罰系數(shù)設(shè)為很大
10  |      model = LogisticRegression(class_weight=classWeight, C=1e4)
11  |      model.fit(X, Y.ravel())
12  |      pred = model.predict(X)
13  |      return pred

經(jīng)過權(quán)重調(diào)整后,模型的結(jié)果如圖3所示惕虑。在處理非均衡數(shù)據(jù)集時(shí),調(diào)整權(quán)重后的模型會(huì)錯(cuò)誤地將很多類別0的數(shù)據(jù)預(yù)測為類別1磨镶。這與我們之前在上一節(jié)里的分析是一致的:類別1的權(quán)重增加后溃蔫,模型會(huì)因“刻意地珍惜”類別1,而選擇“犧牲”類別0琳猫。盡管如此,調(diào)整之后的整體效果明顯優(yōu)于調(diào)整之前的(調(diào)整之后的AUC更大)统刮。值得注意的是,ACC和AUC這兩個(gè)評(píng)估指標(biāo)幾乎相等侥蒙,所以圖形上它們兩者重疊在了一起匀奏。

對(duì)于非均衡數(shù)據(jù)集,還有一些其他的解決方法娃善,比如通過重新抽樣(sampling),把多的類別變少或把少的類別變多坯台。具體的細(xì)節(jié)在此就不做展開討論了瘫寝。

圖3

四、廣告時(shí)間

這篇文章的大部分內(nèi)容參考自我的新書《精通數(shù)據(jù)科學(xué):從線性回歸到深度學(xué)習(xí)》滥搭。

李國杰院士和韓家煒教授在讀過此書后捣鲸,親自為其作序闽坡,歡迎大家購買愁溜。

另外外厂,與之相關(guān)的免費(fèi)視頻課程請(qǐng)關(guān)注這個(gè)鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汁蝶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掖棉,更是在濱河造成了極大的恐慌,老刑警劉巖耻讽,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帕棉,死亡現(xiàn)場離奇詭異,居然都是意外死亡慰枕,警方通過查閱死者的電腦和手機(jī)瞒窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匕坯,“玉大人拔稳,你說我怎么就攤上這事“捅龋” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵采记,是天一觀的道長唧龄。 經(jīng)常有香客問我奸远,道長讽挟,這世上最難降的妖魔是什么丸冕? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮眼姐,結(jié)果婚禮上佩番,老公的妹妹穿的比我還像新娘。我一直安慰自己答捕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布艘款。 她就那樣靜靜地躺著沃琅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晌柬。 梳的紋絲不亂的頭發(fā)上郭脂,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音屿衅,去河邊找鬼莹弊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛响迂,可吹牛的內(nèi)容都是我干的细疚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼幕与,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼镇防!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起来氧,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤啦扬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扑毡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勋又,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年楔壤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惯驼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隙畜,死狀恐怖说贝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狂丝,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布倍试,位于F島的核電站蛋哭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叛本,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一彤钟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧营搅,春花似錦梆砸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸡挠。三九已至搬男,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缔逛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工按脚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敦冬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓堪遂,卻偏偏與公主長得像萌庆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猿妈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 機(jī)器學(xué)習(xí)術(shù)語表 本術(shù)語表中列出了一般的機(jī)器學(xué)習(xí)術(shù)語和 TensorFlow 專用術(shù)語的定義。 A A/B 測試 (...
    yalesaleng閱讀 1,970評(píng)論 0 11
  • 谷歌開發(fā)者機(jī)器學(xué)習(xí)詞匯表:縱覽機(jī)器學(xué)習(xí)基本詞匯與概念 姓名:鐘航 轉(zhuǎn)載自:http://mp.weixin.qq....
    XavierZHH閱讀 1,951評(píng)論 0 7
  • 鳴蟲疏星伴吾行 應(yīng)是微茫草露興 鬼丘處處蘊(yùn)霜跡 隆起雙宿誘孤嶺 昆南于戊戌巧月十一
    昆南閱讀 349評(píng)論 2 4
  • 第一次在簡書寫東西,有點(diǎn)奇怪的感覺俯抖,只是想簡單記錄點(diǎn)東西,不論矯情蚌成。最近發(fā)現(xiàn)聽著梁靜茹的幾首歌曲凛捏,會(huì)讓自己感性起來...
    菸草閱讀 202評(píng)論 0 0