王成武,郭志恒,晏峻峰
(湖南中醫(yī)藥大學 信息科學與工程學院,湖南 長沙 410208)
心臟病是日常生活中一種比較常見的循環(huán)系統(tǒng)疾病。根據(jù)《中國心血管健康與疾病報告(2019)》,心血管病的死亡率在中國人群所有死亡原因中位居于榜首,農村居民心血管病占死因的45.91%,城市居民占43.56%[1],它不僅會給患者的生活質量帶來十分嚴重的影響,也給患者和國家?guī)砹朔敝氐慕?jīng)濟負擔。
如何及時地預測出潛在心臟病患者并對其進行相應的診療具有十分重要的意義,但是傳統(tǒng)的心臟病檢測技術存在著各種各樣的弊端,以至于心臟病的預測不能夠很好的進行[2]。目前,支持向量機(support vector machines,SVM)在疾病診斷上的應用已經(jīng)有了很多,例如吳辰文等人[3]提出一種改進的SVM算法應用在乳腺癌診斷方面,預測Random Forest模型下的基尼指數(shù)特征加權的支持向量機在乳腺癌診斷中的結果;張麗娜等人[4]提出一種基于支持向量機的急性出血性腦卒中早期預后模型的建立與評價,研究表明其效果優(yōu)于邏輯回歸,同時,肝病、紅斑鱗狀皮膚病及糖尿病等疾病[5-7]也都基于支持向量機建立了相應的疾病診斷模型,并且取得了非常好的實驗效果,充分地表明了支持向量機(SVM)模型在當今疾病診斷領域的應用具有廣闊的前景。
該文將利用SVM建立心臟病分類預測模型,并通過網(wǎng)格搜索對SVM的懲罰因子C和核參數(shù)g進行初步優(yōu)化,縮小參數(shù)尋優(yōu)范圍,再使用粒子群優(yōu)化算法PSO對SVM的懲罰因子C和核參數(shù)g進行優(yōu)化,得到最優(yōu)參數(shù)組合,從而提高SVM模型的分類準確率。
實驗中所選用的是UCI機器學習庫里面的心臟病數(shù)據(jù)集。該數(shù)據(jù)集是由美國克利夫蘭心臟病臨床基金會提供的,包含心臟病檢查患者的部分體質數(shù)據(jù),一共有303個樣本,其中陽性樣本的個數(shù)是164,陰性樣本的個數(shù)是139,數(shù)據(jù)集包含13個特征屬性和1個類屬性,分別是age(年齡)、sex(性別)、cp(胸痛類型)、trestbps(靜息血壓)、chol(血清膽汁)、fbs(空腹血糖)、restecg(靜息心電圖)、thalach(最大心率)、exang(運動性心絞痛)、oldpeak(運動引起的相對于休息的ST抑郁)、slope(最高運動ST段的斜率)、ca(螢光顯色的主要血管數(shù)目)、thal(一種稱為地中海貧血的血液疾病)、target(分類類別)。
1.2.1 支持向量機
支持向量機是Cortes和Vapnik在1995年提出來的,它是在統(tǒng)計學理論的VC維(Vapnic-Chervonenkis Dimension)和結構風險最小原理基礎上所提出的一種機器學習算法[8-10]。其最終目的是要在樣本空間中找到一個最優(yōu)的劃分超平面,該平面產(chǎn)生的分類效果的魯棒性和泛化能力是最優(yōu)的。支持向量機算法具有很多獨特的優(yōu)勢,在實驗過程中通??梢垣@得比其他分類器更好的效果,在應對線性不可分問題的時候,可以采用帶有諸如徑向基核函數(shù)的支持向量機,這樣可以擴大特征空間,從而解決非線性可分問題。
假設訓練樣本集D={(x1,y1),(x2,y2),…,(xn,yn)},其中yi∈{-1,+1}分別表示健康人群和心臟病患者。在d維空間中,劃分超平面對應模型可表示為:
f(x)=ωTφ(x)+b
(1)
式中,φ(x)表示將x映射后的特征空間,ω和b是模型的參數(shù)。由軟間隔最大化可得原始最優(yōu)分類問題為:
(2)
式中,ξi為松弛變量,C為懲罰因子。式(2)本身是一個凸二次規(guī)劃問題[11],引入拉格朗日函數(shù):
(3)
式中,αi,μi是拉格朗日乘子。
原始問題轉換為對應的對偶問題:
(4)
求解式(4)可得模型為:
(5)
SVM常用的核函數(shù)有以下幾種:
線性核函數(shù):
K(xi,xj)=xixj
(6)
多項式核函數(shù):
K(xi,xj)=(xixj+1)d
(7)
徑向基核函數(shù):
(8)
拉普拉斯核函數(shù):
(9)
Sigmoid核函數(shù):
K(xi,xj)=tanh[β(xixj-θ)]
(10)
該文選擇徑向基核函數(shù)(RBF)。
1.2.2 粒子群優(yōu)化算法
粒子群優(yōu)化算法(particle swarm optimization,PSO)是Eberhart和Kennedy于1995年推出,它是以鳥群捕食行為為來源而產(chǎn)生的[12-13],屬于一種進化算法。根據(jù)搜索過程中群體的消息共享進行更新,使得整個群體向著最優(yōu)解的方向移動。粒子群中的每個粒子都代表優(yōu)化問題所對應的一個可能的解,假設在d維空間中有一群粒子,粒子的位置表示為:
Xi=(Xi1,Xi2,…,XiD)
(11)
粒子的速度表示為:
Vi=(Vi1,Vi2,…,ViD)
(12)
粒子的位置和速度更新公式如下:
(14)
1.2.3 PSO-SVM模型
該文利用PSO算法對支持向量機的參數(shù)進行尋優(yōu),建立PSO-SVM算法模型,粒子群中的每個粒子由{C,g}組成,支持向量機參數(shù)選擇的適應度函數(shù)使用K折交叉驗證分類準確率。
基于PSO-SVM算法的心臟病預測步驟如下:
步驟1:初始化粒子群及參數(shù)。對粒子群規(guī)模m、局部搜索能力c1、全局搜索能力c2、最大進化數(shù)量k、慣性權重w、懲罰因子C的取值范圍,核參數(shù)g的取值范圍進行初始化;
步驟2:利用5折交叉驗證來計算訓練集分類準確率,以此作為當前種群中每個粒子的適應度值,得到最初的個體最優(yōu)適應度值、全局最優(yōu)適應度值和對應的參數(shù)(C,g);
步驟3:每一次迭代中,利用式(13)和式(14)更新粒子的位置和速度;
步驟4:使用適應度函數(shù)對粒子群中所有粒子的適應度值進行計算;
步驟5:將粒子的適應度函數(shù)值及其出現(xiàn)過的最優(yōu)適應度值進行比較,若更優(yōu),則更新個體最優(yōu)適應度值,以便于下一次迭代過程的比較;
步驟6:將粒子的適應度值和整個種群中出現(xiàn)過的最優(yōu)適應度函數(shù)值進行比較,若更優(yōu),則對全局最優(yōu)適應度值進行更新,以便于下一次迭代過程的比較;
步驟7:判斷是否達到終止條件,如果達到就終止迭代,否則回到步驟3;
步驟8:得到SVM模型的最優(yōu)參數(shù)組合(C,g),對心臟病測試數(shù)據(jù)集進行預測,計算心臟病分類準確率。
網(wǎng)格搜索[14-15]進行SVM參數(shù)尋優(yōu)是通過遍歷以懲罰因子C和核參數(shù)g組成的二維網(wǎng)格,并采用K折交叉驗證計算參數(shù)組合(C,g)下訓練集的分類準確率,找出二維網(wǎng)格中準確率最高的點,即為參數(shù)優(yōu)化的結果[16]。若參數(shù)所設定的取值范圍很大,足以包含參數(shù)尋優(yōu)的最優(yōu)解,并且網(wǎng)格遍歷的步長足夠小,這樣就能夠找到全局最優(yōu)參數(shù)組合,但是步長較小的話,對整個網(wǎng)格進行遍歷就會耗費很多的時間。因此,先采用網(wǎng)格搜索在較大的參數(shù)取值范圍內使用較大的步長進行粗略搜索,確定懲罰因子C和核參數(shù)g的大致范圍,然后使用粒子群優(yōu)化算法PSO在較小取值范圍內對參數(shù)組合進行進一步的精確搜索,得到最優(yōu)參數(shù)組合。
該心臟病預測模型的運行環(huán)境是Windows系統(tǒng)下的MATLAB R2020a平臺。抽取70%的心臟病數(shù)據(jù)集作為訓練集,剩下的30%作為測試集,根據(jù)測試集分類結果對模型進行評價。實驗一共包含兩個部分:實驗1,利用網(wǎng)格搜索與交叉驗證對SVM的懲罰因子C和核參數(shù)g進行優(yōu)化選擇,確定最優(yōu)參數(shù)的粗略范圍;實驗2,在實驗1的基礎上,利用PSO算法對支持向量機的參數(shù)C和g進行進一步的尋優(yōu),計算測試數(shù)據(jù)集的分類準確率。
數(shù)據(jù)集共有13個特征屬性,其中age,trestbpd,chol,thalach,oldpeak為數(shù)值型,sex,fbs,exang,target為二值型,cp,restecg,slope,ca,thal為多分類數(shù)值,例如胸痛類型包含四個值(0:典型心絞痛,1:非典型心絞痛,2:非心絞痛,3:無癥狀),使用one-hot編碼[17]對多分類數(shù)值進行處理,編碼過程如圖1所示。
為規(guī)避不同變量之間的量綱差異,提高支持向量機(SVM)模型的預測效果,將樣本數(shù)據(jù)集進行歸一化處理,歸一化公式為:
(15)
令ymin為0,ymax為1,使得最終的數(shù)據(jù)都落在 [0,1]區(qū)間內,得:
(16)
通過網(wǎng)格搜索與交叉驗證相結合的方法確定模型的參數(shù)C和g。具體步驟如下:
步驟1:設定懲罰因子C和核參數(shù)g的大致取值范圍分別是:C∈[2-10,210],g∈[2-10,210],步長設置為2,對C值為橫坐標、g值為縱坐標的二維網(wǎng)格進行搜索;
步驟2:一個坐標點代表參數(shù)(C,g)的取值,利用5折交叉驗證計算訓練集的分類準確率,記錄該準確率的值以及對應的參數(shù)取值,不斷重復此步驟,直至遍歷完整個網(wǎng)格;
步驟3:將分類準確率最高的點對應的參數(shù)(C,g)作為最優(yōu)參數(shù)取值。
經(jīng)過對二維網(wǎng)格的初步搜索,由圖2可知,5折交叉驗證最佳分類準確率CVAccuracy為87.559 8%,其對應的最佳參數(shù)組合(C,g)分別為C=4,g=0.25。
通過網(wǎng)格搜索進行參數(shù)的初步尋優(yōu)后,將參數(shù)的取值范圍縮小,在本次實驗中,PSO優(yōu)化算法的參數(shù)設置為:粒子群數(shù)量N=20,慣性權重ω=0.7,參數(shù)局部搜索因子c1=1.49,參數(shù)全局搜索因子c2=1.49,最大迭代次數(shù)Kmax=100,懲罰因子C∈[0.1,30],核函數(shù)參數(shù)g∈[0.1,30]。利用5折交叉驗證計算心臟病訓練集分類準確率的平均值,并記錄與此對應的參數(shù)組合(C,g),根據(jù)最終的分類結果選出模型最優(yōu)的參數(shù)組合。
優(yōu)化結果如圖3所示。
由圖3可知,隨著迭代次數(shù)的增加,群體中最佳個體適應度(即分類準確率)增加至89%左右,并基本保持不變,其對應的最優(yōu)參數(shù)組合(C,g)分別為C=0.771 15,g=0.1。
模型的評估指標有很多,由于該文是關于疾病分類預測的研究,所以選用準確率、靈敏度和特異度作為模型的評估指標,三個指標的計算公式如下:
(17)
(18)
(19)
其中,真正例TP為測試集中陽性樣本預測結果也是陽性的個數(shù);偽反例FN為測試集中陽性樣本預測為陰性的個數(shù);偽正例FP為測試集中陰性樣本預測為陽性的個數(shù);真反例TN為測試集中陰性樣本預測結果也是陰性的個數(shù);Acc為測試集的分類準確率;Sen為靈敏度,代表識別真陽性的能力;Spec為特異度,代表排除真陰性的能力。對比經(jīng)過網(wǎng)格參數(shù)尋優(yōu)、粒子群優(yōu)化算法(PSO)尋優(yōu)后的SVM模型和原始SVM模型,原始模型隨機選取的參數(shù)為C=1,g=1,結果如表1所示。
表1 SVM分類模型結果對比 %
通過對最終實驗結果的比較可以看出,未經(jīng)優(yōu)化的模型的懲罰因子C和核參數(shù)g按照人為的經(jīng)驗進行設置,在測試集上的分類準確率為80.851 1%,經(jīng)網(wǎng)格搜索和交叉驗證相結合的方法對參數(shù)進行初步的優(yōu)化,得到最佳參數(shù)組合C=4,g=0.25,此時分類準確率提升到82.978 7%,在此基礎上,縮小參數(shù)優(yōu)化范圍,使用PSO對SVM參數(shù)再次進行優(yōu)化,得到的最佳參數(shù)組合為C=0.771 15,g=0.1,分類準確率進一步提升到84.042 6%,如圖4~圖6所示。
同時,靈敏度和特異度也得到提升,支持向量機模型在測試集上的靈敏度從89.090 9%提升到了92.727 3%,特異度也從69.230 8%提升到71.794 9%,可見經(jīng)優(yōu)化后模型的效果得到了提高。
K-最近鄰算法(KNN)、線性判別分析(LDA)和分類與回歸樹(CART)在分類預測中的應用較多,選用這三種常用的機器學習算法來構建心臟病分類預測模型,將其分類結果與經(jīng)過參數(shù)尋優(yōu)后支持向量機在測試集上預測的結果進行比較分析。結果如表2所示,CART分類準確率最差,KNN和線性判別分析的分類準確率和CART相比有所提高,分類準確率最高的為文中進行參數(shù)優(yōu)化后的支持向量機。
表2 優(yōu)化的SVM與其他分類模型結果對比 %
選取UCI機器學習庫中的心臟病數(shù)據(jù)集,建立了基于SVM的心臟病預測模型,可以為醫(yī)生在心臟病輔助診斷中提供一定的幫助。首先結合網(wǎng)格搜索與交叉驗證對模型的最優(yōu)參數(shù)組合進行初步尋優(yōu),接著縮小參數(shù)范圍,利用粒子群優(yōu)化算法進行參數(shù)尋優(yōu),確定模型的最優(yōu)懲罰因子C和核參數(shù)g。與基于傳統(tǒng)SVM建立的心臟病預測模型相比,參數(shù)優(yōu)化后的SVM的準確率、靈敏度和特異度都得到了提升,驗證了實驗的有效性。