葉蘇婷 潘媛媛 畢迎春
摘要:【目的/意義】旨在利用機(jī)器學(xué)習(xí)中決策樹算法,構(gòu)建心臟病預(yù)警模型,為臨床醫(yī)生及患者提供心臟病預(yù)警,反映患者心臟病發(fā)病情況?!痉椒?過程】以python為語言基礎(chǔ),運(yùn)用機(jī)器學(xué)習(xí)中決策樹所涵蓋的算法理論對(duì)心臟病數(shù)據(jù)集建立預(yù)警模型,并構(gòu)建用戶程序界面?!窘Y(jié)果/結(jié)論】根據(jù)實(shí)驗(yàn)結(jié)果,決策樹算法預(yù)測準(zhǔn)確率相對(duì)較理想,能夠較為準(zhǔn)確的反應(yīng)患者的患病情況,可為患者提供心臟病發(fā)病預(yù)警信息以及協(xié)助臨床醫(yī)生進(jìn)行診療。
關(guān)鍵詞:心臟病發(fā)病預(yù)警;機(jī)器學(xué)習(xí);決策樹
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)19-0187-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 相關(guān)研究及問題提出
心臟病是一種臨床常見非傳染性的慢性疾病。臨床上多表現(xiàn)為心絞痛,呼吸困難,心悸,胸痛不適等癥狀,對(duì)人的身體健康有著極為不利的影響,是當(dāng)今社會(huì)導(dǎo)致死亡的主要疾病類型之一[1]。
決策樹算法( Decision Tree)作為機(jī)器學(xué)習(xí)中進(jìn)行分類與回歸的代表性算法。該算法可用于分類樹形結(jié)構(gòu),其中對(duì)某一屬性的一次測試看作一個(gè)內(nèi)部節(jié)點(diǎn),根據(jù)測試所得結(jié)果看作一條邊,將某個(gè)類或類的分布作為葉子節(jié)點(diǎn)。其中每節(jié)點(diǎn)判斷條件由對(duì)象屬性表示,其分支表示符合節(jié)點(diǎn)條件的對(duì)象,對(duì)象所屬的預(yù)測結(jié)果由此決策樹的葉子節(jié)點(diǎn)表示[2]。心臟病起病隱匿,病程時(shí)間長,病因復(fù)雜。傳統(tǒng)的醫(yī)療決策模型往往難以對(duì)這類疾病進(jìn)行精準(zhǔn)分析診斷,從而導(dǎo)致患者發(fā)現(xiàn)晚、治療不及時(shí)。通過機(jī)器學(xué)習(xí)正確診斷此類疾病,對(duì)現(xiàn)有醫(yī)療數(shù)據(jù)進(jìn)行有效提取處理,可準(zhǔn)確構(gòu)建預(yù)測模型,預(yù)測患者是否發(fā)病,從而獲得診斷結(jié)果[3]。
目前國外諸多學(xué)者對(duì)心臟病發(fā)病預(yù)警模型進(jìn)行了研究[4]。2009年,Tan K C.Teoh EJ[5]提取加州歐文分校機(jī)器學(xué)習(xí)數(shù)據(jù)庫心臟病數(shù)據(jù)集,在LIB支持向量機(jī)和Weka上實(shí)現(xiàn),得到84.07%的預(yù)測準(zhǔn)確率。Chaurasia、Pal[6]在2013年使用樸素貝葉斯、J48、引導(dǎo)聚集算法對(duì)UCI數(shù)據(jù)集中的11個(gè)特征項(xiàng)進(jìn)行預(yù)測,獲得結(jié)果顯示樸素貝葉斯準(zhǔn)確率為82.31%,J48準(zhǔn)確率為84.31%,引導(dǎo)聚類算法準(zhǔn)確率為85.03%。Parthiban、Srivat-sac7]2012年利用來自印度金奈某研究所的心臟病數(shù)據(jù)集,使用Weka平臺(tái)實(shí)現(xiàn)樸素貝葉斯及支持向量機(jī)診斷心臟病患病率.分別得到準(zhǔn)確率74.00%、94.60%。2015年Vem bandasamy等人[8]使用樸素貝葉斯算法對(duì)印度金奈某研究所的心臟病數(shù)據(jù)集進(jìn)行分類預(yù)測,得到86.42%預(yù)測準(zhǔn)確率。機(jī)器學(xué)習(xí)算法涵蓋廣泛,在模型研究時(shí),特征變量,算法的選擇不同,均會(huì)導(dǎo)致預(yù)測準(zhǔn)確率差異[9]。
基于上述情況,本模型利用決策樹算法對(duì)UCI克利蘭夫醫(yī)學(xué)研究中心的心臟病數(shù)據(jù)集構(gòu)建研究模型。
2 決策樹算法描述
決策樹生成:一是向根節(jié)點(diǎn)輸人數(shù)據(jù);二是利用信息熵(或基尼系數(shù))度量,選擇數(shù)據(jù)某個(gè)特征來把數(shù)據(jù)劃分成不相交的節(jié)點(diǎn);三是根據(jù)數(shù)據(jù)的不確定性大小對(duì)節(jié)點(diǎn)進(jìn)行轉(zhuǎn)化分割[10],根據(jù)模型研究需求選用基尼系數(shù)作為度量。
基尼系數(shù)定義如下:
條件基尼系數(shù)根據(jù)A的不同取值{a1,……,am}對(duì)y進(jìn)行限制后,先對(duì)y分別計(jì)算基尼系數(shù),再將m個(gè)基尼系數(shù)根據(jù)特征取值本身的概率加權(quán)求和,從而得到總條件基尼系數(shù)。因此條件基尼系數(shù)越小,y被A限制后總不確定性越小,A可以幫助提供決策。
根據(jù)基尼系數(shù)度量方式從數(shù)據(jù)集中訓(xùn)練出一系列的劃分規(guī)則,使得這些規(guī)則能夠在數(shù)據(jù)集上集中體現(xiàn)構(gòu)成了決策樹的生成過程。
3 基于決策樹算法的心臟病發(fā)病預(yù)警模型實(shí)現(xiàn)
基于決策樹算法的心臟病發(fā)病預(yù)警模型實(shí)現(xiàn),如下圖1所示:
3.1 原始心臟病數(shù)據(jù)集特征篩選
研究采用來源UCI機(jī)器學(xué)習(xí)知識(shí)庫的心臟病數(shù)據(jù)集,共有303個(gè)樣本和76個(gè)特征,基于該數(shù)據(jù)集選用心臟病致病原因的14個(gè)特征構(gòu)成特征子集,如下表1所示。
3.2 Python語言構(gòu)建決策樹預(yù)警模型
對(duì)本心臟病數(shù)據(jù)集進(jìn)行處理過程中,可知模型預(yù)測結(jié)果為:患病(設(shè)值1)或不患?。ㄔO(shè)值0),因此將此類預(yù)測看作二分類。
Stepl數(shù)據(jù)預(yù)處理的拆分與擬合。本研究特征子集中在14個(gè)特征里提取target列作為標(biāo)簽列,由于此時(shí)target作為預(yù)測目標(biāo)結(jié)果,在特征子集中將此列丟棄,同時(shí)對(duì)特征子集進(jìn)行拆分和交叉驗(yàn)證。導(dǎo)人Skleam中train_test_split,將數(shù)據(jù)集分割為訓(xùn)練集和測試集,設(shè)測試集占比25%。拆分后對(duì)數(shù)據(jù)集進(jìn)行擬合操作,并對(duì)數(shù)據(jù)集吻合度進(jìn)行評(píng)分。
Step2決策樹CART算法優(yōu)化參數(shù)模型。在Sklearn模塊中,根據(jù)擬合后結(jié)果,對(duì)比訓(xùn)練集評(píng)分?jǐn)?shù)據(jù)與測試集評(píng)分?jǐn)?shù)據(jù)。本研究中,特征子集中含有14個(gè)特征,樣本數(shù)較大,評(píng)分對(duì)比中易呈現(xiàn)訓(xùn)練集評(píng)分高于測試集,出現(xiàn)決策樹過擬合現(xiàn)象,需采用前剪枝操作。采用決策樹CART算法,通過max_depth參數(shù)優(yōu)化模型,獲得決策樹bestdepth最佳深度值。再利用min_impurity_decrease參數(shù)優(yōu)化模型,由于此參數(shù)為基尼系數(shù)指定閾值,當(dāng)決策樹分裂后,若其增益低于此閾值bestmin即立刻停止分裂,以此限制決策樹生長。
Step3決策樹預(yù)警學(xué)習(xí)模型及測試。以基尼系數(shù)為度量原則,構(gòu)造一棵系數(shù)值下降最快的樹,遍歷現(xiàn)有特征子集中13個(gè)特征,選擇最優(yōu)特征為分裂特征生成樹。又將兩組參數(shù)best-depth最佳深度值及閾值bestmin,代人模型,獲取模型得分(tees_score)、查準(zhǔn)率、召回率、二分類模型精確度指標(biāo)( Fl_score),以上數(shù)值均在0-1間。
3.3 預(yù)警模型界面程序構(gòu)建