1. 引言
传统心血管疾病的诊断主要依靠医生经验,并结合患者的各项生理检测数据,家族遗传病史,生活习惯,以及医学影像,最终形成诊断结果。但医生的资质和实践经历,以及患者所在地区的整体医疗水平都是形成最终诊断结果的不可控因素,且在一定程度上会出现误诊漏诊现象。随着医疗信息化的不断发展,医疗信息系统中存储了海量的患者病理信息,若对存储的病患数据进行分析,且在发病之前进行必要的预测和诊断,则可以显著降低发病率和死亡率。而机器学习算法在处理复杂且高度非线性的分类和预测问题中一直具有显著优势。不同的机器学习模型已广泛用于许多疾病分类和预测问题,例如在检测心血管疾病的早期症状时,利用机器学习算法分析患者的电子病历,通过记录患者的症状、身体特征、临床实验室测试值,从而进行生物统计分析,可以发现医生无法检测到的模式和相关性。同时机器学习算法也应用在糖尿病、帕金森氏症、高血压和埃博拉病毒等疾病的预测。
集成学习 [1] 是很多机器学习算法的构建基础,其实现方法是集成多个弱分类器的优势,达到以多弱敌一强的效果,进而提高模型的预测有效性和鲁棒性。目前,诸如随机森林、GBDT之类的集成学习被广泛使用。其中,XGBoost是GBDT的一种高效实现。与其他集成模型相比,通过引入正则项和列采样来提高模型的鲁棒性,并且当每棵树选择分割点时,采用并行化策略来提高模型的运行速度。此外,XGBoost只需要较少的训练时间,可以在一定程度上克服计算速度和准确性方面的局限,从而在预测模型的应用上适配性更高。当前,在库存预测和疾病预诊等几大领域,XGBoost算法已取得十分有效的成果,并且许多应用研究成果可以达到和专业人士相媲美的程度。
本研究以某医院真实心脏病患者数据为研究对象,提出一种基于SMOTE-ENN和XGBoost算法的预测模型,根据患者病理信息,预测其是否发生MACCE。此外,与其他四种常用模型(NB,LR,SVM和RF)进行对比研究,结果显示本文所提模型在预测效果方面具有显著优势。
2. 研究现状
近些年来,国内外的学者从不同的角度对心脏病预测进行了研究。总体来说,机器学习算法在心脏病诊断方面的研究,主要有两个切入点:1) 数据集的选取和处理;2) 算法的选择和优化。
从数据集选取角度,很多学者都直接采用了开源数据集,例如Nahato等和Dwivedi等 [2] [3] 都是以Statlog数据集为研究对象,进而建立不同的心脏病预测模型。Statlog数据集包含13个特征,总计270个样本数据,其中150个样本被标记未患病,120个样本标记患病,并且该数据集中不含有缺失值。Wiharto等和Krishnan等 [4] [5] 使用Cleveland数据集构造模型。其中收录患病程度由低到高四种不同类型的患者数据以及健康类型数据。原始数据集包含303个病患信息,以及76个特征,但大部分研究均使用其中14个特征子集,其输出值包括健康和其他四类心脏病类型。此外,Sellami等和Wang等 [6] [7] 对MIT-BIH数据集进行了研究,该数图1据集是第一个普遍用于评估心律失常检测的标准测试数据集,包括超过10万次心跳数据,总共有18种标签值,且由1种正常心律 + 17种非正常心律组成。
从算法选择角度,Saxena K等人 [8] 使用SVM,CMAR,贝叶斯分类器和C4.5算法,提出了一个有效框架,可以根据病人的健康情况来预测他们的风险因素,该框架经评估被认为能够准确的预测与冠状动脉疾病有关的风险水平;Beyene C等人 [9] 采用SVM,KNN,NB,ANN算法,并结合各种特征选择方法,实现了快速诊断,最大限度的降低了病人的等待时间,同时也降低了挽救病人的成本;Soni J等人 [10] 使用不同的目标属性和算法相结合来进行有效的心脏病预测,并对比了决策树,朴素贝叶斯,KNN,神经网络等算法在预测中的准确性,且在研究中发现决策树和贝叶斯分类在应用遗传算法减少实际数据大小以获得最佳子数据后,其准确性进一步提高;王凤利 [11] 使用在DS证据理论基础上的优化神经网络心脏病预测模型,其算法模型相较与普通的神经网络模型在预测方面更加有效,同时算法的鲁棒性也很好;蔡勋玮 [12] 提出了一种集成SVM和DS证据理论的有效模型,同时将该模型与逻辑回归和普通的SVM算法在心脏病预测方面的表现进行比较,实验结果表明该模型预测优势显著,并对于一些疾病早期信号较为敏感;李孝虔 [13] 使用特征工程,结合卷积神经网络提出了一种心脏病预测模型,该方法的预测准确度能够达到89.89%,对于心脏病的预测有一定的借鉴作用。
综上所述,大多数研究都采用了UCI开源的心脏病数据集,该数据集分布较为平衡,但实际的临床数据往往是不平衡的,本文采用真实的回访数据,通过Smote-Enn算法进行平衡处理,提高数据集质量,使得训练的模型也更加真实可靠。此外,本文使用XGBoost模型进行心脏病预测,其核心思想是“以弱敌强”,通过提升树来提高模型预测表现。
3. 模型构建方法
构建基于SMOTE-ENN和XGBoost算法的心脏病预测模型的实现过程包括数据预处理、模型构建、性能评估等过程,具体实现流程如图1所示。

