曹菲菲
摘要:心臟病是對人類生命的一個威脅,如何發(fā)現(xiàn)被提早預防就顯得尤為重要。以心臟病數(shù)據(jù)集為研究對象,對數(shù)據(jù)集進行簡單介紹,對分類特征值和連續(xù)特征值與患病情況的關(guān)系進行分析;分別構(gòu)建單一評估模型,如隨機森林、人工神經(jīng)網(wǎng)絡、支持向量機、K最近鄰等,分另0對患病情況進行預測,結(jié)果表明人工神經(jīng)網(wǎng)絡預測效果最好,準確率為87.6%;我們采用組合Stacking模型后,發(fā)現(xiàn)組合Stacking模型的準確率為92.7%,比人工神經(jīng)網(wǎng)絡提高大約5%,而且通過訓練集和測試集上各評價指標的比較發(fā)現(xiàn),組合Stacking模型具有很好的泛化性能.
關(guān)鍵詞:心臟病;單一評估模型;人工神經(jīng)網(wǎng)絡;組合模型Stacking;評估模型
中圖分類號:TPl81 文獻標志碼:A
心臟病是人類健康的最大威脅,全世界1/3人口死亡由心臟病引起。我國每年有幾十萬人死于心臟病,對心臟病的研究顯得尤為重要。如果可以通過提取人體相關(guān)的體測指標,對心臟病患病情況進行預測,將對預防心臟病起到至關(guān)重要的作用。
對心臟病的病癥及原因進行了一定的檢索,有李廣平所著的實用臨床心臟病診斷治療學;弓孟春和嚴曉偉對歐洲心臟病學會2008年版心力衰竭的診斷和治療指南解讀;李世軍和司全金對2017年歐洲心臟病學會外周動脈疾病診斷與治療指南解讀;劉江生對我國康復心臟病學的發(fā)展及現(xiàn)狀的研究等。對心臟病患病情況的預測研究主要有:Krishnaiah V,NarsimhaG,Subhash N使用數(shù)據(jù)挖掘技術(shù)和智能模糊方法對心臟病患病情況進行預測研究;Palaniappan s,AwangR提出使用決策樹和神經(jīng)網(wǎng)絡對心臟病患病情況進行預測,并對預測結(jié)果進行決策制定;Thomas J,PrincyR T使用決策樹、K最近鄰、樸素貝葉斯和神經(jīng)網(wǎng)絡斡分類技術(shù)對心臟病患病情況進行預測;Ramachandran,s使用弗雷明漢模型對心臟病患病情況進行預測;Kan-chan B D,Kishor M M基于構(gòu)件分析原理在特殊疾病上使用機器學習算法對患病情況進行預測研究;Giardina M,Azuaje F,Mccullagh P等人提出一種用于預測2型糖尿病患者冠心病并發(fā)癥的監(jiān)督學習方法對此病的患病情況進行預測。
本論述選取UCI的開源數(shù)據(jù)集Heart_Disease(https://archive.ics.uci.edu/ml/datasets/Heart+Disease),使用組合模型Stacking對心臟病患病情況進行預測,我們的貢獻是將一些初級分類器如用決策樹、K最近鄰、樸素貝葉斯和神經(jīng)網(wǎng)絡等進行組合,并使用簡單的線性模型如邏輯斯蒂回歸作為次級分類器,采用這種方法不僅使模型的準確率提高,而且模型的泛化性能也得到提高,我們認為這在分類預測中是非常重要的。
1數(shù)據(jù)描述
1.1數(shù)據(jù)集介紹
此數(shù)據(jù)集包含303個心臟病檢查患者的體測數(shù)據(jù),包含13個特征和一個目標,為了便于理解,我們將特征重新命名,其具體的特征及介紹見表1所列。
1.2分類特征值與患病情況的比率關(guān)系
圖1中a,b,c分別描述了8種分類特征值與患病情況之間的關(guān)系,圖中的數(shù)字和百分數(shù)分別表示該種特征值患病與否的數(shù)量與比例,為了表示方便,將某些特征名在標注時進行了簡寫,如exang表示運動時是否心絞痛,其他簡寫類似,從表1中可以找到其對應的全稱.從圖1可以清楚看出各分類特征值在患病情況中占的比例,當透視檢查血管數(shù)越多,不患病的比例越高;對于缺陷種類,有兩位受試者不能確定,在后面的建模中,會將其刪去,當受試者的缺陷種類為固有缺陷時,患病比例大大提升;當運動引起心絞痛時,不患病比例的人數(shù)增多;當心電圖sT段=向下傾斜時,患病人數(shù)比例增多;不管空腹血糖是否大于120mg/dl,其患病與不患病人數(shù)都差不多;當心電圖顯示患有ST-T波異常時,患病人數(shù)比例增多;對于這四種胸痛類型,都有較高的患病比例;性別顯示女性相比男性有更高的患病比例。
1.3連續(xù)特征值及患病情況的分布
對連續(xù)特征值進行可視化結(jié)果如圖2所示。其中年齡,靜息血壓、最大心跳數(shù)和膽固醇呈近似正態(tài)分布,年齡在50至60歲之間的受試者患心臟病的頻率最大,目標患病情況的分布基本均衡,這在分類預測中是非常重要的;而sT段抑郁呈明顯的右偏分布,大量受試者分布在0-1之間。
2方法
1992年Wolpert提出集成學習Stacking算法,主要組合多個不同學習器提高預測效果。Stacking算法分為初級學習器和次級學習器兩部分,其原理如圖3所示。
組合學習Stacking算法先將數(shù)據(jù)集分為訓練集(Training Data)和測試集(Test Data),具體訓練過程如下。
2.1第一層初級學習器
訓練集采用5折交叉驗證,其中訓練模型數(shù)據(jù)集(Learn)占4/5,驗證模型的數(shù)據(jù)集(Predict)占1/5;首先選擇第一個單一評估模型Model 1,用數(shù)據(jù)集(Learn)訓練模型,將訓練好的模型對數(shù)據(jù)集(Predict)進行預測,經(jīng)過第一次交叉驗證后,預測結(jié)果記為a1,同理訓練模型對測試集(Test Data)預測結(jié)果為b1,經(jīng)過5此交叉驗證,訓練集得到預測結(jié)果(a1,a2,a3,a4,a5),將其合并為矩陣A1;測試集預測結(jié)果(b1,b2,b3,b4,b5),對各部分預測值對應相加求均值,結(jié)果記為矩陣B1,以上步驟為Stacking中第一個基本學習器為Model 1的完整算法流程,同理計算n個不同模型,最終訓練集的預測結(jié)果矩陣為A=(A1,A2,A3,…,A5),測試集的預測結(jié)果矩陣為B=(B1,B2,B3,…,B5)。
2.2第二層次級學習器
矩陣A為訓練集,矩陣曰為測試集,構(gòu)造簡單的邏輯斯蒂回歸模型,其中第j個單一評估模型Model.j對第i個訓練樣本點的預測值,作為新的訓練集中第i個樣本的第i個特征值,即解釋變量為不同模型的預測值,被解釋變量為實際的變量值。
采用組合模型Stacking算法,具體流程圖如圖4所示,首先對數(shù)據(jù)集進行數(shù)據(jù)預處理,并將數(shù)據(jù)集按4:1比例隨機分為訓練集和測試集,然后第一層初級學習器,選擇單一非線性結(jié)構(gòu)的評估模型,如隨機森林、Gra-dientBoosting、KNN、SVM、人工神經(jīng)網(wǎng)絡等,采用5折交叉驗證,計算得到訓練集和測試集的矩陣為A和B;第二層為次級學習器,將舉證A和B組合成新的矩陣為D=(A,B)T,即將5個單一評估模型的預測結(jié)果作為新特征,且矩陣A和B分別為訓練集和測試集,心臟病患病情況target為因變量,構(gòu)建簡單的邏輯斯蒂回歸模型,其評估模型如圖4所示。
3結(jié)果
3.1評估指標
構(gòu)建心臟病患病情況評估模型之前,需要將數(shù)據(jù)劃分為訓練集和測試集,其中訓練集用來訓練評估模型,測試集用來測試評估效果。一般為了評估模型穩(wěn)健性,采用K折交叉驗證法,該方法將數(shù)據(jù)分成K份樣本集,每次將其中一份作為測試集,剩余的K=1份作為訓練集,如此重復K次,并計算K個預測結(jié)果的均值作為最終預測結(jié)果。
本論述通過5折交叉驗證,隨機分配訓練集和測試集,對測試集的心臟病患病情況進行預測評估,其中評估指標主要有以下三種,敏感性(sensitivity)、特異性(specificity)、準確率(Accuracy)和F1 Score,敏感性和特異性是心臟病診斷測試常用的指標.分別對預測結(jié)果評估分析,下面給出它們的計算公式:
3.2單一評估模型預測
首先對每個單一模型進行訓練,得到最優(yōu)模型,再進行預測,所有這些工作我們通過編程語言Python來完成。
對于隨機森林分類器,通過網(wǎng)格搜索法確定參數(shù)的最優(yōu)組合為最大深度(max_depth)設置為5,建立子樹的數(shù)量(n_estimators)設置為50,由于心臟病數(shù)據(jù)集合特征數(shù)量都較小,其他參數(shù)使用默認值;對于支持向量機分類器,選擇高斯核函數(shù)(RBF)進行預測時模型表現(xiàn)最好;對于梯度提升分類器,定義損失函數(shù)為指數(shù)損失函數(shù),學習速率(Eearning_rate)為0.03,需要擬合的樹的數(shù)量(n estimators)為75,最大深度(max_depth)為5;對于K最近鄰分類器,將權(quán)重考慮在內(nèi),并使用uniform作為權(quán)重,使用歐幾里得法計算距離,使用10折交叉驗證對近鄰數(shù)K進行選擇,在訓練集上預測表現(xiàn)最好的K值為10,測試集上預測表現(xiàn)最好的K值為6;對于人工神經(jīng)網(wǎng)絡分類器,使用Relu作為激活函數(shù),學習速率為0.0023,使用交叉熵損失函數(shù)作為衡量標準,采用反向傳播算法訓練模型,當?shù)芷冢╪um_epochs)達到7000次時,平均損失達到最小,此時的模型達到最優(yōu)。對每個單一評估模型進行最優(yōu)選擇后,我們分別將它們運行在訓練集和測試集上,得到的結(jié)果見表2所列。
由表可知,單一評估模型中人工神經(jīng)網(wǎng)絡分類器的預測效果最佳,其中測試集的敏感率(Sensitivity)為0.85,特異率(specificity)為0.89,準確率(Accuracy)為0.900,其次為隨機森林分類器、支持向量機分類器、梯度提升分類器和K最近鄰分類器。
3.3組合模型Stacking預測
現(xiàn)在用第3章提出的組合模型Stacking算法對心臟病患病情況進行預測,并與4.2節(jié)提到的單一評估模型中預測性能最好的人工神經(jīng)網(wǎng)絡分類器進行比較,最終預測結(jié)果如表所示,組合模型Stacking訓練集的敏感率(sensitivity)為0.94,而人工神經(jīng)網(wǎng)絡分類器敏感率(sensitivity)為0.865;組合模型Stacking測試集的敏感率(sensitivity)為0.935,而人工神經(jīng)網(wǎng)絡分類器敏感率(sensitivity)為0.89,因此組合模型Stacking的預測敏感率相對人工神經(jīng)網(wǎng)絡提高了4.5%;同理測試集上組合模型Stacking預測特異率提高了6%,準確率提高了2.7%。
組合模型Stacking的預測效果最佳,準確率較高,且具有很好的泛化性能。
4結(jié)論與展望
本論述以心臟病數(shù)據(jù)為例,通過對心臟病患病情況的預測分布建立單一評估模型和組合模型Stacking模型。該模型主要分為初級學習器和次級學習器兩層,其中第一層初級學習器將多個不同單一評估模型組合,采用5折交叉驗證,有效防止過擬合;第二層次級學習器,建立簡單的邏輯斯蒂回歸模型,最終發(fā)現(xiàn)組合模型Stacking優(yōu)于單一評估模型,具有較好的泛化能力,值得被推廣應用到心臟病患病情況預測中。心臟病一直是患者與醫(yī)院十分關(guān)注的疾病,對心臟病的預防和緊急治療是當前需要解決的重大問題,希望能在醫(yī)院安裝這種程序,當心臟病潛在患者或者健康人群來醫(yī)院就診時,可以使用該程序?qū)@些人群進行心臟病患病情況的評估,對于預測出可能患心臟病的人群,提早告知他們并給予建議多加防范,這也是這個模型提出的意義所在。