譚靜儀,蔡燦,林愛華,董雪
(廣州新華學院健康學院,廣東 廣州 510520)
《中國心血管健康與疾病報告2020》預(yù)測我國心血管疾病現(xiàn)患人數(shù)3.30億,其中冠心病1139萬[1]。近年來心血管疾病占我國居民疾病死亡構(gòu)成的40%以上,且其患病率及死亡率仍處于上升階段[1-3]。因此,心血管疾病的預(yù)防也被視為一項重要的工作。而通過數(shù)據(jù)挖掘方式來分析及預(yù)測不同個體特征發(fā)生心血管疾病的風險,對預(yù)防心血管疾病起到至關(guān)重要的作用[4-6]。在數(shù)據(jù)挖掘方法中,支持向量機算法(support vector machine,SVM)是一種按監(jiān)督學習方式對數(shù)據(jù)進行二元分類的廣義線性分類器[7]。SVM 算法的基本思想是:找到集合邊緣上的若干數(shù)據(jù),用這些點找出一個最優(yōu)分割面(超平面),也就是能使支持向量和超平面最小距離的最大值,基本模型是定義在特征空間上的間隔最大的線性分類器[8-10]。SVM 算法是一種強大的分類和回歸方法,適用于進行模式識別、分類以及回歸分析,可用于處理文本分類、圖像檢測、人臉識別等問題[11-13],在醫(yī)學領(lǐng)域?qū)τ诩膊☆A(yù)測、臨床診斷、醫(yī)學影像識別、藥物開發(fā)、醫(yī)院信息系統(tǒng)等方面也有廣泛的應(yīng)用[14-17]。在SVM 算法的相關(guān)研究中,張峻銘等[18]建立了預(yù)測士兵是否適合成為精英士兵的SVM分類模型,其準確率接近90%,召回率達到100%。裴修侗等[19]提出一種利用優(yōu)化的SVM 算法對糖尿病診斷進行輔助建模的方法,平均精度達到78%以上。劉寧[20]使用SVM 算法診斷哮喘準確率為82%,AUC 為0.83?;诖?,本研究擬建立基于SVM 算法的冠心病分類預(yù)測模型,以期為預(yù)防心血管疾病提供幫助。
1.1 數(shù)據(jù)前處理 收集來自The National Health and Nutritional Examination Survey(NHANES)網(wǎng)站的數(shù)據(jù)集,共含783 個樣本數(shù)據(jù)。本數(shù)據(jù)特征較多,為便于后續(xù)數(shù)據(jù)清洗過程中的特征提取、特征選擇等工作,經(jīng)專家咨詢,剔除多余特征。
1.2 數(shù)據(jù)可視化分析 在Python 中使用heatmap 函數(shù)繪制特征相關(guān)關(guān)系的熱力圖,利用Pandas 和Matplotlib 庫函數(shù)繪制冠心?。–AD)總體分布的條形圖、按年齡分布的條形圖和不同年齡段冠心病患病的餅圖。
1.3 使用SVM 算法構(gòu)建預(yù)測模型 首先采用get_dummies()編碼方式處理非連續(xù)性分類數(shù)據(jù),將原數(shù)據(jù)中經(jīng)過獨熱編碼的列刪除,并拆分數(shù)據(jù)集和目標集合;然后按照0.75 和0.25 的比例拆分訓練集(587 例),測試集(196 例);由于數(shù)據(jù)集合的不同特征之間數(shù)據(jù)相差大,對于SVM 算法會產(chǎn)生權(quán)重影響,因此做歸一化處理數(shù)據(jù);接下來使用默認參數(shù)建立SVM 模型;參數(shù)kernel='rbf',即選擇高斯核。最后使用網(wǎng)格搜索尋找更好的模型參數(shù),使用精確率、召回率、準確率、F1-score、混淆矩陣、ROC 曲線及AUC 面積7 方面性能評價指標來評判模型預(yù)測效果。其中,混淆矩陣是按類別顯示預(yù)測結(jié)果與真實結(jié)果,包括了真陽性、真陰性、假陽性和假陰性數(shù)據(jù)頻數(shù)的矩陣;ROC 曲線是以假陽性率為橫坐標、真陽性率為縱坐標的曲線;ROC 曲線下面積大小為AUC值;精確率(precision)表示預(yù)測為正例的數(shù)據(jù)中實際為正例的比例;召回率(recall)表示實際為正例的數(shù)據(jù)中被預(yù)測為正例的比例;F1-score 是精確率和召回率的調(diào)和平均;準確度(accuracy)表示所有數(shù)據(jù)中被正確預(yù)測的比例。
2.1 樣本數(shù)據(jù)特征描述 本數(shù)據(jù)共包含783 個樣本數(shù)據(jù),其中21 個與冠狀動脈粥樣硬化性心臟病有關(guān)的主要特征含義見表1。
表1 冠心病樣本數(shù)據(jù)
2.2 特征相關(guān)性分析 特征相關(guān)關(guān)系的熱力圖顯示,冠心?。–AD)和心衰(CHF)有中等強度的相關(guān)性(r=0.48),腦卒中(stroke)和冠心病有一定的正相關(guān)性,運動量(YDL)和冠心病、心衰、糖尿病、腦卒中均呈一定的負相關(guān)性。此外,蛋白質(zhì)、脂肪、熱量的攝入之間存在強相關(guān),總膽固醇和低密度脂蛋白膽固醇有中等強度的相關(guān),性別、年齡和熱量攝入之間存在弱相關(guān)。是否是運動員與冠心病患病情況沒有直接關(guān)系,見圖1。
圖1 特征相關(guān)關(guān)系熱力圖
2.3 樣本中冠心病患病情況 樣本中共含有118 例冠心病患者,見圖2A;考察冠心病患者的年齡分布,發(fā)現(xiàn)病例主要集中在50~100歲,見圖2B;不同年齡段心臟病患病比例餅圖顯示,年齡在75~100 歲老年人的患病率高于50~75 歲和25~50 歲的患病率,見圖2C。
2.4 SVM 算法構(gòu)建預(yù)測模型 本次用于冠心病預(yù)測的共783 個樣本數(shù)據(jù),計算量少,且為二分類問題,SVM 算法的計算復(fù)雜度和訓練集中的樣本數(shù)目成正比,計算復(fù)雜度低,足以支撐課題所需冠心病患者分類預(yù)測的運行。默認參數(shù)的SVM 模型,見圖3,訓練集分類準確率為85%,測試集分類準確率達84.6%,整體準確率為84.6%,并無過擬合。網(wǎng)格搜索優(yōu)化后,此SVM 模型分類準確率為99%,見表2;ROC 曲線靠近左上角,AUC 面積遠大于0.5,見圖4,認為模型整體分類效果優(yōu)秀。另外,此模型假陽數(shù)據(jù)僅有2例,假陰數(shù)據(jù)為0;模型對于冠心病數(shù)據(jù)與非冠心病數(shù)據(jù)的分類預(yù)測精確率、召回率均不低于90%,其中的冠心病數(shù)據(jù)精確率與的非冠心病數(shù)據(jù)召回率達到了100%,綜合來看冠心病數(shù)據(jù)的等權(quán)重F1-score 為97%,非冠心病數(shù)據(jù)的F1-score 為99%,此模型對于冠心病和非冠心病樣本數(shù)據(jù)的預(yù)測精確性高、覆蓋面廣。
圖3 SVM 模型混淆矩陣
表2 網(wǎng)格搜索優(yōu)化后SVM 模型分類指標文本報告
圖4 SVM 模型ROC 曲線
SVM 算法具有3 大優(yōu)點:①SVM 模型的分類效果好:算法復(fù)雜度由支持向量的個數(shù)決定,而不是由數(shù)據(jù)的維度決定的,因此可以“剔除”大量冗余樣本,不太容易出現(xiàn)過度擬合的問題[21];②擁有較高的分準率:因為訓練模型完全依賴于支持向量,所以縱使訓練數(shù)據(jù)集里所有的非支持向量的點都被刪除,重復(fù)訓練過程,仍會得到完全相同的模型[22];③能解決復(fù)雜度高的分類問題:SVM 算法利用核函數(shù)克服了維數(shù)災(zāi)難和非線性可分的問題,向高維空間映射時沒有增加計算的復(fù)雜度,可以解決非線性和高維的問題。
SVM 算法存在以下不足之處:①容易被泛化:當SVM 模型訓練得出的支持向量數(shù)量比較少時,訓練模型比較容易被泛化[23];②易敏感性:SVM 模型對參數(shù)的調(diào)節(jié)、核函數(shù)的選擇和缺失數(shù)據(jù)敏感敏感[24];③對大規(guī)模的訓練數(shù)據(jù)集不適用:由于SVM 算法需要借助二次規(guī)劃來求解支持向量,求解二次規(guī)劃將涉及樣本個數(shù)m 的m 階矩陣的計算,如m 數(shù)目很大,矩陣的計算和存儲則需要消耗大量的運算時間和機器內(nèi)存。
在本案例中,基于網(wǎng)格搜索優(yōu)化的SVM 算法的冠心病分類預(yù)測模型體現(xiàn)出了極其優(yōu)秀的分類效果,準確率達99%;對冠心病樣本的識別能力也很強,F(xiàn)1-score 為97%。本項目中SVM 算法效果良好的主要原因是,案例樣本數(shù)據(jù)質(zhì)量高,且對特征進行了篩選;但是,案例數(shù)據(jù)的樣本量較小、特征相對較多,對結(jié)果有負面影響。另外,本項目使用的數(shù)據(jù)集來自于美國,所以此模型用于國內(nèi)冠心病數(shù)據(jù)的分類預(yù)測時可能會準確率下降,如果能收集到我國冠心病領(lǐng)域公開的高質(zhì)量數(shù)據(jù)集,建立出的冠心病預(yù)測模型在國內(nèi)會更有實際意義。