日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12

發(fā)布時(shí)間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從重采樣到數(shù)據(jù)合成:如何處理機(jī)器學(xué)習(xí)中的不平衡分類問題?

轉(zhuǎn)載 2017年08月01日 17:09:03
  • 719

轉(zhuǎn)自:http://www.sohu.com/a/129333346_465975

選自Analytics Vidhya

作者:Upasana Mukherjee

機(jī)器之心編譯

參與:馬亞雄、微胖、黃小天、吳攀

如果你研究過一點(diǎn)機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué),你肯定遇到過不平衡的類分布(imbalanced class distribution)。這種情況是指:屬于某一類別的觀測樣本的數(shù)量顯著少于其它類別。

這個(gè)問題在異常檢測是至關(guān)重要的的場景中很明顯,例如電力盜竊、銀行的欺詐交易、罕見疾病識別等。在這種情況下,利用傳統(tǒng)機(jī)器學(xué)習(xí)算法開發(fā)出的預(yù)測模型可能會存在偏差和不準(zhǔn)確。

發(fā)生這種情況的原因是機(jī)器學(xué)習(xí)算法通常被設(shè)計(jì)成通過減少誤差來提高準(zhǔn)確率。所以它們并沒有考慮類別的分布/比例或者是類別的平衡。

這篇指南描述了使用多種采樣技術(shù)來解決這種類別不平衡問題的各種方法。本文還比較了每種技術(shù)的優(yōu)缺點(diǎn)。最后,本文作者還向我們展示了一種讓你可以創(chuàng)建一個(gè)平衡的類分布的方法,讓你可以應(yīng)用專門為此設(shè)計(jì)的集成學(xué)習(xí)技術(shù)(ensemble learning technique)。本文作者為來自 KPMG 的數(shù)據(jù)分析顧問 Upasana Mukherjee。

目錄

1. 不平衡數(shù)據(jù)集面臨的挑戰(zhàn)

2. 處理不平衡數(shù)據(jù)集的方法

3. 例證

4. 結(jié)論

1. 不平衡數(shù)據(jù)集面臨的挑戰(zhàn)

當(dāng)今公用事業(yè)行業(yè)面臨的主要挑戰(zhàn)之一就是電力盜竊。電力盜竊是全球第三大盜竊形式。越來越多的公用事業(yè)公司傾向于使用高級的數(shù)據(jù)分析技術(shù)和機(jī)器學(xué)習(xí)算法來識別代表盜竊的消耗模式。

然而,最大的障礙之一就是海量的數(shù)據(jù)及其分布。欺詐性交易的數(shù)量要遠(yuǎn)低于正常和健康的交易,也就是說,它只占到了總觀測量的大約 1-2%。這里的問題是提高識別罕見的少數(shù)類別的準(zhǔn)確率,而不是實(shí)現(xiàn)更高的總體準(zhǔn)確率。

當(dāng)面臨不平衡的數(shù)據(jù)集的時(shí)候,機(jī)器學(xué)習(xí)算法傾向于產(chǎn)生不太令人滿意的分類器。對于任何一個(gè)不平衡的數(shù)據(jù)集,如果要預(yù)測的事件屬于少數(shù)類別,并且事件比例小于 5%,那就通常將其稱為罕見事件(rare event)。

  • 不平衡類別的實(shí)例

讓我們借助一個(gè)實(shí)例來理解不平衡類別。

例子:在一個(gè)公用事業(yè)欺詐檢測數(shù)據(jù)集中,你有以下數(shù)據(jù):

總觀測 = 1000

欺詐觀測 = 20

非欺詐觀測 = 980

罕見事件比例 = 2%

這個(gè)案例的數(shù)據(jù)分析中面臨的主要問題是:對于這些先天就是小概率的異常事件,如何通過獲取合適數(shù)量的樣本來得到一個(gè)平衡的數(shù)據(jù)集?

  • 使用標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)技術(shù)時(shí)面臨的挑戰(zhàn)

面臨不平衡數(shù)據(jù)集的時(shí)候,傳統(tǒng)的機(jī)器學(xué)習(xí)模型的評價(jià)方法不能精確地衡量模型的性能。

