





摘要: 針對傳統機器學習算法在數據集Cleveland和Hungary上預測準確率低的問題, 提出一種基于Bayes超參數優化梯度提升樹的心臟病預測方法. 首先, 采用K-最近鄰算法對數據集中的缺失值進行填補, 用Min-Max標準化、 One-Hot編碼處理數據, 并基于梯度提升樹算法進行心臟病預測; 其次, 采用Bayes優化和十倍交叉驗證的方式搜尋算法的最佳超參數組合. 實驗結果表明, 優化后的梯度提升樹算法在心臟病數據集Cleveland上預測準確率可達90.2%, 在心臟病數據集Hungary上預測準確率可達81.4%, 優于決策樹、 支持向量機、 K-最近鄰等傳統機器學習方法, 可輔助醫生進行心臟病診斷.
關鍵詞: 心臟病預測; K-最近鄰算法; 梯度提升樹; Bayes優化
中圖分類號: TP181; TP301.6文獻標志碼: A文章編號: 1671-5489(2025)02-0472-07
Heart Disease Prediction Method Based on BayesianHyperparameter Optimization Gradient Boosting Trees
WANG Haiyan, JIAO Zengchen, ZHAO Jian, AN Tianbo, JU Yi
(Key Laboratory of Intelligent Rehabilitation and Accessibility for People with Disabilities of Ministry of Education,
College of Computer Science and Technology,Changchun University, Changchun 130022, China)
Abstract: Aiming atthe problem of low prediction accuracy of traditional machine learning algorithms on Cleveland and Hungary dataset, we proposed a heart disease prediction method based on Bayesian hyperparameter optimization gradient boosting trees. Firstly, the K-nearest neighbor algorithm was used to fill in the missing values in the dataset, Min-Max standardization and One-Hot encoding were usedto process the data, andthe gradient boosting tree algorithm was used to predict the heart disease. Secondly, Bayesian optimization and ten-fold cross validation were used to search for the best combination of hyperparameters of the algorithm. The experimental results show thatthe prediction accuracy of the optimized gradient boosting tree algorithm can reach 902% on the Cleveland heart disease dataset, and the prediction accuracy can reach 814% on the Hungarian heart disease dataset, outperformingtraditional machine learning methods such as decision tree, support vector machine and the K-nearest neighbor, itcan assist doctors in the diagnosis of heart disease.
Keywords: heart disease prediction; K-nearest neighbor algorithm; gradient boosting tree; Bayesian optimization
近年來, 心血管病(CVD)已成為危害我國居民健康的重大公共衛生問題[1].隨著人工智能的高速發展, 關于心臟病分類預測的研究也取得了一些進展. Comak等[2]使用最小二乘支持向量機(SVM)分類器代替人工神經網絡設計了一個對心臟病分類的決策支持系統. Parthiban等[3]對樸素Bayes方法診斷糖尿病患者的心臟病工作進行延伸, 提出了在SVM分類器中使用徑向基函數(RBF)核的方法. Weng等[4]將數據集分為訓練隊列和驗證隊列, 在訓練隊列中推導出CVD風險算法, 在驗證隊列中應用和測試算法證明, 結果表明機器學習顯著提高了心血管風險預測的準確率. 王巡等[5]提出了基于Hadoop的分布式C4.5決策樹算法, 使用MapReduce并行編程模式、 HDFS分布式文件存儲系統加快了C4.5算法的效率, 并應用于心臟病診斷中. 王健等[6]將一維的心臟病數據升維成類似圖像格式的三維數據, 使數據能適應卷積神經網絡, 通過對比卷積層數量對準確率和訓練時間的影響, 得到最優心臟病預測模型. 趙金超等[7]使用K-最近鄰方法(KNN)對數據進行預處理, 通過網格搜索的方法對隨機森林進行優化, 提出了KNN-RF模型, 該模型對心臟病進行預測的準確率達83.2%. 王成武等[8]利用網格搜索與交叉驗證相結合的方法對模型進行初步的優化, 在此基礎上使用粒子群優化算法對模型進行進一步優化, 優化后模型分類預測的結果得到明顯提升. 受上述工作的啟發, 本文提出一種Bayes優化梯度提升樹的方法, 并對數據集進行歸一化、 獨熱編碼處理, 實驗結果表明, 模型準確率得到進一步提升.
1 算法描述
1.1 梯度提升樹
梯度提升樹(GBDT)是Boosting策略的一種實現方式, 它通過一組分類器的串行迭代得到一個強學習器, 以進行更高精度的分類[9].無論是處理回歸問題還是二分類以及多分類問題, 梯度提升樹使用的決策樹(DT)都是分類回歸樹(CART), 計算流程如下.
1) 初始化學習器:
f(x)=argminc ∑Ni=1L(yi,c),(1)
其中f(x)為初始化過程的目標函數, ∑Ni=1L(yi,c)為損失函數, c為最小損失常數.
2) 計算殘差:
rmi=-L(yi,f(xi))f(xi)f(x)=fm-1(x),(2)
將rmi作為預測值, 當i=1,2,…,i時擬合得到第m棵回歸樹.
3) 遍歷節點, 計算回歸樹每個葉子節點Rmj的輸出值cmj:
cmj=argminc∑x∈RmjL(yi,fm-1(xi)+c).(3)
4) 更新學習器:
fm(x)=fm-1(x)+∑Jj=1cmjI(x),(4)
其中I表示學習率, J表示葉子節點個數.
5) 得到強分類器:
fM(x)=∑Mm=1∑Jj=1cmjI(x).(5)
1.2 Bayes優化
Bayes優化常應用于機器學習的超參數尋優中, 其原理是: 先通過Bayes定理估計目標函數的后驗分布, 再根據分布選擇下一個需要采樣的超參數組合, 然后利用之前的采樣結果完善目標函數, 最終找到全局最優超參數[10].
使用梯度提升樹進行心臟病預測時, 超參數的選擇會影響預測的準確性. 用Bayes優化方法優化梯度提升樹, 對訓練過程中梯度提升樹的迭代次數(n_estimators)、 學習率參數(learning_rate)、 弱分類器被允許的最大深度(max_depth)等超參數進行調參, 從而獲得最佳的超參數組合.
設X=X1,X2,…,Xn為一組超參數組合, 用f(x)表示關于超參數x的目標函數, Bayes優化通過找到x∈X, 使得
x*=argmaxx∈X f(x),(6)
其中x*為最優的參數集.
2 數據處理
本文選取UCI上公開的心臟病數據集Cleveland和Hungary, 這兩個數據集均由心臟病檢查患者的體質數據組成. 數據集Cleveland共有303個樣本, 其中陽性樣本164個, 陰性樣本139個, 每個樣本都有14個特征, 特征屬性有連續型和離散型兩種, 在所有樣本中, ca列有4個缺失值, thal列有2個缺失值. 數據集Hungary中slope,ca,thal列的缺失值過多, 因此采用刪除法將3列數據刪除, 處理后的數據集共有294個樣本, 其中陽性樣本106個, 陰性樣本188個, 每個樣本有11個特征. 心臟病數據集的特征信息列于表1.
表1 心臟病數據集特征信息
Table 1 Feature information of heart disease dataset
特征名稱特征描述特征類型
age年齡連續型
sex性別(1=男性, 0=女性)離散值
cp胸痛類型(1=典型心絞痛, 2=非典型性心絞痛, 3=非心絞痛, 4=無癥狀)離散值
trestbps靜息血壓連續型
chol膽固醇測量值連續型
fbs空腹血糖(1=真, 0=假)離散值
restecg靜息心電圖(0=正常, 1=患有ST-T波異常, 2=左心室肥大)離散值
thalach最大心率連續型
exang運動性心絞痛(1=有過, 0=沒有)離散值
oldpeak運動導致的相對于休息的ST抑制連續型
target是否患心臟病(0=否, 1=是)離散值
slope最高運動ST段的斜率(1=上坡, 2=平坦, 3=下坡)離散值
ca螢光顯色的主要血管數目(0~3)連續型
thal地中海貧血血液疾病(1=固定缺陷, 2=正常, 3=可逆缺陷)離散值
2.1 KNN缺失值處理
由于得到的數據集含有缺失值, 因此需對數據集進行KNN缺失值處理. 先將數據初始化, 再對缺失值的數據點做K-最近鄰填充, 計算含缺失值的數據點與其他不含缺失值數據點的距離矩陣, 選出歐氏距離最近的K個數據點, 歐氏距離公式為
D=(x2-x1)2+(y2-y1)2,(7)
其中D為鄰近點的距離. 用選中的K個近鄰數據點對應的字段均值填充數據中的空缺值[11].
2.2 Min-Max標準化
數據標準化處理是數據挖掘的一項基礎工作, 不同數據通常有不同的量綱和量綱單位, 這種情況會影響數據分析的結果, 為消除數據之間的量綱影響, 需進行數據標準化處理, 以解決數據之間的可比性.
通過對UCI心臟病數據集分析, 數據集中各特征屬性的尺度不同, 因此本文采用Min-Max標準化, 將數據壓縮為0~1內, 以提高模型分類的準確度. 標準化公式為
x′=x-xminxmax-xmin,(8)
其中xmin為該維度數據最小值, xmax為該維度數據最大值.
2.3 One-Hot編碼
One-Hot編碼又稱為獨熱編碼, 是一種將離散分類標簽轉換為二進制向量的方法. 其基本思想是使用N位狀態寄存器對N個狀態進行編碼, 每個狀態都由其獨立的寄存器位表示, 并且在任意時刻, 其中只有一位有效. 在UCI心臟病數據集中, cp,restecg,slope,thal等都屬于離散值, 為適應模型訓練, 將這些特征進行One-Hot編碼處理. 通過對各離散特征進行One-Hot編碼處理, 數據集由原來的14個特征變為27個特征, 處理后的數據集在預測準確度上得到提高. 例如, 對胸痛類型(cp)(0: 典型心絞痛, 1: 非典型心絞痛, 2: 非心絞痛, 3: 無癥狀)進行One-Hot編碼處理, 處理過程如圖1所示.
3 實驗及結果分析
3.1 評價標準
在進行心臟病預測時, 通常使用分類的準確率(Accuracy)、 精準率(Precision)和召回率(Recall)等指標評價分類器的性能. 其中: 準確率表示對給定的測試數據集, 分類器預測正確的樣本數與總樣本數之比; 精準率是預測正確的正例樣本占預測為正例樣本的比例; 召回率是預測為正例的樣本占實際為正例樣本的比例.
設P為正樣本數量, N為負樣本數量, 則準確率、 精確率和召回率計算公式分別為
Accuracy=TP+TNTP+FP+TN+FN,(9)
Precision=TPTP+FP,(10)
Recall=TPTP+FN.(11)
將上述評價指標綜合分析, 可評價算法的優劣. 這些評價指標都與混淆矩陣相關, 混淆矩陣列于表2.
表2 混淆矩陣
Table 2 Confusion matrix
患病狀態預測患病預測未患病
實際患病TPFN
實際未患病FPTN
為能更直觀地表征算法的預測準確率, 通常繪制ROC(receiver operating characteristic)曲線. ROC曲線基于混淆矩陣得出, 用于評價模型的預測能力, 其由真陽性率作為縱坐標、 假陽性率作為橫坐標繪制一條曲線. ROC曲線下的面積為AUC(area under curve), 是判斷二分類預測模型優劣的標準, AUC值越大, 表明模型越好.
3.2 實驗環境
實驗使用的硬件配置: CPU為i5-8300H, 內存為16 GB, 顯卡為NVIDIA GeForce GTX 1050 Ti. 在Windows10操作系統上, 基于Pycharm開發平臺, 使用Python語言, 安裝Sklearn,Pandas,Numpy等依賴庫作為實驗的軟件環境.
3.3 實驗過程
本文采用KNN-GBDT模型作為心臟病預測的方法, 實驗數據來自心臟病數據集Cleveland和Hungary, 由于兩個數據集的特征內容相同, 通過數據預處理后, 兩者對數據的表現形式一致, 因此, 為實驗能表現更好的泛化能力, 分別對兩個數據集的數據進行訓練預測, 并按7∶3分為訓練集和測試集進行建模. 為提高模型的預測準確率, 本文對數據集進行缺失值處理、 One-Hot編碼以及Min-Max標準化等一系列數據預處理操作, 得到無噪聲、 可用性高的數據. 對處理后的數據先采用十倍交叉驗證方法劃分訓練集和測試集, 再分別使用KNN-GBDT模型和4種傳統的機器學習算法對訓練集進行訓練, 對測試集進行測試, 以Accuracy,Precision,Recall和AUC作為評價標準對模型進行評估.
驗證本文模型在心臟病預測中的性能. 模型對比流程如圖2所示.
由于獲取公開的心臟病數據集Cleveland和Hungary中含有缺失值, 因此需先對數據集進行KNN缺失值填補, 填補后的數據集存在離散值特征, 而這些離散值特征可能會在梯度提升樹上形成稀疏節點, 影響整個模型的性能和效率, 因此需進一步選用One-Hot編碼處理填補后的離散值特征. 數據歸一化處理可以將連續型的特征值壓縮到0~1內, 以提高模型分類的準確率, 因此將處理后的數據集使用Min-Max標準化處理. 數據處理后, 不同的參數組合對梯度提升樹的預測結果有很大影響, 因此采用Bayes算法對梯度提升樹的迭代次數、 學習率、 決策樹的最大深度等參數進行優化, 在設置的參數范圍內經過多輪尋優求得一組最佳參數組合, 各參數設置范圍列于表3.
獲得一組最佳參數后, 將最佳參數組合代入梯度提升樹算法中, 分別在心臟病數據集Cleveland和Hungary上訓練預測, 用式(9)計算模型的準確率, 將KNN-GBDT模型和傳統的梯度提升樹算法做對比, 優化后的梯度提升樹模型相對于傳統的梯度提升樹算法在心臟病數據集Cleveland上準確率提高了9.9%, 在心臟病數據集Hungary上準確率提高了7.1%, 分類效果得到有效提高. 此外, KNN-GBDT模型相對于其他傳統機器學習算法在Recall和AUC評價指標上也有提高.
優化過程調用bayes_opt庫的bayes_opt.BayesianOptimization函數通過步長調整參數, 在設置的參數范圍內進行尋優, 采用十倍交叉驗證方法評估. 通過Bayes算法多次尋優, 訓練數據集Cleveland最優超參數組合為[n_estimators: 78, min_samples_split: 4, max_features: 0.14, max_depth: 5, min_samples_leaf: 7, learning_rate: 0.02, random_state: 44]時模型準確率最高, 訓練數據集Hungary時, 得到最優超參數組合為[n_estimators: 63, min_samples_split: 3.2, max_features: 0.10, max_depth: 6, min_samples_leaf: 4.6, learning_rate: 0.02, random_state: 25]時模型準確率最高.
DT,KNN,SVM,GBDT幾種常見的機器學習算法在分類預測中應用的較多, 為驗證KNN-GBDT模型的有效性, 在數據集Cleveland上將其與4種算法進行對比, 計算各算法的評價指標, 對比結果列于表4.
為進一步驗證KNN-GBDT模型的泛化能力, 在數據集Hungary上進行訓練, 訓練后的預測準確率有明顯提升, 對比結果列于表5. 由于心臟病數據集Hungary含有106個陽性樣本, 188個陰性樣本, 經過處理后每個樣本剩余11個特征, 數據集中陽性、 陰性類別的樣本數量差異較大, 因此, 處理后的特征未能很好地捕捉樣本之間的差異, 導致數據集的類別不平衡及特征表示不足, 進而導致KNN-GBDT模型的精準率略低于KNN算法. 綜合實驗結果表明, KNN-GBDT模型能進行心臟病的預測.
由表4和表5可見, 將KNN-GBDT模型與DT,KNN,SVM,GBDT幾種算法對比, 優化后的梯度提升樹在兩個數據集上都表現出高性能, 預測準確率得到提升, 在召回率、 精準率、 AUC各項評價指標上都優于其他傳統的機器學習算法. 圖3為在數據集Cleveland上各算法的ROC曲線.圖4為在數據集Hungary上各算法的ROC曲線. 其中FPR表示假陽性率, TPR表示真陽性率. 由圖3和圖4可見, KNN-GBDT模型的ROC曲線下的面積最大, AUC值分別為094,092, 證明模型的性能最佳, 充分說明了優化后的梯度提升樹算法可有效預測心臟病.
綜上所述, 本文采用UCI上的心臟病數據集Cleveland和Hungary進行實驗, 針對原有模型預測準確率低、 不穩定的問題, 提出了一種基于Bayes優化梯度提升樹的預測方法, 先用K-最近鄰算法進行缺失值填補、 Min-Max標準化、 One-Hot編碼對數據進行處理, 再結合Bayes優化和交叉驗證方法對模型的最優超參數組合進行尋優. 將本文模型在準確率、 召回率、 精準率和AUC上與傳統機器學習方法進行對比的實驗結果表明, 本文提出的KNN-GBDT模型在數據集Cleveland上準確率可達902%, AUC可達0.94; 在數據集Hungary上準確率可達81.4%, AUC可達0.92. 實驗結果驗證了優化算法可有效提高模型的分類能力, 可輔助醫生進行心臟病預測的診斷. 但在對數據集Hungary進行預測評估時, 本文模型在精準率上略低于KNN算法, 這可能是因為數據類別不平衡以及特征表示不足所致. 在后續的工作中, 會收集更多的樣本數據, 以提高模型的精準率并改善模型的性能.
參考文獻
[1]王增武, 胡盛壽. 《中國心血管健康與疾病報告2022》要點解讀[J].中國心血管雜志, 2023, 28
(4): 297-312. (WANG Z W, HU S S. Chinese Journal of Cardiovascular Health and D
isease Report 2022: Key Points Interpretation[J].Chinese Journal of Cardiovascular, 2023, 28(4): 297-312.)
[2]COMAK E, ARSLAN A, TURKOGLU I. A Decision Support System Based on Support V
ector Machines for Diagnosis of the Heart Valve Diseases[J].Computers in Biology and Medicine, 2007, 37(1): 21-27.
[3]PARTHIBAN G, RAJESH A, SRIVATSA S K. Diagnosing Vulnerability of Diabetic P
atients to Heart Diseases Using Support Vector Machines[J].International Journal of Computers and Applications, 2012, 48(2): 45-49.
[4]WENG S F, REPS J, KAI J, et al. Can Machine-Learnin
g Improve Cardiovascular Risk Prediction Using Routine Clinical Data?[J].PloS One, 2017, 12(4): 0174944-1-0174944-14.
[5]王巡, 杜方輝. 基于Hadoop的C4.5決策樹算法在心臟病診斷中的應用[J].信息技術與信息化, 2017(Z1): 36-40. (WANG X, DU F H. Application of C4.5 Decision Tree
Algorithm Based on Hadoop in Heart Disease Diagnosis[J].Information Technology and Information Technology, 2017(Z1): 36-40.)
[6]王健, 李孝虔. 一種基于特征組合和卷積神經網絡的心臟病預測新方法[J].黑龍江大學自然科學學報, 2019, 36(1): 115-120. (WANG J, LI X Q. A New Method of Heart
Disease Prediction Based on Feature Combination and Convolutional Neural Network[J]. Journal of Natural Science of Heilongjiang University, 2019, 36(1): 115-120.)
[7]趙金超, 李儀, 王冬, 等. 基于優化的隨機森林心臟病預測算法[J].青島科技大學學報(自然科學版), 2021, 42(2): 112-118. (
ZHAO J C, LI Y, WANG D, et al. Heart Disease Prediction Algorithm Based on Optimi
zed Random Forest[J].Journal of Qingdao University of Science and Technology (Natural Science Edition), 2021, 42(2): 112-118.)
[8]王成武, 郭志恒, 晏峻峰. 改進的支持向量機在心臟病預測中的研究[J].計算機技術與發展, 2022, 32(3): 175-179. (WANG C W, GUO Z H, YAN J F. Resear
ch on Improved Support Vector Machine in Heart Disease Prediction[J].Computer Technology and Development, 2022, 32(3): 175-179.)
[9]YANG T, CHEN W T, CAO G T. Automated Classification of Neonatal Amplitude-Int
egrated EEG Based on Gradient Boosting Method[J].Biomedical Signal Processing and Control, 2016, 28: 50-57.
[10]崔佳旭, 楊博. Bayes優化方法和應用綜述[J].軟件學報, 2018, 29(10): 3068-3090. (CUI J X, YANG B. Bayesian Optimization Algor
ithm and Application Review[J].Journal of Software, 2018, 29(10): 3068-3090.)
[11]HUANG J L, KEUNG J W, SARRO F, et al. Cross-Validation Based K Nearest Ne
ighbor Imputation for Software Quality Datasets: An Empirical Study[J].Journal of Systems and Software, 2017, 132: 226-252.
(責任編輯: 韓 嘯)