溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用python提升數(shù)據(jù)不平衡模型的性能

發(fā)布時(shí)間:2021-12-01 09:38:16 來源:億速云 閱讀:205 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“怎么用python提升數(shù)據(jù)不平衡模型的性能”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用python提升數(shù)據(jù)不平衡模型的性能”吧!

數(shù)據(jù)集

訓(xùn)練數(shù)據(jù)中有三個(gè)標(biāo)簽,分別標(biāo)記為[1、2、3],這意味著該問題是一個(gè)多分類問題。訓(xùn)練數(shù)據(jù)集有17個(gè)特征以及38829個(gè)獨(dú)立數(shù)據(jù)點(diǎn)。而在測(cè)試數(shù)據(jù)中,有16個(gè)沒有標(biāo)簽的特征和16641個(gè)數(shù)據(jù)點(diǎn)。該訓(xùn)練數(shù)據(jù)集非常不平衡,大部分?jǐn)?shù)據(jù)是1類(95%),而2類和3類分別有3.0%和0.87%的數(shù)據(jù),如下圖所示。

怎么用python提升數(shù)據(jù)不平衡模型的性能

算法

經(jīng)過初步觀察,決定采用隨機(jī)森林(RF)算法,因?yàn)樗鼉?yōu)于支持向量機(jī)、Xgboost以及LightGBM算法。在這個(gè)項(xiàng)目中選擇RF還有幾個(gè)原因:

  1. 機(jī)森林對(duì)過擬合具有很強(qiáng)的魯棒性;

  2. 參數(shù)化仍然非常直觀;

  3. 在這個(gè)項(xiàng)目中,有許多成功的用例將隨機(jī)森林算法用于高度不平衡的數(shù)據(jù)集;

  4. 個(gè)人有先前的算法實(shí)施經(jīng)驗(yàn);

為了找到***參數(shù),使用scikit-sklearn實(shí)現(xiàn)的GridSearchCV對(duì)指定的參數(shù)值執(zhí)行網(wǎng)格搜索,更多細(xì)節(jié)可以在本人的Github上找到。

為了處理數(shù)據(jù)不平衡問題,使用了以下三種技術(shù):

A.使用集成交叉驗(yàn)證(CV):

在這個(gè)項(xiàng)目中,使用交叉驗(yàn)證來驗(yàn)證模型的魯棒性。整個(gè)數(shù)據(jù)集被分成五個(gè)子集。在每個(gè)交叉驗(yàn)證中,使用其中的四個(gè)子集用于訓(xùn)練,剩余的子集用于驗(yàn)證模型,此外模型還對(duì)測(cè)試數(shù)據(jù)進(jìn)行了預(yù)測(cè)。在交叉驗(yàn)證結(jié)束時(shí),會(huì)得到五個(gè)測(cè)試預(yù)測(cè)概率。***,對(duì)所有類別的概率取平均值。模型的訓(xùn)練表現(xiàn)穩(wěn)定,每個(gè)交叉驗(yàn)證上具有穩(wěn)定的召回率和f1分?jǐn)?shù)。這項(xiàng)技術(shù)也幫助我在Kaggle比賽中取得了很好的成績(jī)(前1%)。以下部分代碼片段顯示了集成交叉驗(yàn)證的實(shí)現(xiàn):

怎么用python提升數(shù)據(jù)不平衡模型的性能

B.設(shè)置類別權(quán)重/重要性:

代價(jià)敏感學(xué)習(xí)是使隨機(jī)森林更適合從非常不平衡的數(shù)據(jù)中學(xué)習(xí)的方法之一。隨機(jī)森林有傾向于偏向大多數(shù)類別。因此,對(duì)少數(shù)群體錯(cuò)誤分類施加昂貴的懲罰可能是有作用的。由于這種技術(shù)可以改善模型性能,所以我給少數(shù)群體分配了很高的權(quán)重(即更高的錯(cuò)誤分類成本)。然后將類別權(quán)重合并到隨機(jī)森林算法中。我根據(jù)類別1中數(shù)據(jù)集的數(shù)量與其它數(shù)據(jù)集的數(shù)量之間的比率來確定類別權(quán)重。例如,類別1和類別3數(shù)據(jù)集的數(shù)目之間的比率約為110,而類別1和類別2的比例約為26?,F(xiàn)在我稍微對(duì)數(shù)量進(jìn)行修改以改善模型的性能,以下代碼片段顯示了不同類權(quán)重的實(shí)現(xiàn):

怎么用python提升數(shù)據(jù)不平衡模型的性能

C.過大預(yù)測(cè)標(biāo)簽而不是過小預(yù)測(cè)(Over-Predict a Label than Under-Predict):

這項(xiàng)技術(shù)是可選的,通過實(shí)踐發(fā)現(xiàn),這種方法對(duì)提高少數(shù)類別的表現(xiàn)非常有效。簡(jiǎn)而言之,如果將模型錯(cuò)誤分類為類別3,則該技術(shù)能***限度地懲罰該模型,對(duì)于類別2和類別1懲罰力度稍差一些。  為了實(shí)施該方法,我改變了每個(gè)類別的概率閾值,將類別3、類別2和類別1的概率設(shè)置為遞增順序(即,P3= 0.25,P2= 0.35,P1=  0.50),以便模型被迫過度預(yù)測(cè)類別。該算法的詳細(xì)實(shí)現(xiàn)可以在Github上找到。

最終結(jié)果

以下結(jié)果表明,上述三種技術(shù)如何幫助改善模型性能:

1.使用集成交叉驗(yàn)證的結(jié)果:

怎么用python提升數(shù)據(jù)不平衡模型的性能

2.使用集成交叉驗(yàn)證+類別權(quán)重的結(jié)果:

怎么用python提升數(shù)據(jù)不平衡模型的性能

3.使用集成交叉驗(yàn)證+類別權(quán)重+過大預(yù)測(cè)標(biāo)簽的結(jié)果:

怎么用python提升數(shù)據(jù)不平衡模型的性能

感謝各位的閱讀,以上就是“怎么用python提升數(shù)據(jù)不平衡模型的性能”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么用python提升數(shù)據(jù)不平衡模型的性能這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI