自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開(kāi)發(fā) 開(kāi)發(fā)工具 機(jī)器學(xué)習(xí)
這篇文章描述了使用多種采樣技術(shù)來(lái)解決這種類(lèi)別不平衡問(wèn)題的各種方法。本文還比較了每種技術(shù)的優(yōu)缺點(diǎn)。

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

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

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

[[185791]]

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

目錄

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

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

3. 例證

4. 結(jié)論

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

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

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

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

1. 不平衡類(lèi)別的實(shí)例

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

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

  • 總觀測(cè) = 1000
  • 欺詐觀測(cè) = 20
  • 非欺詐觀測(cè) = 980
  • 罕見(jiàn)事件比例 = 2%

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

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

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

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

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

模型的準(zhǔn)確率 = (TP+TN) / (TP+FN+FP+TP)

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

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

3. 不平衡類(lèi)別的實(shí)例

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

  • 識(shí)別客戶流失率的數(shù)據(jù)集,其中絕大多數(shù)顧客都會(huì)繼續(xù)使用該項(xiàng)服務(wù)。具體來(lái)說(shuō),電信公司中,客戶流失率低于 2%。
  • 醫(yī)療診斷中識(shí)別罕見(jiàn)疾病的數(shù)據(jù)集
  • 自然災(zāi)害,例如地震

4. 使用的數(shù)據(jù)集

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

  • 總觀測(cè) = 1000
  • 欺詐觀測(cè) = 20
  • 非欺詐性觀測(cè) = 980
  • 事件比例 = 2%
  • 欺詐類(lèi)別標(biāo)志 = 0(非欺詐實(shí)例)
  • 欺詐類(lèi)別標(biāo)志 = 1(欺詐實(shí)例)

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

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

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

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

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

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

  • 總觀測(cè) = 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í),可以通過(guò)減少樣本數(shù)量來(lái)解決存儲(chǔ)問(wèn)題。

缺點(diǎn)

  • 它會(huì)丟棄對(duì)構(gòu)建規(guī)則分類(lèi)器很重要的有價(jià)值的潛在信息。
  • 被隨機(jī)欠采樣選取的樣本可能具有偏差。它不能準(zhǔn)確代表大多數(shù)。從而在實(shí)際的測(cè)試數(shù)據(jù)集上得到不精確的結(jié)果。

(2)隨機(jī)過(guò)采樣(Random Over-Sampling)

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

  • 總觀測(cè) = 1000
  • 欺詐性觀察 = 20
  • 非欺詐性觀察 = 980
  • 事件發(fā)生率 = 2%

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

  • 非欺詐性觀察 = 980
  • 復(fù)制少數(shù)類(lèi)觀察之后的欺詐性觀察 = 400
  • 過(guò)采樣之后新數(shù)據(jù)集中的總體觀察 = 1380
  • 欠采樣之后新數(shù)據(jù)集的事件發(fā)生率 = 400/1380 = 29%

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

  • 與欠采樣不同,這種方法不會(huì)帶來(lái)信息損失。
  • 表現(xiàn)優(yōu)于欠采樣。

缺點(diǎn)

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

(3)基于聚類(lèi)的過(guò)采樣(Cluster-Based Over Sampling)

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

  • 總觀測(cè) = 1000
  • 欺詐性觀察 = 20
  • 非欺詐性觀察 = 980
  • 事件發(fā)生率 = 2%

多數(shù)類(lèi)聚類(lèi)

  • 1. 聚類(lèi) 1:150 個(gè)觀察
  • 2. 聚類(lèi) 2:120 個(gè)觀察
  • 3. 聚類(lèi) 3:230 個(gè)觀察
  • 4. 聚類(lèi) 4:200 個(gè)觀察
  • 5. 聚類(lèi) 5:150 個(gè)觀察
  • 6. 聚類(lèi) 6:130 個(gè)觀察

