1. 引言
1.1. 研究背景与研究意义
随着社会的发展、科技的进步以及经济水平不断提高,人民的生活更加便利,但是也出现了雾霾、汽车尾气、地沟油等影响身体健康的危害。而且人民的生活节奏越来越快,竞争越来越激烈,教育、就业、医疗、住房等各方面的压力,使现代人抵抗疾病的能力变弱,不断出现各种各样的身体问题,容易遭受疾病的侵蚀。
心脏病是一种较为常见的心血管疾病,主要分为风湿性心脏病、先天性心脏病、冠心病等。此类疾病在临床上不具有传染性,属于慢性疾病,但是致死率较高,传统的医疗决策方法难以准确分析和诊断。大量临床检查、治疗报告和电子病历数据的产生,为信息技术介入医疗诊断和辅助医疗病理决策提供了数据依据。通过对大量的医学数据进行有效地提取与加工,机器学习算法可以为疾病作出正确的诊断、预测疾病的概率或患者病例,结合相关领域的专家知识和平衡潜在的数据处理分析,以求达到更好的疾病诊断结果,提高疾病预防、诊断和研究现状。
本文将机器学习和疾病预测有效地融合在一起,利用心脏病患者的真实数据来建立心脏病的预测模型。同时,根据模型对各体测指标进行评估,选择出较优的模型,不但可以提高预测的准确率,还有助于患者及早发现并采取相关措施进行有效治疗、早日康复,在疾病预测方面也具有一定的应用价值。
1.2. 国内外研究现状
机器学习是指利用计算机不断学习类似人类的技能以提高其处理涉及数学、概率、统计和其他学科问题的能力的过程。主要用于处理分类和回归两类问题,其中,分类算法是通过在现有数据集中寻找分类规则并建立预测模型来预测新数据,使用较为广泛的方法有逻辑回归、朴素贝叶斯、决策树和随机森林算法。
为了提高心脏病预测的检测水平,诸多学者提出了多种理论与技术手段。Kukar M [1]等人通过分析心电信号来诊断和预测缺铁性心脏病,使用决策树、K近邻算法对数据进行分析,以ROC曲线为指标来评估预测模型的有效性,结果发现模型具有良好的解释性。Subbalakshmi G [2]等人建立了支持决策的心脏病预测系统(DSHDPS),该系统使用贝叶斯分类器作为内核函数,通过使用年龄、性别、血压等指标数据来预测患心脏病的可能性。Dimopoulos A C [3]等人将传统心血管疾病评分系统与决策树、随机森林和K近邻算法通过已建立的风险评估工具进行对比分析,发现这些机器算法的表现都较为优秀,机器学习可作为风险预测研究方法。
刘宇,乔木[4]将聚类与XGBOOST算法相结合,通过K-means算法对数据进行特征区分并利用XGBOOST算法对心脏病进行预测分析。周孟然等[5]利用自适应人工蜂群算法对ELM算法隐含层的权值与偏置值进行优化,通过对最优特征子集的训练提升了ELM算法在心脏病辅助诊断中的表现。叶苏婷等[6]利用决策树算法构建了心脏病数据集预警模型并编写了用户程序界面。陈茜茜[7]通过建立BP神经网络、支持向量机、决策树等方法对是否患有心血管疾病进行预测,得到各个模型的混淆矩阵和ROC曲线图,并根据相关指标对模型进行评估,最终选择AUC值来选择BP神经网络作为最佳模型,为医生提供决策参考。
1.3. 研究思路
由于K近邻能够识别局部数据特征,简单直观,并在处理非线性数据上表现良好;决策树和逻辑回归提供出色的可解释性,便于理解模型决策规则,这在医疗领域尤为重要;而随机森林通过集成多个决策树,提高了准确性和鲁棒性,有助于避免过拟合,在复杂预测任务中表现出色。因此,这四种方法是机器学习中常用的分类算法。
本文的主要研究内容是基于机器学习对心脏病数据进行建模,利用R语言使用K近邻、决策树、随机森林、逻辑回归4种不同的分类算法对Kaggle心脏病数据集中的1025条真实心脏病数据进行分析研究;通过比较不同分类器在混淆矩阵、准确率、召回率、精确率、ROC曲线和AUC值一系列的指标性能,选择最优的心脏病预测模型;最后结合现阶段我国心脏病患病情况,提出相应对策来减少心脏病的患病率。
2. 理论方法
由于本文主要对是否患有心脏病进行预测,这是一个典型的二分类问题,因此下面介绍本文将用到的K近邻、决策树、随机森林和逻辑回归的算法理论。
2.1. K近邻
K近邻(K-Nearest Neighbor)是目前机器学习方法中最为简单的算法之一,是在1967年由Cover和Hart提出来的一种理论技术[8],在理论上是一种重要且十分成熟的方法之一。KNN分类算法的原理简单直观:如果一个未知样本点在特征空间中,计算与其相邻最近的前K个已知样本点,统计这K个已知样本点在哪一个类别的个数最多,就可以将未知样本点归属到该类别中。图1是KNN分类原理的直观示意图。
Figure 1. KNN classification diagram
图1. KNN分类示意图
在图1中,有
、
、
三种不同类别的样本,
是待测样本,分别计算该待测样本点与其他三类样本点之间的距离,然后对这些计算好的距离按照升序进行排列,选择前K个距离最近的已知样本点,并统计这三种类别各自占的比重,将
划分到比重最大的类别中。K近邻分类技术的前提条件是,对于不同类别的样本,其类别是事先知道的,按照计算距离的长短来分类待测样本。
选择合适并且实用的相似度函数是K近邻分类算法最为关键的技术,以下是几种常见的KNN分类算法的相似度函数:
1) 欧氏距离
欧氏距离是K近邻算法中最基础、最普遍的函数之一,本文也是选择欧氏距离作为相似度函数。其表达式如下:
其中
为待测样本的数据量,
是已知样本的数据量,L是提取的特征维数。
2) 曼哈顿距离
曼哈顿(Manhattan)距离也是计算空间任意两个点之间的距离,对于一个L维空间,两点之间的距离公式为:
3) 夹角余弦函数
通过计算样本空间中的任意点和待测样本点之间的夹角的余弦值,来评判两个点之间的相似度。该值越大,则说明已知样本和待测样本越相近。计算公式如下:
2.2. 决策树
决策树是一种可应用于分类与回归的方法,是一种典型的非参数的有监督学习方法。外观类似于树,每一个叶片的结点都是一个类别,不是叶片的结点则对应着某一属性上的划分,将样本按照这种特性的不同取值划分为几个子集。其基本原则是通过递归切割找到最佳分类依据,并形成规则。决策树是一种基于最小化损失函数的原则,通过对数据进行训练,构造出一种树模型,决策树的学习主要由特征选择、决策树的生成和决策树的剪枝三部分组成:
1) 特征选择
由于决策树可能存在过拟合的情况,因此必须对其剪枝处理,实现简化结构并提高泛化能力。如果在初始阶段存在大量特征属性,可以在学习初期进行特征筛选,仅保留能够充分识别训练数据的特征。
①信息增益
信息增益代表了由于引入特征X的信息而降低类别Y的信息不确定性的程度。模型的信息增益越大,分类识别性能越好,所以计算训练集中各特征的信息增益,选择使信息增益最大的指标特征。对于训练数据集D和特征A:
a 计算经验熵H (D)
b 计算经验条件熵H (D|A)
c 计算信息增益g (D, A)
其中
代表样本的个数,
为指定类Ck的样本个数。根据特征A的具体取值范围将训练数据集D划分成n个子集。Dik为子集Di中属于类Ck的样本的集合。
②信息增益率
信息增益准则倾向于选择取值数目更多的特征,信息增益率可以降低这种偏好所带来的不良影响,这是用于特征选择的另一标准。训练数据集D中,特征A的信息增益率gR (D, A)的计算公式如下:
③基尼指数
a 基尼指数Gini (D)
b 基尼指数Gini (D, A)
根据特征A是否会取某一可能值a,集合D被分成D1和D2两部分,则在特征A的条件下,集合D的基尼指数表示为:
基尼指数Gini (D)可以表示集合D的不确定性,而基尼指数Gini (D, A)表示通过A = a划分后集合D的不确定性程度。基尼指数的值越小,代表样本的不确定程度越低,即集合的纯度越高;反之,集合越不纯。
2) 决策树的生成
决策树的生成主要有ID3算法、C4.5算法和CART算法。ID3算法以信息增益为选择标准,来确定决策树上各级节点应该对应哪个属性最合适,但是不能自动分箱,不能剪枝,容易过拟合。C4.5算法依靠信息增益率作为选择节点属性的准则,克服了ID3的不足,ID3只能处理离散型变量,而C4.5不仅能处理离散型变量,还能处理连续型变量,且C4.5可以剪枝。CART算法以基尼指数最小为原则来构造二叉树,通过控制树的结构来控制模型,当终节点是连续变量时为回归树,当终节点是分类变量时为分类树。
3) 决策树的剪枝
通过递归生成决策树,直至无法再生成树为止,这样可以对训练数据进行较为准确的分类,但是在测试集上的效果可能不太友好,也就是可能会发生过拟合。其主要问题在于学习过程过于提升对训练数据的拟合效果,从而导致学习能力很强但是学得过于精细了。
剪枝指的是通过极小化决策树的损失函数来简化决策树,并且通过采用正则化的极大似然估计来选取模型。其中损失函数为模型拟合程度和模型复杂度之和:
其中
为树T的叶子节点数,代表模型的复杂度,t是树T的叶节点,该节点有Nt个样本,其中k类的样本有Ntk个,
。C(T)代表模型对训练数据进行预测而产生的误差,即模型与训练数据之间的拟合程度。参数
。
剪枝实际上就是在
的取值一定时,通过选取损失函数最小的树来对模型进行简化。且模型的子树越大,模型与训练数据拟合效果越好,但是模型会越复杂;反之,子树越小,模型的复杂程度越低,但是模型与训练数据的拟合效果越不好。
2.3. 随机森林
随机森林算法(Random Forest)是加州大学的Breiman Leo和Adele Cutler在2001年研究论文中提出的机器学习算法,它可以用于分类、聚类和回归的研究。通过自助法重采样技术,从原始训练样本集N中不断有放回地、重复随机地抽取k个样本,以生成新的训练样本集合。在此基础上,利用自助样本集产生k个分类树,新数据的分类结果是根据分类树上的票数来决定的。
随机森林本质上是一种改进的决策树算法,它包含多棵决策树并将它们结合起来,每棵树都是建立在一个独立的样本上,且分布相同,其误差依赖于每棵树的分类性能以及树与树之间的相互关系。因此克服了决策树容易过拟合的问题,减小了预测方差,使预测值不会因训练数据的微小波动而剧烈变化。
随机森林中的每棵分类树均为二叉树,依据由上自下的递归分裂原理,由根节点开始逐一对训练集进行分割。在二叉树中,将所有训练数据都集中在根节点上,根据节点纯度最低的原则,将它们分为左右节点,分别包含了一个训练数据的子集。节点按照相同的规则继续进行分裂,直至满足规则才停止继续细分。如果节点上的全部分类数据均来自于相同类,那么这个节点的不纯度I(n) = 0,在该方法中,不纯度根据Gini准则来度量。假定P(Xj)是节点n上属于Xj类样本个数占训练样本总数的频率,随机森林训练的具体实现过程如下:
1) 假定初始训练集为N,使用自助法随机、有放回地抽取出k个自助样本集,构建出k棵分类树,每次抽取没有被抽到的样本组成袋外数据;
2) 假设共有M个特征变量,在树的每个节点处从总体的M个特征变量中随机抽取m个特征(m < M),然后依据各节点不纯度最小准则在m个特征中选择那个分类能力最好的特征继续进行分枝操作;
3) 每棵树任其最大限度地生长,不对它们做修剪处理,目的是使各节点的不纯度达到最小;
4) 生成的多棵树整体构成了随机森林,便可以用形成的随机森林分类器对新的数据进行识别和归类。
2.4. 逻辑回归
逻辑回归(Logistic Regression)是一种线性回归分析模型,它可以用于只有两种分类结果的研究项目,也可以拓展为多类分类模型。其模型呈现对数关系形式,也就是说其输入和输出的对数函数符合线性关系,它们满足如下关系:
这是二项逻辑回归模型的广义线性模型,但是其结果往往不能直观的表现事件发生的情况,由于Sigmoid函数曲线的因变量取值处于0到1的范围内,通过函数值的大小描述事件发生的情况,可以使结果更加直观化。其函数图像如图2所示。
Figure 2. Sigmoid function image
图2. Sigmoid函数图像
3. 数据来源及预处理
3.1. 数据来源及变量说明
本数据来源于Kaggle的开源心脏病例的真实数据集,样本数据共1025条,包含13个影响因素指标和1个患病标签量target,数据变量说明如表1所示。
Table 1. Data variable explanation table
表1. 数据变量说明表
变量 |
含义 |
类型 |
备注 |
age |
年龄 |
数值 |
[29, 77] |
sex |
性别 |
定性 |
1 = 男性;0 = 女性 |
cp |
胸部疼痛类型 |
定性 |
1 = 典型心绞痛;2 = 非典型心绞痛; |
trestbps |
静息血压值 |
数值 |
3 = 非心绞痛;0 = 无症状 |
chol |
胆固醇测量值 |
数值 |
[94, 200] |
fbs |
空腹高血糖 |
定性 |
[126, 564] |
restecg |
静息心电图结果 |
定性 |
1 = 是;0 = 否 |
thalach |
最大心率 |
数值 |
1 = 异常;2 = 左心室肥厚;0 = 正常 |
exang |
运动是否诱发心绞痛 |
定性 |
[71, 202] |
oldpeak |
运动ST压值 |
数值 |
1 = 是;0 = 否 |
slope |
运动ST峰值坡度 |
定性 |
[0, 6.2] |
ca |
主血管数量 |
数值 |
1 = 上升;2 = 平坦;0 = 下降 |
thal |
地中海贫血症 |
定性 |
[0, 3] |
target |
是否患心脏病 |
定性 |
1 = 固定缺陷;2 = 可逆缺陷;0 = 正常 |
3.2. 数据标准化
通过对数据进行一定比例的缩放,把所有数据都变换为某一特定的区间,这样可以去除数据的量纲,就可以比较和衡量不同单位的指标数据。我们采用均值方差标准化,这样处理后的数据将符合标准正态分布,具体转化函数如下:
其中
为数据的均值,
为其标准差。本文的数据标准化在数据划分之后,这样就确保了测试集不包含训练集的信息。
4. 描述性分析
4.1. 数据完整性
本文所用数据来自Kaggle竞赛心脏病疾病预测数据集,其中包含1025个观测,14个特征,具体特征说明见3.1节说明。经过分析发现所有变量均无缺失值。
4.2. 性别与患病的关系
其中,患心脏病的人数为526人,未患心脏病的人数为499人。从该比例上看,患病和未患病的人数差不多。此外,从性别角度来看,男性患心脏病人数为713人,女性为312人,由此看出男性患病率大于女性。接着对男性、女性不同性别下患病与未患病人数做组合条形图,见图3。对比可得出初步结论:女性患心脏病概率要大于男性患心脏病概率。
Figure 3. The relationship between gender and illness
图3. 性别与患病的关系
4.3. 年龄与患病的关系
一般来说,心脏病发病率与患者的年龄有很大关系,因而在对性别与患病率分析完后,着手对患者的年龄与发病率进行分析。本文里的年龄变量为连续型变量,在将其离散化后分为四个不同的年龄阶段,即:儿童、青年、中年、老年。图4展示了这四个不同的年龄阶层的人群心脏病的发病率。
Figure 4. The relationship between age and illness
图4. 年龄与患病的关系
4.4. 胸痛级别与患病的关系
胸口疼可能与心脏病有关,如冠心病患者急性心肌缺血诱发了心绞痛或者急性心肌梗死的情况下,就会有胸口疼痛的症状。因而先初步通过胸痛级别与患病人群的相关分析,由图5得知未患病的人主要是0类疼痛,但是患者主要是1~3类疼痛。说明疼痛的级别确实跟心脏病是有一定联系的。
Figure 5. The relationship between chest pain level and illness
图5. 胸痛级别与患病的关系
5. 模型建立与评估
5.1. 划分训练集和测试集
本文采用K近邻、决策树等机器学习算法,故而在对数据进行预测之前,需对数据进行训练集和测试集的划分,训练集与测试集的比例为4:1。我们使用训练集来训练模型,然后用测试集上的误差作为最终模型的泛化误差,我们只需让训练好的模型在测试集上的误差最小即可。
从全部数据中按比例随机抽取80%的数据作为训练集,剩下20%的数据作为测试集。在全部数据集、训练集和测试集上因变量的水平比例都稳定在0.485左右,说明该随机抽样具有一定的代表性,以此划分训练集和测试集不会带来明显的误差。
5.2. 评估指标
1) 混淆矩阵
主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是用来评判预测结果的,在二分类任务中,样本的类别只有Positive和Negative两类。所以预测类别与真实类别有四种情况:
① TP:True Positive,表示预测结果为阳性,且实际类别也是阳性,即预测类别与实际类别一致,简称真阳;
② FP:False Positive,表示预测结果为阳性,但是实际类别为阴性,即预测类别与实际类别不同,简称假阳;
③ TN:True Negative,表示预测结果为阴性,且实际类别也是阴性,即预测结果与实际类别一致,简称真阴;
④ FN:False Negative,表示预测结果为阴性,但是实际类别为阳性,即预测结果与实际类别不同,简称假阴。
2) 准确率(accuracy)
准确率是统计所有预测结果中,有多少是预测对的,即将实际类别为阳性的预测为阳性(TP)和将实际类别为阴性的预测为阴性(TN)。所有待预测的样本为TP + FP + TN + FN,故有:
3) 精确率(precision)
精确率是统计所有预测结果为阳性的里面,有多少是对的,即有多少是真阳。所有预测结果为阳性的为TP + FP。则有:
4) 召回率(recall)
召回率是统计所有实际类别为阳性的里面,有多少预测对了。召回率与后面的TPR (真阳性率、命中率)的定义是一样的。预测对的即TP;实际类别为阳性,在预测的时候,可能会预测为阳性,也可能会预测为阴性,即为TP + FN。则有:
5) ROC曲线、AUC
ROC是Receiver Operating Characteristic Curve的简称,中文名为受试者工作特征曲线。该曲线的横坐标为假阳性率FPR (False Positive Ratio),也就是疾病的误诊率,纵坐标是真阳性率TPR (True Positive Ratio),也就是疾病的命中率。将点(FPR, TPR)画出来,就得到了ROC曲线。
虽然可以通过观察ROC曲线来评估分类模型的好坏,但这样的效率较低且并不直观。因此就出现了AUC值,即ROC曲线下的面积,它可以直观地展现出模型分类的好坏效果。
5.3. 模型结果及评价
1) 混淆矩阵
各种方法的混淆矩阵如表2所示。经过分析可发现,K近邻方法的分类效果最好,错分案例数为0。
Table 2. Confusion matrix for each method
表2. 每种方法的混淆矩阵
方法 |
真实值 |
预测0 |
预测1 |
K近邻 |
0 |
100 |
0 |
1 |
0 |
105 |
决策树 |
0 |
84 |
16 |
1 |
14 |
91 |
随机森林 |
0 |
100 |
0 |
1 |
3 |
102 |
逻辑回归 |
0 |
80 |
20 |
1 |
16 |
89 |
2) 准确率、精确率、召回率和AUC值
根据5.2给出的计算公式,各种方法的准确率、精确率、召回率和AUC值的计算结果如表3所示。经过分析可发现,K近邻方法的各项指标都是最好的。
Table 3. Comparison of indicators for each method
表3. 每种方法的指标对比
方法 |
准确率 |
精确率 |
召回率 |
AUC值 |
K近邻 |
1.000 |
1.000 |
1.000 |
1.000 |
决策树 |
0.854 |
0.850 |
0.867 |
0.853 |
随机森林 |
0.985 |
1.000 |
0.971 |
0.986 |
逻辑回归 |
0.824 |
0.817 |
0.848 |
0.886 |
3) ROC曲线
本文进一步绘制了所用方法的ROC曲线,如图6所示。
综合对比不同方法的各种评估指标,可发现K近邻方法的预测效果最优,随机森林方法仅次于K近邻方法,相比之下,决策树和逻辑回归这两种方法的预测效果差强人意。
6. 总结与建议
本文利用Kaggle数据集的真实心脏病检测数据对心脏病预测模型进行研究,首先,对数据集进行预处理,查看数据发现无缺失值可直接使用;其次,将连续性变量年龄转换为离散型数据,为后续模型的建立奠定基础;再次,通过描述性分析来了解性别、年龄、胸部疼痛类型与因变量即是否患心脏病之间的关系;此外,由于因变量为取值为0或1的二分类变量,考虑使用K近邻、决策树、随机森林和逻辑
Figure 6. ROC curve for each method
图6. 每种方法的ROC曲线
回归这四种机器学习算法对真实心脏数据进行分类预测,通过混淆矩阵、准确率、精确率、召回率等各项评价指标综合对模型的分类预测效果进行评估,从中找出对于此心脏病数据集分类准确率相对较高的模型:K近邻和随机森林。
通过本文初步的描述性分析可知,年龄较大的人群患心脏病的概率较高,这与常识相符,老年人群很可能存在心血管疾病或其他并发症,罹患心脏病可能性较大,因此建议社区工作人员对该地区老人的身体状况多加关注,定期进行身体检查。此外,女性患心脏病概率也较大,这可能与其面临社会与家庭的压力有关,因此需加大对女性人群的福利照顾。最后,心脏病发病因素错综复杂,本文通过影响较大的14个变量对其进行预测,旨在为心脏病发病情况进行分析,找出其关联因素。
NOTES
*通讯作者。