諸如決策樹和 Logistic 回歸這些標(biāo)準(zhǔn)的分類算法會偏向于數(shù)量多的類別。它們往往會僅預(yù)測占數(shù)據(jù)大多數(shù)的類別。在總量中占少數(shù)的類別的特征就會被視為噪聲,并且通常會被忽略。因此,與多數(shù)類別相比,少數(shù)類別存在比較高的誤判率。

對分類算法的表現(xiàn)的評估是用一個(gè)包含關(guān)于實(shí)際類別和預(yù)測類別信息的混淆矩陣(Confusion Matrix)來衡量的。

如上表所示,模型的準(zhǔn)確率 = (TP+TN) / (TP+FN+FP+TP)

然而,在不平衡領(lǐng)域時(shí),準(zhǔn)確率并不是一個(gè)用來衡量模型性能的合適指標(biāo)。例如:一個(gè)分類器,在包含 2% 的罕見事件時(shí),如果它將所有屬于大部分類別的實(shí)例都正確分類,實(shí)現(xiàn)了 98% 的準(zhǔn)確率;而把占 2% 的少數(shù)觀測數(shù)據(jù)視為噪聲并消除了。

  • 不平衡類別的實(shí)例

因此,總結(jié)一下,在嘗試?yán)貌黄胶鈹?shù)據(jù)集解決特定業(yè)務(wù)的挑戰(zhàn)時(shí),由標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)算法生成的分類器可能無法給出準(zhǔn)確的結(jié)果。除了欺詐性交易,存在不平衡數(shù)據(jù)集問題的常見業(yè)務(wù)問題還有:

  • 識別客戶流失率的數(shù)據(jù)集,其中絕大多數(shù)顧客都會繼續(xù)使用該項(xiàng)服務(wù)。具體來說,電信公司中,客戶流失率低于 2%。

  • 醫(yī)療診斷中識別罕見疾病的數(shù)據(jù)集

  • 自然災(zāi)害,例如地震

  • 使用的數(shù)據(jù)集

這篇文章中,我們會展示多種在高度不平衡數(shù)據(jù)集上訓(xùn)練一個(gè)性能良好的模型的技術(shù)。并且用下面的欺詐檢測數(shù)據(jù)集來精確地預(yù)測罕見事件:

總觀測 = 1000

欺詐觀測 = 20

非欺詐性觀測 = 980

事件比例 = 2%

欺詐類別標(biāo)志 = 0(非欺詐實(shí)例)

欺詐類別標(biāo)志 = 1(欺詐實(shí)例)

2. 處理不平衡數(shù)據(jù)集的方法

  • 2.1 數(shù)據(jù)層面的方法:重采樣技術(shù)

處理不平衡數(shù)據(jù)集需要在往機(jī)器學(xué)習(xí)算法輸入數(shù)據(jù)之前,制定諸如提升分類算法或平衡訓(xùn)練數(shù)據(jù)的類(數(shù)據(jù)預(yù)處理)的策略。后者因?yàn)閼?yīng)用范圍廣泛而更常使用。

平衡分類的主要目標(biāo)不是增加少數(shù)類的的頻率就是降低多數(shù)類的頻率。這樣做是為了獲得大概相同數(shù)量的兩個(gè)類的實(shí)例。讓我們一起看看幾個(gè)重采樣(resampling)技術(shù):

2.1.1 隨機(jī)欠采樣(Random Under-Sampling)

隨機(jī)欠采樣的目標(biāo)是通過隨機(jī)地消除占多數(shù)的類的樣本來平衡類分布;直到多數(shù)類和少數(shù)類的實(shí)例實(shí)現(xiàn)平衡,目標(biāo)才算達(dá)成。

總觀測= 1000

欺詐性觀察 = 20

非欺詐性觀察 = 980

事件發(fā)生率 = 2%

這種情況下我們不重復(fù)地從非欺詐實(shí)例中取 10% 的樣本,并將其與欺詐性實(shí)例相結(jié)合。

隨機(jī)欠采樣之后的非欺詐性觀察 = 980 x 10% = 98