少數(shù)類(lèi)聚類(lèi)

  • 1. 聚類(lèi) 1:8 個(gè)觀察
  • 2. 聚類(lèi) 2:12 個(gè)觀察

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

多數(shù)類(lèi)聚類(lèi)

  • 1. 聚類(lèi) 1:170 個(gè)觀察
  • 2. 聚類(lèi) 2:170 個(gè)觀察
  • 3. 聚類(lèi) 3:170 個(gè)觀察
  • 4. 聚類(lèi) 4:170 個(gè)觀察
  • 5. 聚類(lèi) 5:170 個(gè)觀察
  • 6. 聚類(lèi) 6:170 個(gè)觀察

少數(shù)類(lèi)聚類(lèi)

  • 1. 聚類(lèi) 1:250 個(gè)觀察
  • 2. 聚類(lèi) 2:250 個(gè)觀察

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

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

  • 這種聚類(lèi)技術(shù)有助于克服類(lèi)之間不平衡的挑戰(zhàn)。表示正例的樣本數(shù)量不同于表示反例的樣本數(shù)量。
  • 有助于克服由不同子聚類(lèi)組成的類(lèi)之間的不平衡的挑戰(zhàn)。每一個(gè)子聚類(lèi)不包含相同數(shù)量的實(shí)例。

缺點(diǎn)

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

(4)信息性過(guò)采樣:合成少數(shù)類(lèi)過(guò)采樣技術(shù)(SMOTE)

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

  • 總觀測(cè) = 1000
  • 欺詐性觀察 = 20
  • 非欺詐性觀察 = 980
  • 事件發(fā)生率 = 2%

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

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

  • 少數(shù)類(lèi)(欺詐性觀察)= 300
  • 多數(shù)類(lèi)(非欺詐性觀察)= 980
  • 事件發(fā)生率 = 300/1280 = 23.4 %

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

  • 通過(guò)隨機(jī)采樣生成的合成樣本而非實(shí)例的副本,可以緩解過(guò)擬合的問(wèn)題。
  • 不會(huì)損失有價(jià)值信息。

缺點(diǎn)

  • 當(dāng)生成合成性實(shí)例時(shí),SMOTE 并不會(huì)把來(lái)自其他類(lèi)的相鄰實(shí)例考慮進(jìn)來(lái)。這導(dǎo)致了類(lèi)重疊的增加,并會(huì)引入額外的噪音。
  • SMOTE 對(duì)高維數(shù)據(jù)不是很有效。

合成少數(shù)類(lèi)過(guò)采樣算法,其中 N 是屬性的數(shù)量

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

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

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

(5)改進(jìn)的合成少數(shù)類(lèi)過(guò)采樣技術(shù)(MSMOTE)

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

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

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

2. 算法集成技術(shù)(Algorithmic Ensemble Techniques)

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

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

基于集成的方法

圖 3:基于集成的方法

(1)基于 Bagging 的方法

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

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

Bagging 方法

圖 4:Bagging 方法

  • 總觀測(cè)= 1000
  • 欺詐觀察= 20
  • 非欺詐觀察= 980
  • 事件率= 2%

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

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

  • 提高了機(jī)器學(xué)習(xí)算法的穩(wěn)定性與準(zhǔn)確性
  • 減少方差
  • 減少了 bagged 分類(lèi)器的錯(cuò)誤分類(lèi)
  • 在嘈雜的數(shù)據(jù)環(huán)境中,bagging 的性能優(yōu)于 boosting

缺點(diǎn)

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

(2)基于 Boosting 的方法

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

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

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

Boosting 方法

圖 5:Boosting 方法

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

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

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

  • 規(guī)則簡(jiǎn)單
  • 分類(lèi)器在足夠數(shù)量的訓(xùn)練實(shí)例上進(jìn)行了訓(xùn)練
  • 分類(lèi)器在訓(xùn)練實(shí)例上的訓(xùn)練誤差足夠低

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

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

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

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

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

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

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

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

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

