趙金超,李 儀,王 冬,張俊虎
(青島科技大學 信息科學技術(shù)學院,山東 青島266061)
目前醫(yī)學領域正面臨由傳統(tǒng)醫(yī)學模式向精準醫(yī)學模式轉(zhuǎn)變的契機,給人工智能技術(shù)充分參與醫(yī)療實踐活動創(chuàng)造了有利的環(huán)境[1-2]。國內(nèi)外研究人員,依靠不同的算法,通過對心臟病進行分類從而實現(xiàn)幫助醫(yī)生進行輔助診斷,正在進行大量的研究工作。COMAK等[3]在2007年通過支持向量機建立了對心臟病識別的系統(tǒng)。PARTHIBAN等[4]在2011年應用樸素貝葉斯算法在心臟病治療上。史琦等[5-7]連續(xù)3 a分別使用數(shù)據(jù)挖掘、決策樹、模式識別對心臟病進行了分類預測研究,史瑜等[8]在2015年用K近鄰算法對心臟病進行分類,得到了75%的準確率。醫(yī)生在診斷患者時,主要根據(jù)病人的一系列的醫(yī)學檢查結(jié)果,自己學習的醫(yī)療知識和以往的經(jīng)驗,對病人是否患有該疾病進行判斷。然而在醫(yī)生做出判斷時,會由于人為不可抗原因,可能會產(chǎn)生錯誤判斷。而目前流行的通過醫(yī)療與機器學習算法相結(jié)合的方法,能夠幫助醫(yī)生有效減少誤診率,提高診療準確率和效率,對醫(yī)療事業(yè)的發(fā)展有著推動作用。在機器學習算法中,隨機森林就是一種易理解,易應用的集成學習的方法,本研究基于隨機森林算法建立一種KNN-RF模型,對心臟病進行輔助診斷,通過對算法進行優(yōu)化和與其他機器學習算法對比,獲得較高準確率。
隨機森林的基本組成單元是決策樹,對用與分類與回歸問題的研究,它是許多各自獨立同分布的決策樹結(jié)合而成的,組成隨機森林的每一棵決策樹都會對輸入數(shù)據(jù)進行分類處理,處理完成后,對每棵樹的決策結(jié)果進行投票處理,票數(shù)高的即為輸出結(jié)果。與決策樹相比,隨機森林有更良好的分類效果和更加優(yōu)秀的泛化能力,實質(zhì)上就是對決策樹的一種改進算法。
決策樹是一種基礎結(jié)構(gòu)形似一棵樹的監(jiān)督學習算法,其每個節(jié)點代表一個字段,最早由HUNT等提出,反映輸入的屬性與輸出值的一一對應關系。決策樹由三部分構(gòu)成:決策點、狀態(tài)節(jié)點、結(jié)果節(jié)點。對每一個新輸入的數(shù)據(jù),根據(jù)模型進行自上而下的節(jié)點分配,每一個內(nèi)部節(jié)點只有一個父節(jié)點和兩個或多個子節(jié)點,根據(jù)所規(guī)定的規(guī)則劃分數(shù)據(jù)集,直到最下層,最終將葉子結(jié)點的分類作為該輸入數(shù)據(jù)的類別。決策樹中,每個節(jié)點表示一個對象,決策點是最終選擇的方案,若為多級決策問題,則可以存在多個決策點。決策樹的模型構(gòu)建分類兩部分:特征選擇和生成樹。
決策樹的分類好壞取決于其屬性的選擇,在不斷劃分的或域中,使節(jié)點“純度”越來越高。決策樹使用無需先驗知識,可以同時處理連續(xù)與離散數(shù)據(jù),更容易學習和理解,復雜度低效率高。但是會容易出現(xiàn)過擬合現(xiàn)象,存在局限性[9]。
為了解決單棵決策樹存在的不足并提高模型精度,文中采取隨機森林(random forest)算法。該算法主要用于分類與回歸,在20世紀90年代由BREIMAN[10]提出,在生物處理,人臉識別等方面應用廣泛。隨機森林利用集成學習思維為基礎,構(gòu)造多個決策樹合成,其中的每一棵決策樹之間是獨立的。當輸入新樣本時,隨機森林中的每一棵樹都會判斷該樣本的分類結(jié)果,最后綜合判斷結(jié)果進行投票判決,票數(shù)多的一類即為預測的最終結(jié)果,公式如下:。該算法能夠有效解決決策樹準確性較低或過擬合的問題,有效的提升了算法模型的泛化能力,實現(xiàn)簡單。大致流程見圖1。
圖1 隨機森林算法流程Fig.1 Flow of random forest algorithm
步驟:
1)假設原始訓練集有N個樣本,隨機有放回的抽樣組成訓練集。
2)設d<D,從樣本的D個特征中,隨機抽取d個特征。
3)用抽取的特征進行構(gòu)造隨機森林模型。
4)輸入數(shù)據(jù),每棵樹得到各自的結(jié)果,將結(jié)果進行投票,選擇票數(shù)多的為最終結(jié)果。
隨機森林中的每一棵樹都是按照由頂而下的原則,從根節(jié)點開始劃分而成。在該樹中,根節(jié)點包含所有的數(shù)據(jù),直到分裂至滿足停止條件才會停止分類。該算法將單個分類器進行加權(quán)組合,構(gòu)建性能較好的分類器,任意兩棵樹關聯(lián)性越小,該模型錯誤率越低。
隨機森林在實驗中性能較好,有較強的抗噪聲性能,但在處理非平衡的數(shù)據(jù)上,存在缺陷,由于本研究數(shù)據(jù)標簽分布均衡,故本數(shù)據(jù)集適用于隨機森林算法。
網(wǎng)格搜索(grid search CV),又被稱為窮舉搜索,是在機器學習中非常常用的一種調(diào)參方法。其包括兩部分:網(wǎng)格搜索,交叉驗證。一般就是根據(jù)實驗需要指定一項需要調(diào)整的參數(shù),在指定的范圍內(nèi),通過遍歷選定參數(shù),選擇能夠讓模型得到最優(yōu)結(jié)果的那個參數(shù)作為最終結(jié)果。
為了提高模型的精確度,本研究對隨機森林中的兩個參數(shù):樹的數(shù)量即n_estimators、樹的高度即max_depth和最大葉子節(jié)點數(shù)即max_leaf_nodes作為需要搜索的超參數(shù),選擇最佳的參數(shù)。該方法可避免產(chǎn)生嚴重的誤差,得到較優(yōu)的解。但是該方法的缺點是會消耗比較多的時間。
從數(shù)據(jù)庫收集的數(shù)據(jù),存在良莠不齊的特點,可能會存在缺失值和異常值,因此需要先對數(shù)據(jù)進行處理,得到符合實驗規(guī)定的數(shù)據(jù),再進行模型建立。
本研究選取UCI上的心臟病數(shù)據(jù)集,該數(shù)據(jù)集有13個屬性,303條數(shù)據(jù),其中第14位為分類項,target代表是否患病。此外,本研究還使用了來自克利夫蘭醫(yī)學中心的270條數(shù)據(jù),同樣有13個屬性,是開源數(shù)據(jù)集。屬性名稱分別見表1。
表1 數(shù)據(jù)集屬性Table 1 Data set properties
機器學習常用的數(shù)據(jù)庫,超過40%都含有缺失數(shù)據(jù)[11]。在原始數(shù)據(jù)集中,可能會存在大量“臟數(shù)據(jù)”,這些“臟數(shù)據(jù)”的使用,會導致模型的分類效果變差,準確率變低,有價值信息被忽略等情況,因此,在進行相關的研究之前,需要對數(shù)據(jù)進行預處理。本研究數(shù)據(jù)處理包括:缺失值處理,one-hot編碼,歸一化數(shù)據(jù)。
2.2.1 缺失值處理
缺失值處理常用的辦法有2種:刪除法和插補法。刪除法,主要用于刪除有缺失的數(shù)據(jù),適用于數(shù)據(jù)量大的情況。由于本研究數(shù)據(jù)集較小,使用的是第2種方法,插補法。對于填補方法,通常,數(shù)值型用中位數(shù)進行數(shù)據(jù)填充,離散型用眾數(shù)進行填充,但是這樣做會增加噪聲,會使數(shù)據(jù)的使用結(jié)果產(chǎn)生一定的偏差,只適用于缺失數(shù)據(jù)特別少時可用。由于K近鄰算法具有簡單、直觀的優(yōu)點,在將其與中位數(shù)填充、均值填充、眾數(shù)填充、不進行處理等4項操作進行對比后,選擇效果最好的K近鄰填補法對數(shù)據(jù)進行填充完善。
首先將數(shù)據(jù)初始化,構(gòu)建成數(shù)據(jù)矩陣;其次,對矩陣中的數(shù)據(jù)進行歐式距離計算,其公式如下:D=,并從中選擇歐氏距離最小的K個數(shù)據(jù);最后,計算所選數(shù)據(jù)的權(quán)值,并對數(shù)據(jù)進行填充。該算法具體流程圖2所示。
圖2 數(shù)據(jù)填補流程Fig.2 Data filling process
以上所述的方法,只能處理離散值屬性,如果遇上連續(xù)型屬性,就要把連續(xù)型屬性離散化,再按照上述步驟進行數(shù)據(jù)處理既可。
2.2.2 one-hot編碼
one-hot編碼為機器學習技術(shù)常用數(shù)據(jù)預處理方法。其主要思想是把一個詞語轉(zhuǎn)化成為一些數(shù)字化特征,也可以看作將其映射到一個新的空間并用多維的實數(shù)向量進行表示,而這個向量就稱之為詞向量[12]。
one-hot編碼就是把詞向量的非連續(xù)性數(shù)值進行轉(zhuǎn)換,是分類變量的二進制表示形式。使用該編碼,將離散特征的取值映射到歐式空間,離散特征的某個取值就對應歐式空間的某個點。
在處理后,該值只有一個維度為1其余維度為0。由于本研究數(shù)據(jù)集中CP、Slope、Thal 3個特征屬性是離散特征,采用one-hot方法對3個特征屬性進行數(shù)字標號處理,離散數(shù)據(jù)特征進行one-hot編碼后,每一維度的特征都可以被看作是連續(xù)的特征??梢詫ζ溥M行歸一化處理。CP、Slope、Thal 3個變量進行one-hot編碼后,數(shù)據(jù)集由原來14個特征變?yōu)?2個特征。
2.2.3 數(shù)據(jù)歸一化
數(shù)據(jù)歸一化是將數(shù)據(jù)按照一定比例,將其縮小到特定閾值內(nèi),而對于不同數(shù)據(jù),存在不同的量綱,計算起來較為復雜,需要對數(shù)據(jù)采取歸一化處理。本研究采用Min-Max方法,將數(shù)據(jù)變成0~1之間的數(shù),其計算公式如式(1)所示。由于心臟病數(shù)據(jù)集中各屬性的取值不都在0~1之間,需要對其進行歸一化處理,來提高分類算法準確度。歸一化后部分數(shù)據(jù)見表2。
表2 歸一化后部分數(shù)據(jù)顯示Table 2 Normalized partial data display
2.2.4 連續(xù)值離散化
經(jīng)典決策樹算法比較適用于離散型屬性數(shù)據(jù),對于連續(xù)數(shù)值型屬性問題,它生成的決策樹較為龐大,一般選擇取值區(qū)間二分離散化對其進行處理。其具體步驟如下:1)給定一個訓練集D和連續(xù)屬性a,初始化區(qū)間,通過離散化連續(xù)型屬性,基于劃分點t將樣本進行劃分為和為取值小于等于t的樣本,為取值大于t的樣本);2)對屬性a,把區(qū)間的中點作為劃分點,就可以對其進行處理;3)分別計算信息增益并比較大小,Gain(D,a)=(D,a,t),信息增益比較最大的,即為最佳分裂點,由該點將概率屬性值劃分。
數(shù)據(jù)集特征之間可以進行分析,利用特征之間的關系可以更好地理解數(shù)據(jù)集數(shù)據(jù)之間的關系。在統(tǒng)計學領域,特征之間的關系稱為相關[13]??梢杂脽崃D觀察各個特征之間的相關性,每一個顏色塊代表橫坐標和縱坐標特征的相關程度,右側(cè)為劃分的相關系數(shù)。顏色越深說明兩個特征之間的關聯(lián)性越小,相關系數(shù)越小。相關系數(shù)為0時表明兩個特征之間是獨立的。反之,說明特征之間是冗余的。通過圖3可得,該數(shù)據(jù)集特征之間相關程度較弱,數(shù)據(jù)沒有冗余。
圖3 特征相關性分析Fig.3 Feature correlation analysis
為了提高算法的準確度,利用網(wǎng)格搜索算法對隨機森林(RF)算法進行參數(shù)調(diào)優(yōu)。設定隨機森林分類樹的數(shù)量為n_estimators,范圍設置為[10,100,200,500,1 000],分類樹的高度為max_depth,范圍設置為[3,4,5,6,7,8],最大葉子節(jié)點數(shù)為max_leaf_nodes,范圍設置為[11,12,13,14,15,16]。利用Python中Scikit-Learn.GridSearchCV網(wǎng)格搜索算法按步長依次調(diào)整參數(shù),在指定的參數(shù)范圍內(nèi)找到精度最高的參數(shù),采用10倍交叉驗證方法對其進行評估。10倍交叉驗證對訓練數(shù)據(jù)集進行訓練,將數(shù)據(jù)集平均分為10份,隨機選擇其中的9份作為訓練集,剩下的1份作為測試集,一共進行10次訓練和測試,使用選擇好的評分方式如準確率來求平均值,然后找出最大的一個評分對應的參數(shù)組合,得到分類準確率最高的最優(yōu)參數(shù)。通過網(wǎng)格搜索算法多次尋優(yōu)后,確定最佳參數(shù)組合為[n_estimators:100,max_depth:5,max_leaf_nodes:16],算法準確率最高。
本研究模型流程主要包括數(shù)據(jù)預處理、特征分析以及利用隨機森林(RF)對數(shù)據(jù)集進行分類預測。模型流程如圖4所示。
圖4 基于優(yōu)化的隨機森林預測算法模型流程Fig.4 Model flow of prediction gorithm based on optimized random forest
本研究的實驗數(shù)據(jù)來自UCI公開心臟病數(shù)據(jù)集以及克利夫蘭醫(yī)學中心,由于兩個數(shù)據(jù)集的特征數(shù)量和內(nèi)容相同,在經(jīng)過數(shù)據(jù)預處理后,兩者對數(shù)據(jù)的表現(xiàn)形式完全一致,因此,為了實驗能夠表現(xiàn)出更好的泛化能力,將兩個數(shù)據(jù)集的數(shù)據(jù)進行混合,并按照7∶3的比例分類訓練集和測試集,進行建模。
此外,建模所用的數(shù)據(jù)共573條,為了讓模型擁有足夠多的數(shù)據(jù)量以便使預測效果更好,本研究采用交叉驗證方法擴充數(shù)據(jù)集。交叉驗證也就是重復使用數(shù)據(jù)進行切分組合,將其組合成為不同的訓練集和測試集。在此基礎上可以得到多組不一樣的訓練集和測試集。此外,在機器學習中,討論的數(shù)據(jù)量大小一般是指樣本量除以特征量的值,適中的數(shù)據(jù)量較適合使用樹結(jié)構(gòu)模型,若數(shù)據(jù)量過大,也容易造成過擬合現(xiàn)象。因此,綜合數(shù)據(jù)量與特征數(shù),本研究使用隨機森林進行建模所需的數(shù)據(jù)量基本足夠。
本研究基于Python語言,在Anaconda環(huán)境中構(gòu)建隨機森林算法進行實驗。本實驗對數(shù)據(jù)集進行缺失值處理、one-hot處理以及數(shù)據(jù)歸一化等一系列數(shù)據(jù)預處理操作,得到更加干凈、可用性高的數(shù)據(jù)。為了分析各特征之間的相關度和對疾病產(chǎn)生的影響,選擇使用熱力圖展示來各個特征的相關度,經(jīng)過分析比較,該數(shù)據(jù)無冗余特征。
實驗采用優(yōu)化的隨機森林算法對模型進行訓練,通過bootstrap重采樣技術(shù),抽取訓練樣本,對選取特征進行節(jié)點分裂,生成隨機森林。使用網(wǎng)格搜索算法對隨機森林配置最優(yōu)參數(shù),得到預測模型。建模流程如圖5所示。
圖5 隨機森林模型流程Fig.5 Random forest model process
為了進一步驗證網(wǎng)格優(yōu)化后隨機森林的有效性,將該模型測試結(jié)果與Logistic回歸、GBDT、決策樹(DT)進行比較。
在醫(yī)學診斷中,評價分類器的優(yōu)劣通常采用準確率、召回率(靈敏度)和特異度等指標。準確率(accuracy)表示對于給定的測試數(shù)據(jù)集,正確分類的樣本個數(shù)與總數(shù)之比[14];召回率(recall)表示預測為正例的樣本與實際為正例的樣本的比例。特異度(spcificity)表示預測也為負例的樣本與實際為負例的樣本的比例。以關注的類通常為正類,其他類為負類[15]?;煜仃嚤硎痉诸惼髟跍y試數(shù)據(jù)集上預測是否正確,如表3所示。
表3 混淆矩陣Table 3 Confusion matrix
其中,P為正類樣本的數(shù)目,N為負類樣本的數(shù)目。4個評價指標的公式:
ROC曲線是由靈敏度(真陽性)為縱坐標,特異性(假陽性)為橫坐標繪制的曲線,能夠反映不同分類算法的性能。ROC曲線越靠近左上角,表明準確度越高。ROC曲線下的面積稱為AUC,也是衡量算法優(yōu)劣的性能指標,AUC值越大,算法效果越好[15]。
利用隨機森林算法,對21個特征與是否患心臟病進行相關性分析,得到輸入特征的重要性,如圖6所示。圖6橫坐標為21個特征屬性,其中,0:age,1:sex,2:trestbps,3:chol,4:fbs,5:restecg,6:thalach,7:exang,8:oldpeak,9:ca,10:cp_0,11:cp_1,12:cp_2,13:cp_3,14:slope_0,15:slope_1,16:slope_2,17:thal_0,18:thal_1,19:thal_2,20:thal_3。實驗結(jié)果表明,thal_2對是否患心臟病影響最大,特征重要性最高。
圖6 隨機森林輸入特征重要性Fig.6 Random forest input feature importance
其中,特征6~9、10、19、20重要性排在前7位,這7個特征分別代表最高心率、運動是否誘發(fā)心絞痛、運動引起ST抑制、主要血管數(shù)、胸痛類型、地中海貧血,根據(jù)醫(yī)學常識這7個特征可作為主要判斷參數(shù),患者在就醫(yī)時通過體檢,獲得特征數(shù)值可作為醫(yī)生診斷重要參考。這幾個重要特征不僅能夠預測是否患有心臟病,同時也給醫(yī)生診斷和患者就醫(yī)帶來參考意見。
分別將其與Logistic回歸、GBDT、決策樹(DT)進行比較,驗證優(yōu)化后隨機森林(RF)算法是否具有更好的效果,通過對其幾種算法的準確率、召回率、AUC值進行對比,發(fā)現(xiàn)本研究提出的方法結(jié)果優(yōu)于其他算法,實驗結(jié)果如表4所示。
表4 不同算法結(jié)果比較Table 4 Comparison of results of different algorithms
從表4可以看出,隨機森林算法準確率為0.832,較Logistic回歸提高了0.3%、較GBDT提高了1%、較決策樹(DT)提高了10.8%;隨機森林算法召回率為0.834,較Logistic回歸提高了0.9%、較GBDT提高了1.9%、較決策樹(DT)提高了10.5%。為了更清晰的對比各個算法的性能,更好的展示AUC值,對各種分類算法進行ROC曲線比較[16](圖7)。從圖7可以看出,RF算法的ROC曲線下的面積是最大的,即AUC值最大,值為0.965。
圖7 不同分類算法的ROC曲線Fig.7 ROC curves of different classification algorithms
經(jīng)過實驗發(fā)現(xiàn),通過對隨機森林算法進行網(wǎng)格搜索優(yōu)化,算法的準確性得到了提升,泛化能力能到增強,不同的調(diào)參數(shù)值得到的結(jié)果不同。表明隨機森林算法在心臟病預測方面的有效性和可行性??梢愿鶕?jù)算法預測結(jié)果對醫(yī)生進行輔助診斷,給患者帶來就醫(yī)參考。對智慧醫(yī)療中疾病預測的進步有現(xiàn)實意義。
本研究在UCI開源心臟病數(shù)據(jù)集和克利夫蘭醫(yī)學中心數(shù)據(jù)集上進行實驗,針對精度較低的缺點,提出了基于網(wǎng)格搜索的優(yōu)化隨機森林算法的建模方法,用來預測心臟病。通過對數(shù)據(jù)集進行預處理,對特征進行分析,對超參數(shù)進行調(diào)整,用隨機森林算法對數(shù)據(jù)分類預測,獲得了較好的效果。為了驗證該算法的優(yōu)越性,將其與Logistic回歸、GBDT、決策樹(DT)等算法進行比較,在準確率、召回率、AUC值方面驗證該算法優(yōu)于其他機器學習算法。由于該數(shù)據(jù)集的數(shù)據(jù)量較小,無法證明該算法適用于大數(shù)據(jù)集,下一步對大數(shù)據(jù)集進行分類預測的情況下,需要進行特征選擇對算法進行優(yōu)化。