葉蘇婷 潘媛媛 畢迎春



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