可以很好地泛化——適合任何類(lèi)型的分類(lèi)問(wèn)題且不易過(guò)擬合

缺點(diǎn)

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

b. 梯度樹(shù) boosting

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

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

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

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

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

梯度 Boosting 方法

圖 7:梯度 Boosting 方法

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

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

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

缺點(diǎn)

  • 梯度增強(qiáng)過(guò)的樹(shù)比隨機(jī)森林更難擬合
  • 梯度 Boosting 算法通常有 3 個(gè)可以微調(diào)的參數(shù):收縮(shrinkage)參數(shù)、樹(shù)的深度和樹(shù)的數(shù)量。要很好擬合,每個(gè)參數(shù)都需要合適的訓(xùn)練。如果這些參數(shù)沒(méi)有得到很好的調(diào)節(jié),那么就可能會(huì)導(dǎo)致過(guò)擬合。

c. XGBoost

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

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

  • 速度比普通的 Gradient Boosting 快 10 倍,因?yàn)槠淇梢詫?shí)現(xiàn)并行處理。它是高度靈活的,因?yàn)橛脩艨梢宰远x優(yōu)化目標(biāo)和評(píng)估標(biāo)準(zhǔn),其具有內(nèi)置的處理缺失值的機(jī)制。
  • 和遇到了負(fù)損失就會(huì)停止分裂節(jié)點(diǎn)的 Gradient Boosting 不同,XGBoost 會(huì)分裂到指定的最大深度,然后會(huì)對(duì)其樹(shù)進(jìn)行反向的剪枝(prune),移除僅有一個(gè)負(fù)損失的分裂。

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

三、實(shí)際案例

1. 數(shù)據(jù)描述

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

電信公司的包含了 47241 條顧客記錄的數(shù)據(jù)集

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

罕見(jiàn)事件數(shù)據(jù)集的數(shù)據(jù)結(jié)構(gòu)

從這里下載數(shù)據(jù)集:

https://static.analyticsvidhya.com/wp-content/uploads/2017/03/17063705/SampleData_IMC.csv

