三招提升數(shù)據(jù)不平衡模型的性能(附python代碼)
2018-06-13 來源:

數(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)。而在測試數(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ù),如下圖所示。

算法
經(jīng)過初步觀察,決定采用隨機(jī)森林(RF)算法,因?yàn)樗鼉?yōu)于支持向量機(jī)、Xgboost以及LightGBM算法。在這個(gè)項(xiàng)目中選擇RF還有幾個(gè)原因:
1機(jī)森林對過擬合具有很強(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對指定的參數(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)證模型,此外模型還對測試數(shù)據(jù)進(jìn)行了預(yù)測。在交叉驗(yàn)證結(jié)束時(shí),會得到五個(gè)測試預(yù)測概率。最后,對所有類別的概率取平均值。模型的訓(xùn)練表現(xiàn)穩(wěn)定,每個(gè)交叉驗(yàn)證上具有穩(wěn)定的召回率和f1分?jǐn)?shù)。這項(xiàng)技術(shù)也幫助我在Kaggle比賽中取得了很好的成績(前1%)。以下部分代碼片段顯示了集成交叉驗(yàn)證的實(shí)現(xiàn):

B.設(shè)置類別權(quán)重/重要性:
代價(jià)敏感學(xué)習(xí)是使隨機(jī)森林更適合從非常不平衡的數(shù)據(jù)中學(xué)習(xí)的方法之一。隨機(jī)森林有傾向于偏向大多數(shù)類別。因此,對少數(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)在我稍微對數(shù)量進(jìn)行修改以改善模型的性能,以下代碼片段顯示了不同類權(quán)重的實(shí)現(xiàn):

C.過大預(yù)測標(biāo)簽而不是過小預(yù)測(Over-Predict a Label than Under-Predict):
這項(xiàng)技術(shù)是可選的,通過實(shí)踐發(fā)現(xiàn),這種方法對提高少數(shù)類別的表現(xiàn)非常有效。簡而言之,如果將模型錯(cuò)誤分類為類別3,則該技術(shù)能最大限度地懲罰該模型,對于類別2和類別1懲罰力度稍差一些。 為了實(shí)施該方法,我改變了每個(gè)類別的概率閾值,將類別3、類別2和類別1的概率設(shè)置為遞增順序(即,P3= 0.25,P2= 0.35,P1= 0.50),以便模型被迫過度預(yù)測類別。該算法的詳細(xì)實(shí)現(xiàn)可以在Github上找到。
最終結(jié)果
以下結(jié)果表明,上述三種技術(shù)如何幫助改善模型性能:
1.使用集成交叉驗(yàn)證的結(jié)果:

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

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

結(jié)論
由于在實(shí)施過大預(yù)測技術(shù)方面的經(jīng)驗(yàn)很少,因此最初的時(shí)候處理起來非常棘手。但是,研究該問題有助于提升我解決問題的能力。對于每個(gè)任務(wù)而言,起初可能確實(shí)是陌生的,這個(gè)時(shí)候不要害怕,一次次嘗試就好。由于時(shí)間的限制(48小時(shí)),無法將精力分散于模型的微調(diào)以及特征工程,存在改進(jìn)的地方還有很多,比如刪除不必要的功能并添加一些額外功能。此外,也嘗試過LightGBM和XgBoost算法,但在實(shí)踐過程中發(fā)現(xiàn),隨機(jī)森林的效果優(yōu)于這兩個(gè)算法。在后面的研究中,可以進(jìn)一步嘗試一些其他算法,比如神經(jīng)網(wǎng)絡(luò)、稀疏編碼等。
標(biāo)簽: 代碼 搜索 網(wǎng)絡(luò) 選擇
版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。