結(jié)合欺詐性與非欺詐性觀察之后的全體觀察 = 20+98 = 118

欠采樣之后新數(shù)據(jù)集的事件發(fā)生率 = 20/118 = 17%

  • 優(yōu)點(diǎn)

  • 它可以提升運(yùn)行時(shí)間;并且當(dāng)訓(xùn)練數(shù)據(jù)集很大時(shí),可以通過減少樣本數(shù)量來解決存儲問題。

  • 缺點(diǎn)

  • 它會丟棄對構(gòu)建規(guī)則分類器很重要的有價(jià)值的潛在信息。

  • 被隨機(jī)欠采樣選取的樣本可能具有偏差。它不能準(zhǔn)確代表大多數(shù)。從而在實(shí)際的測試數(shù)據(jù)集上得到不精確的結(jié)果。

2.1.2 隨機(jī)過采樣(Random Over-Sampling)

過采樣(Over-Sampling)通過隨機(jī)復(fù)制少數(shù)類來增加其中的實(shí)例數(shù)量,從而可增加樣本中少數(shù)類的代表性。

總觀測= 1000

欺詐性觀察 = 20

非欺詐性觀察 = 980

事件發(fā)生率 = 2%

這種情況下我們復(fù)制 20 個(gè)欺詐性觀察 20 次。

非欺詐性觀察 = 980

復(fù)制少數(shù)類觀察之后的欺詐性觀察 = 400

過采樣之后新數(shù)據(jù)集中的總體觀察 = 1380

欠采樣之后新數(shù)據(jù)集的事件發(fā)生率 = 400/1380 = 29%

  • 優(yōu)點(diǎn)

  • 與欠采樣不同,這種方法不會帶來信息損失。

  • 表現(xiàn)優(yōu)于欠采樣。

  • 缺點(diǎn)

  • 由于復(fù)制少數(shù)類事件,它加大了過擬合的可能性。

2.1.3 基于聚類的過采樣(Cluster-Based Over Sampling)

在這種情況下,K-均值聚類算法獨(dú)立地被用于少數(shù)和多數(shù)類實(shí)例。這是為了識別數(shù)據(jù)集中的聚類。隨后,每一個(gè)聚類都被過采樣以至于相同類的所有聚類有著同樣的實(shí)例數(shù)量,且所有的類有著相同的大小。

總觀測= 1000

欺詐性觀察 = 20

非欺詐性觀察 = 980

事件發(fā)生率 = 2%

  • 多數(shù)類聚類

1. 聚類 1:150 個(gè)觀察

2. 聚類 2:120 個(gè)觀察

3. 聚類 3:230 個(gè)觀察

4. 聚類 4:200 個(gè)觀察

5. 聚類 5:150 個(gè)觀察

6. 聚類 6:130 個(gè)觀察

  • 少數(shù)類聚類

1. 聚類 1:8 個(gè)觀察

2. 聚類 2:12 個(gè)觀察

每個(gè)聚類過采樣之后,相同類的所有聚類包含相同數(shù)量的觀察。

  • 多數(shù)類聚類

1. 聚類 1:170 個(gè)觀察

2. 聚類 2:170 個(gè)觀察

3. 聚類 3:170 個(gè)觀察

4. 聚類 4:170 個(gè)觀察

5. 聚類 5:170 個(gè)觀察

6. 聚類 6:170 個(gè)觀察

  • 少數(shù)類聚類

1. 聚類 1:250 個(gè)觀察

2. 聚類 2:250 個(gè)觀察

基于聚類的過采樣之后的事件率 = 500/ (1020+500) = 33 %

  • 優(yōu)點(diǎn)

  • 這種聚類技術(shù)有助于克服類之間不平衡的挑戰(zhàn)。表示正例的樣本數(shù)量不同于表示反例的樣本數(shù)量。

  • 有助于克服由不同子聚類組成的類之間的不平衡的挑戰(zhàn)。每一個(gè)子聚類不包含相同數(shù)量的實(shí)例。

  • 缺點(diǎn)

  • 正如大多數(shù)過采樣技術(shù),這一算法的主要缺點(diǎn)是有可能過擬合訓(xùn)練集。

2.1.4 信息性過采樣:合成少數(shù)類過采樣技術(shù)(SMOTE)

這一技術(shù)可用來避免過擬合——當(dāng)直接復(fù)制少數(shù)類實(shí)例并將其添加到主數(shù)據(jù)集時(shí)。從少數(shù)類中把一個(gè)數(shù)據(jù)子集作為一個(gè)實(shí)例取走,接著創(chuàng)建相似的新合成的實(shí)例。這些合成的實(shí)例接著被添加進(jìn)原來的數(shù)據(jù)集。新數(shù)據(jù)集被用作樣本以訓(xùn)練分類模型。

總觀測= 1000

欺詐性觀察 = 20

非欺詐性觀察 = 980

事件發(fā)生率 = 2%

從少數(shù)類中取走一個(gè)包含 15 個(gè)實(shí)例的樣本,并生成相似的合成實(shí)例 20 次。

生成合成性實(shí)例之后,創(chuàng)建下面的數(shù)據(jù)集

少數(shù)類(欺詐性觀察)= 300

多數(shù)類(非欺詐性觀察)= 980

事件發(fā)生率 = 300/1280 = 23.4 %

  • 優(yōu)點(diǎn)

  • 通過隨機(jī)采樣生成的合成樣本而非實(shí)例的副本,可以緩解過擬合的問題。

  • 不會損失有價(jià)值信息。

  • 缺點(diǎn)

  • 當(dāng)生成合成性實(shí)例時(shí),SMOTE 并不會把來自其他類的相鄰實(shí)例考慮進(jìn)來。這導(dǎo)致了類重疊的增加,并會引入額外的噪音。

  • SMOTE 對高維數(shù)據(jù)不是很有效。

圖 1:合成少數(shù)類過采樣算法,其中 N 是屬性的數(shù)量

圖 2:借助 SMOTE 的合成實(shí)例生成

2.15 改進(jìn)的合成少數(shù)類過采樣技術(shù)(MSMOTE)

這是 SMOTE 的改進(jìn)版本,SMOTE 沒有考慮數(shù)據(jù)集中少數(shù)類和潛在噪聲的基本分布。所以為了提高 SMOTE 的效果,MSMOTE 應(yīng)運(yùn)而生。

該算法將少數(shù)類別的樣本分為 3 個(gè)不同的組:安全樣本、邊界樣本和潛在噪聲樣本。分類通過計(jì)算少數(shù)類的樣本和訓(xùn)練數(shù)據(jù)的樣本之間的距離來完成。安全樣本是可以提高分類器性能的那些數(shù)據(jù)點(diǎn)。而另一方面,噪聲是可以降低分類器的性能的數(shù)據(jù)點(diǎn)。兩者之間的那些數(shù)據(jù)點(diǎn)被分類為邊界樣本。

雖然 MSOMTE 的基本流程與 SMOTE 的基本流程相同,在 MSMOTE 中,選擇近鄰的策略不同于 SMOTE。該算法是從安全樣本出發(fā)隨機(jī)選擇 k-最近鄰的數(shù)據(jù)點(diǎn),并從邊界樣本出發(fā)選擇最近鄰,并且不對潛在噪聲樣本進(jìn)行任何操作。

  • 2.2 算法集成技術(shù)(Algorithmic Ensemble Techniques)

上述部分涉及通過重采樣原始數(shù)據(jù)提供平衡類來處理不平衡數(shù)據(jù),在本節(jié)中,我們將研究一種替代方法:修改現(xiàn)有的分類算法,使其適用于不平衡數(shù)據(jù)集。

集成方法的主要目的是提高單個(gè)分類器的性能。該方法從原始數(shù)據(jù)中構(gòu)建幾個(gè)兩級分類器,然后整合它們的預(yù)測。

圖 3:基于集成的方法

2.2.1 基于 Bagging 的方法

Bagging 是 Bootstrap Aggregating 的縮寫。傳統(tǒng)的 Bagging 算法包括生成「n」個(gè)不同替換的引導(dǎo)訓(xùn)練樣本,并分別訓(xùn)練每個(gè)自舉算法上的算法,然后再聚合預(yù)測。

Bagging 常被用于減少過擬合,以提高學(xué)習(xí)效果生成準(zhǔn)確預(yù)測。與 boosting 不同,bagging 方法允許在自舉樣本中進(jìn)行替換。

圖 4:Bagging 方法

總觀測= 1000

欺詐觀察= 20

非欺詐觀察= 980

事件率= 2%

從具有替換的群體中選擇 10 個(gè)自舉樣品。每個(gè)樣本包含 200 個(gè)觀察值。每個(gè)樣本都不同于原始數(shù)據(jù)集,但類似于分布和變化上與該數(shù)據(jù)集類似。機(jī)器學(xué)習(xí)算法(如 logistic 回歸、神經(jīng)網(wǎng)絡(luò)與決策樹)擬合包含 200 個(gè)觀察的自舉樣本,且分類器 c1,c2 ... c10 被聚合以產(chǎn)生復(fù)合分類器。這種集成方法能產(chǎn)生更強(qiáng)的復(fù)合分類器,因?yàn)樗M合了各個(gè)分類器的結(jié)果。

  • 優(yōu)點(diǎn)

  • 提高了機(jī)器學(xué)習(xí)算法的穩(wěn)定性與準(zhǔn)確性

  • 減少方差

  • 減少了 bagged 分類器的錯(cuò)誤分類

  • 在嘈雜的數(shù)據(jù)環(huán)境中,bagging 的性能優(yōu)于 boosting

  • 缺點(diǎn)

  • bagging 只會在基本分類器效果很好時(shí)才有效。錯(cuò)誤的分類可能會進(jìn)一步降低表現(xiàn)。

2.2.2. 基于 Boosting 的方法

Boosting 是一種集成技術(shù),它可以將弱學(xué)習(xí)器結(jié)合起來創(chuàng)造出一個(gè)能夠進(jìn)行準(zhǔn)確預(yù)測的強(qiáng)大學(xué)習(xí)器。Boosting 開始于在訓(xùn)練數(shù)據(jù)上準(zhǔn)備的基本分類器/弱分類器。

基本學(xué)習(xí)器/分類器是弱學(xué)習(xí)器,即預(yù)測準(zhǔn)確度僅略好于平均水平。弱是指當(dāng)數(shù)據(jù)的存在小變化時(shí),會引起分類模型出現(xiàn)大的變化。

在下一次迭代中,新分類器將重點(diǎn)放在那些在上一輪中被錯(cuò)誤分類的案例上。

圖 5:Boosting 方法

2.2.2.1 自適應(yīng) boosting——Ada Boost

Ada Boost 是最早的 boosting 技術(shù),其能通過許多弱的和不準(zhǔn)確的規(guī)則的結(jié)合來創(chuàng)造高準(zhǔn)確度的預(yù)測。其中每個(gè)訓(xùn)練器都是被串行地訓(xùn)練的,其目標(biāo)在每一輪正確分類上一輪沒能正確分類的實(shí)例。

對于一個(gè)學(xué)習(xí)過的分類器,如果要做出強(qiáng)大的預(yù)測,其應(yīng)該具備以下三個(gè)條件:

  • 規(guī)則簡單

  • 分類器在足夠數(shù)量的訓(xùn)練實(shí)例上進(jìn)行了訓(xùn)練

  • 分類器在訓(xùn)練實(shí)例上的訓(xùn)練誤差足夠低

每一個(gè)弱假設(shè)都有略優(yōu)于隨機(jī)猜測的準(zhǔn)確度,即誤差項(xiàng) € (t) 應(yīng)該略大約 ½-β,其中 β>0。這是這種 boosting 算法的基礎(chǔ)假設(shè),其可以產(chǎn)生一個(gè)僅有一個(gè)很小的誤差的最終假設(shè)。

在每一輪之后,它會更加關(guān)注那些更難被分類的實(shí)例。這種關(guān)注的程度可以通過一個(gè)權(quán)重值(weight)來測量。起初,所有實(shí)例的權(quán)重都是相等的,經(jīng)過每一次迭代之后,被錯(cuò)誤分類的實(shí)例的權(quán)重會增大,而被正確分類的實(shí)例的權(quán)重則會減小。