2. 方法描述

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

  1. R 代碼 
  2. # 加載數(shù)據(jù) 
  3. rareevent_boost <- read.table("D:/Upasana/RareEvent/churn.txt",sep="|"header=TRUE
  4. dmy<-dummyVars("~.",data=rareevent_boost
  5. rareeventTrsf<-data.frame(predict(dmy,newdatarareevent_boost)) 
  6. set.seed(10) 
  7. sub <- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.9)) 
  8. sub1 <- sample(nrow(rareeventTrsf), floor(nrow(rareeventTrsf) * 0.1)) 
  9. training <- rareeventTrsf [sub, ] 
  10. testing <- rareeventTrsf [-sub, ] 
  11. training_sub<- rareeventTrsf [sub1, ] 
  12. tables(training_sub) 
  13. head(training_sub) 
  14. # 對(duì)于不平衡的數(shù)據(jù)集 # 
  15. install.packages("unbalanced") 
  16. library(unbalanced) 
  17. data(ubIonosphere) 
  18. n<-ncol(rareevent_boost) 
  19. output<- rareevent_boost $CHURN_FLAG 
  20. output<-as.factor(output) 
  21. input<- rareevent_boost [ ,-n] 
  22. View(input) 
  23. # 使用 ubSMOTE 來(lái)平衡數(shù)據(jù)集 # 
  24. data<-ubBalance(XinputY=outputtype="ubSMOTE"percOver=300percUnder=150verbose=TRUE 
  25. View(data) 
  26. # 平衡的數(shù)據(jù)集 # 
  27. balancedData<-cbind(data$X,data$Y) 
  28. View(balancedData) 
  29. table(balancedData$CHURN_FLAG) 
  30. # 寫(xiě)入平衡的數(shù)據(jù)集來(lái)訓(xùn)練模型 # 
  31. write.table(balancedData,"D:/ Upasana/RareEvent /balancedData.txt", sep="\t"row.names=FALSE
  32. # 創(chuàng)建 Boosting 樹(shù)模型 # 
  33. repalceNAsWithMean <- function(x) {replace(x, is.na(x), mean(x[!is.na(x)]))} 
  34. training <- repalceNAsWithMean(training) 
  35. testing <- repalceNAsWithMean(testing) 
  36. # 重采樣技術(shù) # 
  37. View(train_set) 
  38. fitcontrol<-trainControl(method="repeatedcv",number=10,repeats=1,verbose=FALSE
  39. gbmfit<-train(CHURN_FLAG~.,data=balancedData,method="gbm",verbose=FALSE
  40. # 為測(cè)試數(shù)據(jù)評(píng)分 # 
  41. testing$score_Y=predict(gbmfit,newdata=testing,type="prob")[,2] 
  42. testing$score_Y=ifelse(testing$score_Y>0.5,1,0) 
  43. head(testing,n=10
  44. write.table(testing,"D:/ Upasana/RareEvent /testing.txt", sep="\t"row.names=FALSE
  45. pred_GBM<-prediction(testing$score_Y,testing$CHURN_FLAG) 
  46. # 模型的表現(xiàn) # 
  47. model_perf_GBM <- performance(pred_GBM, "tpr", "fpr") 
  48. model_perf_GBM1 <- performance(pred_GBM, "tpr", "fpr") 
  49. model_perf_GBM 
  50. pred_GBM1<-as.data.frame(model_perf_GBM) 
  51. auc.tmp_GBM <- performance(pred_GBM,"auc") 
  52. AUC_GBM <- as.numeric(auc.tmp_GBM@y.values) 
  53. auc.tmp_GBM 

結(jié)果

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

四、結(jié)論

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

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

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

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

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

本文作者為來(lái)自 KPMG 的數(shù)據(jù)分析顧問(wèn) Upasana Mukherjee。

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

【本文是51CTO專(zhuān)欄機(jī)構(gòu)機(jī)器之心的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2019-02-25 08:35:22

機(jī)器學(xué)習(xí)數(shù)據(jù)模型

2019-03-27 08:51:38

機(jī)器學(xué)習(xí)類(lèi)失衡算法

2017-03-28 09:40:23

機(jī)器學(xué)習(xí)數(shù)據(jù)不平衡

2017-06-16 22:14:45

機(jī)器學(xué)習(xí)數(shù)據(jù)不平衡

2023-12-26 15:32:25

不平衡數(shù)據(jù)過(guò)采樣機(jī)器學(xué)習(xí)

2024-10-18 07:10:43

2020-10-06 10:44:16

機(jī)器學(xué)習(xí)不平衡數(shù)據(jù)算法

2018-09-11 13:47:35

數(shù)據(jù)不平衡數(shù)據(jù)分布數(shù)據(jù)集

2016-12-13 11:48:05

數(shù)據(jù)處理不平衡數(shù)據(jù)

2022-05-06 09:48:56

機(jī)器學(xué)習(xí)樣本不平衡

2025-01-20 09:00:00

2020-09-21 09:02:56

AI機(jī)器學(xué)習(xí)類(lèi)不平衡

2021-01-04 10:40:37

Python不平衡數(shù)據(jù)機(jī)器學(xué)習(xí)

2018-04-20 11:33:22

不平衡數(shù)據(jù)數(shù)據(jù)集模型

2023-09-29 22:51:22

數(shù)據(jù)不平衡Python機(jī)器學(xué)習(xí)

2016-09-07 13:26:25

R語(yǔ)言不平衡數(shù)據(jù)

2021-06-06 22:41:30

人才技術(shù)預(yù)測(cè)不平衡

2018-06-11 16:20:22

數(shù)據(jù)不平衡數(shù)據(jù)集算法

2013-04-23 11:17:47

Hadoop

2023-04-28 08:00:00

機(jī)器學(xué)習(xí)數(shù)據(jù)集
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)