Figure 1. Flow chart of the proposed model implementation
图1. 模型的实现流程
3.1. 数据集介绍
本文所采用的数据集来源于某医院病患真实心脏病回访数据(HDD)。该数据集包含4356条样本实例和69个特征维度。其中,MACCE是标签列,表示主要不良心脑血管事件,0表示不发生,1表示发生。
3.2. 数据预处理
3.2.1. 结合专家咨询剔除不适合做特征的列
① 医生认为非必要的特征(总计38个,如ID等)
② 医生认为相关的特征,根据建议保留其中1项(共剔除8个)
3.2.2. 含空值的特征处理
① 对于类型变量的处理,采取新加一类来表示空值。
② 对于数值变量的处理,以DMI特征维基准,该特征是医生建议纳入的度量特征中含空值项最多的特征,共缺失1082项。对于其余特征,若空值数大于1082,则直接剔除该特征(共9列),若空值数小于1082,则保留该特征,仅删除含空值的行。
由此,可以得到包括14个特征列和1个标签列(MACCE)在内总计3528条样本数据。数据集特征描述如表1所示。

Table 1. Characterization of the HDD dataset
表1. HDD数据集特征描述
3.3. 标准化处理
为了提高数据的适用性,本文采用公式(1)中的最大最小规范法 [14] 来降低在心脏病预测过程中的数值复杂性,从而提高模型的准确性。
(1)
即为进行归一化处理后的HDD数据集,其范围位于区间[0, 1],
为原始HDD数据集,
为最小数值,
为最大数值,
和
是变换后HDD数据集取值范围,通常
,
。
3.4. 相关性分析
特征之间的相关性会影响机器学习模型的性能。例如,在统计建模中,使用最小二乘法求解线性回归模型的充分必要条件是特征之间没有相关性,否则模型就会出现偏移,因此,需要先计算特征之间的皮尔逊相关系数(Pcc),进而确定两特征值之间的相关程度,然后再建模。皮尔逊相关系数的计算方式如公式(2)所示:
(2)
其中,
表示x的平均值,
表示y的平均值,
表示x和y之间的系数,其范围在[−1, 1]之间变化。
若
,则x和y完全正相关。
若
,则x和y之间的线性关系不明显。
若
,则x和y完全负相关。
值得注意的是,若两个特征根据Pcc证明彼此线性相关,则意味着可以忽略其中之一来优化数据集。如图2所示,在HDD数据集中计算出所有特征的Pcc都非常小(最大小于0.5),因此可以假定所选择的特征对MACCE的影响是相互独立的。

Figure 2. Correlation matrix of HDD data set
图2. HDD数据集相关性矩阵
3.5. 基于Smote-Enn算法的不平衡数据处理
本文对处理后HDD数据集的标签列的分布情况进行了统计。由下表2可知,该数据集的标签类别是极不平衡的,少数类与多数类比值达到了1:8,因此,需要对数据集进行平衡处理,使得每类的数据量基本一致。

Table 2. Predicted column distribution of HDD dataset
表2. HDD数据集预测列分布
通常采用欠采样,过采样和混合采样三种方法来解决机器学习中不平衡数据问题。图3列出了这三种数据平衡方法的示例。过采样方法通过主动生成占比小的一类的数据样本来平衡训练数据;欠采样则通过消除占比大的一类的数据样本来实现该目标;混合采样是在过采样处理的基础上采用欠采样来平衡数据。

Figure 3. Three methods of balancing data
图3. 处理不平衡数据的三种方法
本文采用SMOTE-ENN混合采样方法 [15] 来平衡HDD训练集。通常,SMOTE是对占比小的一类数据进行过采样,在处理异常数据集,即处理失衡状态的数据时,其通过结合扩充少样本和削减多样本的方式,使数据集最终获得易于算法应用处理的平衡状态,当数据集整体达到平衡时,算法停止,然后使用“最近邻”(ENN)消除两个类之间的重叠样本,与此同时保持平衡分布。在实际操作中,首先应用SMOTE技术从少数类样本中随机生成新样本来增加少数类别的数量。然后,使用ENN去除多余的重叠样本。在实施SMOTE-ENN之后,少数类的总数增加,并且HDD训练集的少数类的更新百分比也变得更加均衡,达到46.5%。表3为SMOTE-ENN的伪代码。

Table 3. Pseudocode for SMOTE-ENN
表3. SMOTE-ENN伪代码
3.6. XGBoost算法
集成学习是联合多个分类器的优势来提高模型的学习能力。目前,由Chen T等人 [16] 提出的XGBoost算法是集成度最高且最快的决策树算法。该算法的基础分类器利用CART构建,并且由多个相关的决策树共同决定,上一个决策树的训练和预测结果会成为下一个决策树的输入样本的影响因素。因此,XGBoost是一种高度灵活且用途广泛的工具,可以解决大多数回归和分类以及用户创建的目标函数。其模型结构如图4所示。
XGBoost通过执行目标函数的二阶泰勒展开式来提高计算速度和准确性。损失函数为:
(3)
t = 1, 2, 3表示决策树的数量,是样本量,
是目标函数值,
是第个样本的树的预测值,f是决策树的集合,
是第t颗树的叶子节点分数,
是用于规避训练模型复杂度的正则化函数,以避免过度拟合,C是常数项。
损失函数的二阶泰勒展开式为:
(4)
(5)
其中,
是第j棵树的权重,λ则是w_i的惩罚系数,而γ是叶子节点的惩罚系数,用于控制树的复杂性。
XGBoost的优势在于其创建树的可靠目标函数,同时,它提供了几个有效参数,包括树的最大深度T,树数(迭代数) l,惩罚系数λ,γ,以及学习率,最小权重值。本文将采用Parzen估计树(TPE)来优化XGBoost超参数空间。TPE优化算法具有良好的性能,并且可以自动调整参数,使得效果最优。
为了避免过拟合,XGBoost应用如下两种策略。缩减,表示算法完成一次学习所需时间的长短,在进行完一次迭代后,所有叶子节点都会乘以该系数,从而减少单颗树对最终结果产生的影响,为后面的树留出更多空间。列抽样,主要借鉴的了随机森林的做法,不仅能降低过拟合,还能减少计算。

Figure 4. Structure of XGBoost algorithm
图4. XGBoost模型结构
4. 实验设置与评估指标
本文对XGBoost超参数进行了设置,具体如表4所示。

Table 4. Parameter setting of XGBoost
表4. XGBoost参数设置
本文引入四种基线模型与所提方法进行对比,实验中采用5折交叉验证来分别评测各模型在不同评估指标的预测表现,具体实现流程如下图5所示。

Figure 5. Experimental evaluation process
图5. 实验评估流程
4.1. 基线算法
本文将XGboost模型与以下4种基线模型进行比较。
4.1.1. 随机森林
随机森林 [17] 是一种Bagging类型的算法,算法模型中包含了许多决策树,模型中的每棵决策树都随机的采样数据集中的小部分进行训练,每棵决策树的输出相似但并不相同,最后将每棵树的输出结果综合形成最佳结果。
对于给定数据集,
,响应数据集
,它重复了
到B上的Bagging。最终预测的样本集
是由每棵决策树对x数据集的预测结果
的平均数来决定的。
(6)
其中,预测不确定性是通过其标准差来实现的。
(7)
4.1.2. 支持向量机
支持向量机 [18] 在保证分类准确性的同时,还尽可能的加大类别之间的区别,使得类别更容易区分。支持向量机是一种线性分类器,即应该寻找到合适的参数来描述分类的直线,即超平面,超平面可以由以下线性方程来描述:
(8)
其中,w表示维度的系数向量,b表示偏移量。
最终的最优化问题是:
(9)
(10)
4.1.3. 朴素贝叶斯
朴素贝叶斯 [19] 是一种在贝叶斯定理基础上的分类算法。分类器中各个不同的特征可以独立的影响最终输出结果,且每个特征权重占比相同。每个数据实例D都被分配到后续概率最高的类别中。该模型是通过高斯函数训练的,其先验概率为
(11)
(12)
(13)
最后,根据关联的概率对测试数据进行分类
(14)
4.1.4. 逻辑回归
逻辑回归 [20] 是一种基于线性回归的分类算法,在二分类中的应用非常广泛。逻辑回归首先构建评估指标,在此基础上构建一个大致分布
,并使用平滑函数来减小极端值对于整体的影响,从而使整体分布更加集中。常见的函数有sigmoid函数,其公式如下:
(15)
通过交叉熵函数
(16)
作为评估目标,从而更新逻辑回归中的参数,使得到的分布更加准确。
4.2. 评估指标与实验结果
4.2.1. 混淆矩阵
混淆矩阵是一种可视化工具,用来分析每个模型在各个类别上的分类情况由四部分组成,即真阳性(TP),真阴性(TN),假阳性(FP)和假阴性(FN)。具体如图6所示。
其中,TP为正确预测患有心脏病的心脏病患者;TN为正确预测为健康的健康人;FP为健康人错误地预测患有心脏病;FN为心脏病患者被错误地预测为健康。
4.2.2. 评价指标
本文选用了如下4种性能指标对算法的预测有效性进行评测。
① ROC曲线下面积(AUC)
ROC曲线下面积(AUC):通过绘制真实正率(TRP)即敏感度或召回率与False Positive Rate的关系曲线创建AUC。
② 准确率(Accuracy)
准确率是评估样本预测正确的比例,即真实值和预测值相同时所占样本总数的比率。
(17)
③ F-Score
由于精确率和召回率这两个指标之间相互影响,且呈现出负相关关系。 分数就是将二者合并为一个指标, 的不同取值,代表了不同的偏重方向,在本文中, 值取2,表示衡量中更加看重Recall指标。
(18)
④ 召回率(Recall)
召回率(Recall),是指在所有真实为正类(TP + FN)中,被判定为正类(TP)所占的比例,即有样本中的正类被正确预测的比率。召回率越高,表示实际患有心脏病的患者预测出来的概率更高。
(20)
4.2.3. 实验结果
本节对比了RF,SVM,NB,LR和XGBoost模型获得的混淆矩阵和评估结果。实验中,上述机器学习模型在测试集上做出了705项测试。在实际的705条记录中,样本中有92条记录的MACCE为“发生(1)”,613条记录MACCE为“未发生(0)”。如表5所示,本文使用混淆矩阵来表示各类模型对MACCE的预测结果。

Table 5. Confusion matrix for different algorithms
表5. 不同算法的混淆矩阵
基于混淆矩阵,对各个机器学习算法在各评估指标上的评测如下。
从图7(a)中可以看出,在AUC指标上的表现,XGBoost算法最高,为86.32%,随机森林次之为83.28%,而支持向量机(SVM)最小,为76.85%。
准确率是评估机器学习算法性能的最重要指标。由图7(b)可知,XGBoost达到了87.23%的最高准确率。随机森林(RF)的准确度为84.96%。逻辑回归(LR)和支持向量机(SVM)获得了相同的最低的准确度,为82.27%。朴素贝叶斯(NB)为83.55%。准确率关注的是分类器预测的准不准的问题,但作为疾病预测更应关注的患者是否发生MACCE,分类器能不能检测出来。因此,本研究对各模型结果的召回率(Recall)进行了评测。由图7(c)可以看出,XGBoost在五个分类模型中的召回率最高,意味着真正发生MACCE能够评估出的概率为84.78%。随机森林和朴素贝叶斯的召回率分别为78.26%和77.17%,逻辑回归和支持向量机获得了相同的召回率,为75%。
本研究采用F2-Score进行评测,突出召回率在指标中的占比。如图7(d),XGBoost模型的F2-score最高为70.95%,随机森林次之,为68.44%,逻辑回归和朴素贝叶斯两模型的F2-Score相当,分别为65.22%和66.48%,支持向量机最终获得了62.84%。

Figure 7. Evaluation results of each classification algorithm under different indicators
图7. 各分类算法在不同指标下的评估结果
图8显示了有监督的机器学习算法在AUC,准确性,F2-Score,召回率方面的总体性能评估。从实验结果中可以看出,与所有其他机器学习算法相比,XGBoost模型在所有评估指标上均取得了更好的结果,而SVM表现最差。此外,在大多数评估结果中,LR和NB的性能相似。

Figure 8. Algorithm performance evaluation
图8. 算法性能评估
5. 结论与展望
在此项工作中,首先采用专家咨询进行数据预处理和特征选择,然后基于Smote-ENN算法处理失衡数据。最后使用随机森林、支持向量机、朴素贝叶斯、逻辑回归四种基线模型与XGBoost算法进行比较。实验结果表明本文所提模型在四种评测指标上的结果均表现良好,且预测准确率达到87.23%。本文仅采用专家建议进行特征提取,在后续工作中将采用自动化的特征提取方法,以发现一些潜在的重要特征,从而提高心脏病的预测效果。
基金项目
本文系教育部人文社会科学青年基金项目(项目编号:21YJCZH197)和山西省高等学校科技创新项目(项目编号:2020L0252)的研究成果之一。
NOTES
*通讯作者。