吳興惠 周玉萍 邢?;?/p>
摘要:集成學(xué)習(xí)是多分類器學(xué)習(xí)系統(tǒng)。而隨機(jī)森林是一個(gè)包含多個(gè)決策樹的分類器,是一種基于Bagging的集成學(xué)習(xí)方法。隨機(jī)森林具有預(yù)測準(zhǔn)確率、不容易出現(xiàn)過擬合的特點(diǎn),在很多領(lǐng)域都有所應(yīng)用。本文主要利用隨機(jī)森林算法對(duì)心臟病數(shù)據(jù)集建立了分類預(yù)測模型,實(shí)驗(yàn)結(jié)果表明,隨機(jī)森林算法在預(yù)測性能上超過了決策樹和邏輯回歸分類算法,并通過繪制ROC曲線對(duì)四種模型進(jìn)行了對(duì)比。
關(guān)鍵詞:集成學(xué)習(xí);隨機(jī)森林;預(yù)測
中圖分類號(hào):TP181 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)21-0026-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
數(shù)據(jù)挖掘的一個(gè)重要領(lǐng)域是數(shù)據(jù)分類,對(duì)數(shù)據(jù)進(jìn)行分類和預(yù)測是當(dāng)前比較熱門的研究。機(jī)器學(xué)習(xí)中的分類算法屬于有監(jiān)督學(xué)習(xí),常用的分類算法有決策樹、貝葉斯、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)、隨機(jī)森林等。集成學(xué)習(xí)是多分類器學(xué)習(xí)系統(tǒng)。而隨機(jī)森林是一個(gè)包含多個(gè)決策樹的分類器,是一種基于Bagging的集成學(xué)習(xí)方法。它包含多個(gè)決策樹,并且它的輸出類別由所有樹輸出的類別的眾數(shù)而定。由于它具有預(yù)測準(zhǔn)確率、不容易出現(xiàn)過擬合的特點(diǎn),在很多領(lǐng)域都有所應(yīng)用。隨機(jī)森林在醫(yī)學(xué)領(lǐng)域、經(jīng)濟(jì)學(xué)、刑偵領(lǐng)域和模式識(shí)別領(lǐng)域取得了較好的效果。本文基于一個(gè)心臟病數(shù)據(jù)集,利用隨機(jī)森林算法建立分類模型,并將建立的模型與決策樹和邏輯回歸模型進(jìn)行對(duì)比,并通過數(shù)據(jù)繪制了各自模型的ROC曲線。結(jié)果表明,在對(duì)數(shù)據(jù)分類效果上看,隨機(jī)森林在預(yù)測性能上的效果要比決策樹和邏輯回歸模型的效果要強(qiáng)些。
1 隨機(jī)森林算法
隨機(jī)森林[1]是一種組合方法,由許多的決策樹組成,對(duì)于每一顆決策樹,隨機(jī)森林采用的是有放回的對(duì)N個(gè)樣本分N次隨機(jī)取出N個(gè)樣本,即這些決策樹的形成采用了隨機(jī)的方法,因此也叫作隨機(jī)決策樹。隨機(jī)森林中的樹之間是沒有關(guān)聯(lián)的。當(dāng)測試數(shù)據(jù)進(jìn)入隨機(jī)森林時(shí),其實(shí)就是讓每一顆決策樹分別進(jìn)行分類,最后取所有決策樹中分類多的那類為最終的結(jié)果。隨機(jī)森林算法如圖1所示。
1.1集成學(xué)習(xí)
集成學(xué)習(xí)也稱為多分類器學(xué)習(xí)系統(tǒng),它是結(jié)合多個(gè)分類學(xué)習(xí)器來完成學(xué)習(xí)任務(wù)來構(gòu)建的。弱模型以得到一個(gè)預(yù)測效果好的強(qiáng)模型。對(duì)于分類問題就是指采用多個(gè)分類器對(duì)數(shù)據(jù)集進(jìn)行它的一般結(jié)構(gòu)是將多個(gè)個(gè)體學(xué)習(xí)器結(jié)合起來,共同發(fā)揮作用。個(gè)體學(xué)習(xí)器是通過現(xiàn)有的學(xué)習(xí)算法來訓(xùn)練數(shù)據(jù)產(chǎn)生。集成學(xué)習(xí)方法可分為二種,一是個(gè)體學(xué)習(xí)器間存在強(qiáng)依賴關(guān)系,如AdaBoost算法。而另一種是個(gè)體學(xué)習(xí)器之間不存在強(qiáng)依賴關(guān)系,可以同時(shí)生成個(gè)體學(xué)習(xí)器的并行方法,如隨機(jī)森林算法。
1.2 隨機(jī)森林算法原理
隨機(jī)森林算法,包含分類和回歸問題,其算法流程如下:
1)假如有N個(gè)樣本,則有回放的隨機(jī)選擇N個(gè)樣本(每次隨機(jī)選擇一個(gè)樣本,然后返回繼續(xù)選擇)。這選擇好了的N個(gè)樣本用來訓(xùn)練一個(gè)決策樹,作為決策樹根節(jié)點(diǎn)處的樣本。
2)當(dāng)每個(gè)樣本有M個(gè)屬性時(shí),在決策樹的每個(gè)節(jié)點(diǎn)需要分裂時(shí),隨機(jī)從這M個(gè)屬性中選取出m個(gè)屬性,滿足條件m<
3)決策樹形成過程中,每個(gè)節(jié)點(diǎn)都要按照步驟2來分裂(很容易理解,如果下一次該節(jié)點(diǎn)選出來的那一個(gè)屬性是剛剛父節(jié)點(diǎn)分裂時(shí)用過的屬性,則該節(jié)點(diǎn)已經(jīng)達(dá)到了葉子節(jié)點(diǎn),無須繼續(xù)分裂)。一直到不能再分裂為止,注意整個(gè)決策樹形成過程中沒有剪枝。
4)按步驟1-3建立大量決策樹,如此形成隨機(jī)森林。
從上邊的步驟可以看出,隨機(jī)森林每棵樹的訓(xùn)練樣本是隨機(jī)的,數(shù)中每個(gè)節(jié)點(diǎn)的分類屬性也是隨機(jī)選擇的,這2個(gè)隨機(jī)的選擇過程,保證了隨機(jī)森林不會(huì)產(chǎn)生過擬合現(xiàn)象。
2 數(shù)據(jù)處理
本文使用python語言實(shí)現(xiàn)了隨機(jī)森林算法的整個(gè)流程,數(shù)據(jù)集采用的是UCI數(shù)據(jù)集上心臟病數(shù)據(jù),為了在此數(shù)據(jù)集上驗(yàn)證隨機(jī)森林算法的有效性,使用隨機(jī)森林算法對(duì)該數(shù)據(jù)集進(jìn)行預(yù)測研究。
2.1 數(shù)據(jù)預(yù)處理
首先對(duì)本實(shí)驗(yàn)中用到的心臟病數(shù)據(jù)集進(jìn)行預(yù)處理,對(duì)數(shù)據(jù)集中數(shù)據(jù)變量名、數(shù)值分布和缺失值情況等等有初步了解。本數(shù)據(jù)集有14個(gè)特征。對(duì)數(shù)據(jù)集中類別變量不是數(shù)值型的數(shù)據(jù)需要將類別型變量轉(zhuǎn)換為數(shù)值型變量。本文采用獨(dú)熱編碼為每個(gè)獨(dú)立值創(chuàng)建一個(gè)啞變量[2]。對(duì)特征中非連續(xù)型數(shù)值胸痛類型(cp)運(yùn)動(dòng)高峰的坡度(slope),血液疾?。╰hal)三個(gè)分類型特征進(jìn)行啞變量處理。采用的是pandas對(duì)one-hot編碼的函數(shù)pd.get_dummies0。然后對(duì)數(shù)據(jù)集進(jìn)行分割,把數(shù)據(jù)切分為訓(xùn)練集和驗(yàn)證集,使用train_test_split0函數(shù),將25%的數(shù)據(jù)用于驗(yàn)證。
X_train, X_test, y_train, y_test= train_test_split(X,y, test_sizr=0.25,trandom_state=6),并對(duì)切分后的數(shù)據(jù)用函數(shù)standardScaler.transform0進(jìn)行歸一化處理。
2.2 特征選擇
特征選擇是為了構(gòu)建模型而選擇相關(guān)特征(即屬性、指標(biāo))子集的過程。指從數(shù)據(jù)集中已有的M個(gè)特征中選擇N個(gè)特征(M>N),也就是從原始特征中選擇出一些最有效特征以降低數(shù)據(jù)集維度的過程,最后使系統(tǒng)的指標(biāo)最優(yōu)化。本文使用隨機(jī)森林算法得到的特征變量重要性,通過特征變量比較圖對(duì)特征進(jìn)行排序,可以剔除不重要的特征。
由圖2可得出,thal_2(地中海貧血的血液疾病)、oldpeak(相對(duì)于休息的運(yùn)動(dòng)引起的ST值)與ca(血管數(shù))這三個(gè)特征比其他特征重要性高??梢允褂么朔椒▉硖崛?duì)模型重要的特征,剔除不重要的特征來提高模型的預(yù)測效果。
3 模型創(chuàng)建與評(píng)估
本實(shí)驗(yàn)采用的是隨機(jī)森林算法對(duì)數(shù)據(jù)進(jìn)行建模,采用py-thon語言平臺(tái)Anaconda3實(shí)現(xiàn)。在模型訓(xùn)練中,對(duì)模型效果的驗(yàn)證尋找合適的參數(shù)主要有K折交叉驗(yàn)證、參數(shù)網(wǎng)格搜索以及訓(xùn)練集、驗(yàn)證集和測試集的引入等方法。這里采用的是參數(shù)網(wǎng)格搜索法為模型尋找更優(yōu)的參數(shù)。在參數(shù)搜索過程中,主要使用的函數(shù)為GridSearchCVO。通過此方法,可以得到隨機(jī)森林如下的最優(yōu)參數(shù):
n_estimators=500, max_leaf_nodes=16, random_state=666.oob_score=True,n_jobs=-l
為了更好地驗(yàn)證隨機(jī)森林的模型性能,本文將邏輯回歸,KNN,決策樹作為對(duì)比模型,并通過F1指標(biāo),混淆矩陣,精準(zhǔn)率和召回率曲線,繪制每個(gè)模型的ROC曲線進(jìn)行對(duì)比,用對(duì)比圖來對(duì)各個(gè)模型的效果進(jìn)行評(píng)估。采用ROC曲線下的面積(area un-dercurve.AUC)作為模型性能指標(biāo),以下是實(shí)驗(yàn)得到的精確度、F1-score及ROC曲線圖。
通過圖3中的幾種模型的ROC曲線比較中,可以得到,Lo-gistic Regression算法下的AUC值這0.8785,KNN下的AUC值為0.8739.DecisionTree算法下的AUC值為0.7527,RandomForest算法下的AUC值為0.9356。對(duì)于UCI心臟病數(shù)據(jù)集的分類效果來看,隨機(jī)森林的分類的效果更高些。
5 結(jié)論
本文對(duì)隨機(jī)森林算法在分類問題上的應(yīng)用進(jìn)行了研究,并且對(duì)UCI數(shù)據(jù)集上心臟病數(shù)據(jù)進(jìn)行預(yù)測,通過實(shí)驗(yàn)驗(yàn)證證明此算法有著很好的分類作用。下一步的研究工作是針對(duì)隨機(jī)森林算法的超參數(shù)調(diào)優(yōu)尋找更好的方法。
參考文獻(xiàn):
[1]馬驪,隨機(jī)森林算法的優(yōu)化改進(jìn)研究[D].廣州:暨南大學(xué),2016:43-49.
[2]李河,麥勁壯,肖敏,等.啞變量在Logistic回歸模型中的應(yīng)用[J].循證醫(yī)學(xué),2008,8(1): 42 - 45.
[3]李毓,張春霞.基于out-of-bag樣本的隨機(jī)森林算法的超參數(shù)估計(jì)[J].系統(tǒng)工程學(xué)報(bào),201 1,26(4):566-572.
[4]曹正鳳.隨機(jī)森林算法優(yōu)化研究[D].北京:首都經(jīng)濟(jì)貿(mào)易大學(xué)。2014:29-34.
[5]王日升.基于Spark的一種改進(jìn)的隨機(jī)森林算法研究[D].太原:太原理工大學(xué),2017:39-47.
[6]夏濤,徐輝煌,鄭建立.基于機(jī)器學(xué)習(xí)的冠心病住院費(fèi)用預(yù)測研究[J].智能計(jì)算機(jī)與應(yīng)用,2019,9(5):35-39.
[6]馮曉榮,瞿國慶,基于深度學(xué)習(xí)與隨機(jī)森林的高維數(shù)據(jù)特征選擇[J].計(jì)算機(jī)工程與設(shè)計(jì),2019,40(9):2494-2501.
[7]楊長春,徐筱,宦娟,等,基于隨機(jī)森林的學(xué)生畫像特征選擇方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2019,40(10):2827-2834.
[8]呂紅燕,馮倩.隨機(jī)森林算法研究綜述[J].河北省科學(xué)院學(xué)報(bào),2019,36(3):37-41.
[9]梁瓊芳,莎仁.基于隨機(jī)森林的數(shù)學(xué)試題難易度分類研究[J].軟件導(dǎo)刊,2020,19(2):122-126.
【通聯(lián)編輯:唐一東】
收稿日期:2020-03-15
基金項(xiàng)目:海南省教育科學(xué)規(guī)劃課題:基于一種自學(xué)習(xí)分類算法的學(xué)生成績?cè)u(píng)價(jià)研究( QJY20181071);海南省高等學(xué)校教育教學(xué)改革研究項(xiàng)目(Hnjg2020-31);海南省自然科學(xué)基金項(xiàng)目(2019RC182)
作者簡介:吳興惠(1975-),女,海南儋州人,海南師范大學(xué)副教授,碩士,機(jī)器學(xué)習(xí);通訊作者:邢?;ǎ?976-),女,海南文昌人,海南師范大學(xué)教授,博士,智能空間信息處理。