圖 6:自適應(yīng) boosting 的方法

比如如果有一個(gè)包含了 1000 次觀察的數(shù)據(jù)集,其中有 20 次被標(biāo)記為了欺詐。剛開始,所有的觀察都被分配了相同的權(quán)重 W1,基礎(chǔ)分類器準(zhǔn)確分類了其中 400 次觀察。

然后,那 600 次被錯(cuò)誤分類的觀察的權(quán)重增大為 W2,而這 400 次被正確分類的實(shí)例的權(quán)重減小為 W3。

在每一次迭代中,這些更新過的加權(quán)觀察都會被送入弱的分類器以提升其表現(xiàn)。這個(gè)過程會一直持續(xù),直到錯(cuò)誤分類率顯著降低,從而得到一個(gè)強(qiáng)大的分類器。

  • 優(yōu)點(diǎn)

  • 非常簡單就能實(shí)現(xiàn)

  • 可以很好地泛化——適合任何類型的分類問題且不易過擬合

  • 缺點(diǎn)

  • 對噪聲數(shù)據(jù)和異常值敏感

2.2.2.2 梯度樹 boosting

在梯度 Boosting(Gradient Boosting)中,許多模型都是按順序訓(xùn)練的。其是一種數(shù)值優(yōu)化算法,其中每個(gè)模型都使用梯度下降(Gradient Descent)方法來最小化損失函數(shù) y = ax+b+e。

在梯度 Boosting 中,決策樹(Decision Tree)被用作弱學(xué)習(xí)器。

盡管 Ada Boost 和梯度 Boosting 都是基于弱學(xué)習(xí)器/分類器工作的,而且都是在努力使它們變成強(qiáng)大的學(xué)習(xí)器,但這兩種方法之間存在一些顯著的差異。Ada Boost 需要在實(shí)際的訓(xùn)練過程之前由用戶指定一組弱學(xué)習(xí)器或隨機(jī)生成弱學(xué)習(xí)器。其中每個(gè)學(xué)習(xí)器的權(quán)重根據(jù)其每步是否正確執(zhí)行了分類而進(jìn)行調(diào)整。而梯度 Boosting 則是在訓(xùn)練數(shù)據(jù)集上構(gòu)建第一個(gè)用來預(yù)測樣本的學(xué)習(xí)器,然后計(jì)算損失(即真實(shí)值和第一個(gè)學(xué)習(xí)器的輸出之間的差),然后再使用這個(gè)損失在第二個(gè)階段構(gòu)建改進(jìn)了的學(xué)習(xí)器。

在每一個(gè)步驟,該損失函數(shù)的殘差(residual)都是用梯度下降法計(jì)算出來的,而新的殘差會在后續(xù)的迭代中變成目標(biāo)變量。

梯度 Boosting 可以通過 R 語言使用 SAS Miner 和 GBM 軟件包中的 Gradient Boosting Node 實(shí)現(xiàn)。

圖 7:梯度 Boosting 方法

比如,如果有一個(gè)包含了 1000 次觀察的訓(xùn)練數(shù)據(jù)集,其中有 20 次被標(biāo)記為了欺詐,并且還有一個(gè)初始的基礎(chǔ)分類器。目標(biāo)變量為 Fraud,當(dāng)交易是欺詐時(shí),Fraud=1;當(dāng)交易不是欺詐時(shí),Fraud=0.

比如說,決策樹擬合的是準(zhǔn)確分類僅 5 次觀察為欺詐觀察的情況。然后基于該步驟的實(shí)際輸出和預(yù)測輸出之間的差,計(jì)算出一個(gè)可微的損失函數(shù)。該損失函數(shù)的這個(gè)殘差是下一次迭代的目標(biāo)變量 F1。

類似地,該算法內(nèi)部計(jì)算該損失函數(shù),并在每個(gè)階段更新該目標(biāo),然后在初始分類器的基礎(chǔ)上提出一個(gè)改進(jìn)過的分類器。

  • 缺點(diǎn)

  • 梯度增強(qiáng)過的樹比隨機(jī)森林更難擬合

  • 梯度 Boosting 算法通常有 3 個(gè)可以微調(diào)的參數(shù):收縮(shrinkage)參數(shù)、樹的深度和樹的數(shù)量。要很好擬合,每個(gè)參數(shù)都需要合適的訓(xùn)練。如果這些參數(shù)沒有得到很好的調(diào)節(jié),那么就可能會導(dǎo)致過擬合。

2.2.2.3 XGBoost

XGBoost(Extreme Gradient Boosting/極限梯度提升)是 Gradient Boosting 算法的一種更先進(jìn)和更有效的實(shí)現(xiàn)。

相對于其它 Boosting 技術(shù)的優(yōu)點(diǎn):

  • 速度比普通的 Gradient Boosting 快 10 倍,因?yàn)槠淇梢詫?shí)現(xiàn)并行處理。它是高度靈活的,因?yàn)橛脩艨梢宰远x優(yōu)化目標(biāo)和評估標(biāo)準(zhǔn),其具有內(nèi)置的處理缺失值的機(jī)制。

  • 和遇到了負(fù)損失就會停止分裂節(jié)點(diǎn)的 Gradient Boosting 不同,XGBoost 會分裂到指定的最大深度,然后會對其樹進(jìn)行反向的剪枝(prune),移除僅有一個(gè)負(fù)損失的分裂。

XGBoost 可以使用 R 和 Python 中的 XGBoost 包實(shí)現(xiàn)。

3. 實(shí)際案例

  • 3.1 數(shù)據(jù)描述

這個(gè)例子使用了電信公司的包含了 47241 條顧客記錄的數(shù)據(jù)集,每條記錄包含的信息有 27 個(gè)關(guān)鍵預(yù)測變量

罕見事件數(shù)據(jù)集的數(shù)據(jù)結(jié)構(gòu)如下,缺失值刪除、異常值處理以及降維

從這里下載數(shù)據(jù)集:https://static.analyticsvidhya.com/wp-content/uploads/2017/03/17063705/SampleData_IMC.csv

  • 3.2 方法描述

使用合成少數(shù)類過采樣技術(shù)(SMOTE)來平衡不平衡數(shù)據(jù)集——該技術(shù)是試圖通過創(chuàng)建合成實(shí)例來平衡數(shù)據(jù)集。下面以 R 代碼為例,示范使用 Gradient Boosting 算法來訓(xùn)練平衡數(shù)據(jù)集。

R 代碼

# 加載數(shù)據(jù)

rareevent_boost <- read.table("D:/Upasana/RareEvent/churn.txt",sep="|", header=TRUE)dmy<-dummyVars("~.",data=rareevent_boost)rareeventTrsf<-data.frame(predict(dmy,newdata= rareevent_boost))set.seed(10)sub <- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.9))sub1 <- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.1))training <- rareeventTrsf [sub, ]testing <- rareeventTrsf [-sub, ]training_sub<- rareeventTrsf [sub1, ]tables(training_sub)head(training_sub)

# 對于不平衡的數(shù)據(jù)集 #

install.packages("unbalanced")library(unbalanced)data(ubIonosphere)n<-ncol(rareevent_boost)output<- rareevent_boost $CHURN_FLAGoutput<-as.factor(output)input<- rareevent_boost [ ,-n]View(input)

# 使用 ubSMOTE 來平衡數(shù)據(jù)集 #

data<-ubBalance(X= input, Y=output, type="ubSMOTE", percOver=300, percUnder=150, verbose=TRUEView(data)

# 平衡的數(shù)據(jù)集 #

balancedData<-cbind(data$X,data$Y)View(balancedData)table(balancedData$CHURN_FLAG)

# 寫入平衡的數(shù)據(jù)集來訓(xùn)練模型 #

write.table(balancedData,"D:/ Upasana/RareEvent /balancedData.txt", sep="t", row.names=FALSE)

# 創(chuàng)建 Boosting 樹模型 #

repalceNAsWithMean <- function(x) {replace(x, is.na(x), mean(x[!is.na(x)]))}training <- repalceNAsWithMean(training)testing <- repalceNAsWithMean(testing)

# 重采樣技術(shù) #

View(train_set)fitcontrol<-trainControl(method="repeatedcv",number=10,repeats=1,verbose=FALSE)gbmfit<-train(CHURN_FLAG~.,data=balancedData,method="gbm",verbose=FALSE)

# 為測試數(shù)據(jù)評分 #

testing$score_Y=predict(gbmfit,newdata=testing,type="prob")[,2]testing$score_Y=ifelse(testing$score_Y>0.5,1,0)head(testing,n=10)write.table(testing,"D:/ Upasana/RareEvent /testing.txt", sep="t", row.names=FALSE)pred_GBM<-prediction(testing$score_Y,testing$CHURN_FLAG)

# 模型的表現(xiàn) #

model_perf_GBM <- performance(pred_GBM, "tpr", "fpr")model_perf_GBM1 <- performance(pred_GBM, "tpr", "fpr")model_perf_GBMpred_GBM1<-as.data.frame(model_perf_GBM)auc.tmp_GBM <- performance(pred_GBM,"auc")AUC_GBM <- as.numeric(auc.tmp_GBM@y.values)auc.tmp_GBM

  • 結(jié)果

這個(gè)在平衡數(shù)據(jù)集上使用了 SMOTE 并訓(xùn)練了一個(gè) gradient boosting 算法的平衡數(shù)據(jù)集的辦法能夠顯著改善預(yù)測模型的準(zhǔn)確度。較之平常分析建模技術(shù)(比如 logistic 回歸和決策樹),這個(gè)辦法將其 lift 提升了 20%,精確率也提升了 3 到 4 倍。

4. 結(jié)論

遇到不平衡數(shù)據(jù)集時(shí),沒有改善預(yù)測模型準(zhǔn)確性的一站式解決方案。你可能需要嘗試多個(gè)辦法來搞清楚最適合數(shù)據(jù)集的采樣技術(shù)。在絕大多數(shù)情況下,諸如 SMOTE 以及 MSMOTE 之類的合成技術(shù)會比傳統(tǒng)過采樣或欠采樣的辦法要好。

為了獲得更好的結(jié)果,你可以在使用諸如 Gradeint boosting 和 XGBoost 的同時(shí)也使用 SMOTE 和 MSMOTE 等合成采樣技術(shù)。

通常用于解決不平衡數(shù)據(jù)集問題的先進(jìn) bagging 技術(shù)之一是 SMOTE bagging。這個(gè)辦法采取了一種完全不同于傳統(tǒng) bagging 技術(shù)的辦法來創(chuàng)造每個(gè) Bag/Bootstrap。通過每次迭代時(shí)設(shè)置一個(gè) SMOTE 重采樣率,它可以借由 SMOTE 算法生成正例。每次迭代時(shí),負(fù)例集會被 bootstrap。

不平衡數(shù)據(jù)集的特點(diǎn)不同,最有效的技術(shù)也會有所不同。對比模型時(shí)要考慮相關(guān)評估參數(shù)。

在對比通過全面地結(jié)合上述技術(shù)而構(gòu)建的多個(gè)預(yù)測模型時(shí),ROC 曲線下的 Lift & Area 將會在決定最優(yōu)模型上發(fā)揮作用。

參考文獻(xiàn)

1. Dmitry Pavlov, Alexey Gorodilov, Cliff Brunk「BagBoo: A Scalable Hybrid Bagging-theBoosting Model」.2010

2. Fithria Siti Hanifah , Hari Wijayanto , Anang Kurnia「SMOTE Bagging Algorithm for Imbalanced Data Set in Logistic Regression Analysis」. Applied Mathematical Sciences, Vol. 9, 2015

3. Lina Guzman, DIRECTV「Data sampling improvement by developing SMOTE technique in SAS」.Paper 3483-2015

4. Mikel Galar, Alberto Fern′andez, Edurne Barrenechea, Humberto Bustince and Francisco Herrera「A Review on Ensembles for the Class Imbalance Problem: Baggng-, Boosting-, and Hybrid-Based Approaches.2011 IEEE

原文地址:https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem

總結(jié)

以上是生活随笔為你收集整理的从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。