前言
Technology developed using artificial intelligence (AI) could identify people at high risk of a fatal heart attack at least 5 years before it strikes.
–the British Heart Foundation (BHF)
作为一位老年病医生的家属,我对于医学与科学技术的结合是较为敏感的。人工智能的兴起,让我有机会看到一些人工智能与医学结合的方案,例如美国 5 大顶尖医院的机器学习项目,包括了预测性分析、聊天机器人、预测性健康追踪器等等领域。这些新事物促成了我动手学习 AI 技术,希望将 AI 技术与医学知识结合在一起的想法。因此,有了这一系列文章。我希望能够针对医学的不同业务场景,结合 AI 技术训练出一些可用的模型,通过文章帮助医务人员了解 AI 技术,帮助他们了解如何使用公有云的计算资源和 AI 资源,训练自己的医学模型。开始今天的话题,谈谈我如何训练心脏病(冠心病)预测模型。
早在 2016 年,美国麻省总医院宣布与英伟达公司合作成立医疗数据科学中心,该中心希望成为人工智能医疗应用领域的中心,对疾病进行探测、诊断、治疗和管理。英伟达公司赠送了当时最新的 DGX-1(深度学习超级计算机),麻省总医院提供 100 亿张医学影像,用于放射学和病理学方面的训练,后续又逐渐扩大到电子病历和基因学领域。
本文我们主要介绍的是根据病例数据进行冠心病可能性的预测。心脏病是心脏疾病的总称,包括冠心病、风湿性心脏病、心肌炎、先天性心脏病、肺心病等多种类型。根据国家卫计委的统计数据,改革开放之后,心脏病发病率在中国一直呈现上升趋势,2013 年城市居民死亡原因心脏病位列第三,占比 21.45%。结合一些论文和期刊,我们知道人工智能技术已经可以通过信息处理、算法辅助灯方式,辅助医生进行心脏病的预测、辅助医生进行高难度的心脏手术。
2018 年,微软推出了一种由人工智能技术支持的冠心病风险评分模型,模型基于印度一家医院提供的 40 万印度人的健康数据,考虑了 21 种风险因素,包括饮食、吸烟、呼吸率、高血压、血压等因素,准确识别每位患者的风险水平。这个评分模型将风险分为高、中、低三档,并能提供可以干预的最大风险因素。
心脏病
从医学科普材料了解到,当前冠心病常用的检测方法共有四种,包括心电图检测、多排 CT 检查、ECT 检测、超声心动图。
心电图(ECG)时一种经过胸腔的,以时间为单位记录心脏生理活动的一项技术.它的原理是通过记录心肌细胞去极化后在皮肤表面记录小的电变化.然后被记录成心电图,心电图检测能检测心律失常,是诊断冠心病的主要方法.他的优点在于简单经济,但这也导致了他的检测得不精准性.比如检测结果正常的患者却在临床时发生了猝死现象常常发生。
多排 CT 检查主要用于先天性心脏病的检测,是无创性检查.它的优点在于能清晰地显示冠脉血管病的情况.并且还有着扫描速度优势,完成整个心脏仅需5~10s.更高的图像分辨率(0.3MM),但同样,此方法也有着缺点,对细微的血管并不敏感,并且对病人的心率要求高。
ECT 检测,及放射性核素检查,其原理是把放射性药物注射入人体,在代谢之后,探测脏器内,病变组织和正常组织之间的浓度差异,然后通过计算机在成像.优点为可以了解到心肌梗塞的范围以及是否具有可逆性.缺点为费用昂贵,不能早期发现病变。
超声心动图是利用物理学上的超声测距原理检查心脏和大血管的解剖结构和状态的一种技术.显示的是状态和时间的曲线,这个曲线即为超声心动图.超声心动图主要用于了解心室壁的动作心脏瓣膜活动情况等,费用较低.缺点为,对冠脉准确性较低,也不能早期发现病变。
机器学习
本文通过现有的数据构建一个模型,使用机器学习技术训练模型,然后利用这个模型预测病人将来患有冠心病的几率。
机器学习主要分为两个步骤:
训练:通过各种现有的“学习资料”使它产生经验,生成模型。比如围棋比赛中,Alphago 就是事先通过各种棋谱和对手的数据信息进行学习训练。根据训练所需要学习资料数量的不同,会导致后来的决策准确率不同;
决策:决策是利用“训练”已经构建好的模型进行实时计算,如果说训练是长期的学习过程,那么决策就是考场上的现场发挥。比如 Alphago 已经训练完成,在和人类比赛时,就是把实时获得的数据通过模型决策出对应的数据,例如该走哪一步之类的结论。
决策的正确率由训练得到的模型决定。比如已有数据 X1 和对应的一个数据 Y1,经过训练后可以得到一个函数模型,然后再导入模拟的数据 X2,即可通过该模型进行决策得到对应数据 Y2。交叉验证是用来判断分类器性能的一种统计学方法,原理是将已有的一批数据集分为两个子集,分别是训练集、测试集。训练集用来建立模型,测试集用来测试该模型的精 准度。训练集元素的数量一般多于测试集的元素,较为常见的是 7:3、8:2 等。要求训练集和测试集要做到均匀分配,但一般很难做到彻底均匀,所以经常采用的是随机分配方案。在学习各种复杂度不同的模型时,选择测试集具有最小误差、最大正确率的模型,即分类正确的 样本在测试集中所占比例。
决策树模型
决策树是人工智能中用来分类的常用方法,包括了几个重要的关键词:根节点、父节点、子节点和叶子节点等。决策树在多分类和二分类问题中有很好的应用,可以用多种标准评价 和优选方案,给出最优结果。该方法的特点,一方面,由于要解决的问题的目标和标准的不同,比较方案的好坏比较难,因此找不到问题解决的最佳方案;另一方面,解决问题的决策过程是随机的,根据问题的满意度作为标准。决策树常常采用贪婪思想的方法对各个因子进行分裂,也就是说,可以寻找最优分裂结果,进行决策树的分裂。
评价最优的分裂结果可能有多种方法,最理想的情况是能找到一个属性刚好能够将不同类别分开,但是实际情况下,只通过一次分裂很难一步到位,但是我们希望每一次分裂之后剩下的节点的数据尽可能清晰,决策树使用信息增益或者基尼值,作为选择属性的依据。
随机森林
决策树具有泛化能力弱的缺点,即使采用了剪枝等方法,有时候预测结果也不是非常精确。一棵树做决策显然比不上多棵树同时做决策,这种方法就是随机森林模型。对于同一批数据,用相同的算法只能产生一棵树,但是 Bagging 策略可以产生不同的数据集,包含的数据是随机的。
Bagging 策略全程叫 bootstrap aggregation,假设样本集中含有 N 个数据点,通过重采样的方法选出 N 个样本。在抽样的过程中,采用的是有放回的采样的方法,所以总体的样本数据的个数一直是 N 个。基于所有样本,对这 N 个样本建立随机树分类器,重复上述采样和构建决策树方法 M 次,获得 M 个分类器。最后根据这 M 个分类器的投票结果,按照少数服从多数的原则,最终能决定数据的分类情况。
随机森林的常见步骤分为以下三步:
对样本进行随机抽样,随机 选取 N 个样本;
从所有属性中随机选取 F 个属性,选择最佳分割属性作为节点建立决策树;
重复以上 M 次,即建立了 M 棵决策树分类器。第四步,这 M 个形成随机森林,通过每棵树的结果分析,投票表决决定数据分类情况。
训练模型实验
数据集来源及解释
我们已经了解了机器学习预测模型的实现原理,本文我们并不会自己动手从头实现,因为当前预测算法已经非常成熟,我们完全可以利用一些公有云大厂提供的自动学习技术,实现模型的快速训练及预测。本案例我们采用的是某花厂的公有云 AI 平台,数据来源 Kaggle 网站。
Kaggle 是一家在线 AI 竞赛网站,开源提供了针对各个行业的脱敏数据,用于支持学生训练对应的 AI 模型。
首先需要下载开源数据集,原始数据(已开源的脱敏数据)下载地址如下:
https://www.kaggle.com/johnsmith88/heart-disease-dataset
打开 csv 文件,你可以看到如下图所示:
上图中的数据集截图中包括了 14 个字段,对这 14 个字段的含义做逐一解释:
Age:年龄;
Sex:性别;
chest pain type (4 values):胸部疼痛类型;
resting blood pressure:静息血压;
serum cholestoral in mg/dl:血浆胆固醇水平;
fasting blood sugar > 120 mg/dl:空腹血糖>120 mg/dl;
resting electrocardiographic results (values 0,1,2):静息心电图结果;
maximum heart rate achieved:最大心率;
exercise induced angina:与运动相关的心绞痛;
oldpeak = ST depression induced by exercise relative to rest:与静息时比较,运动导致的 ST 段下移;
the slope of the peak exercise ST segment:心电图 ST segment 的倾斜度;
number of major vessels (0-3) colored by flourosopy:透视检查看到的血管数;
thal: 1 = normal; 2 = fixed defect; 3 = reversable defect:检测方式;
target:0 和 1。
根据医学杂志上查到的信息,一般认为,胆固醇介于 200-300 之间发病率高;心率异常易导致发病,最大心率在150到175间发病率高;最大心跳在150到175间发病率高;血压在120到140时发病率高。
训练集一共 1025 条脱敏后的患者信息,分布大致如下(不逐一解释):
年龄:最大 77,最小 29,平均年龄 54.4。
性别:75%男性(数值 1),25%女性(数值 0)。
空腹血糖>120 mg/dl 的比例,85%低于,15%高于。
与运动相关的心绞痛,数值 1 表示是,数值 0 表示否,66%为否。
与静息时比较,运动导致的 ST 段下移:
实验过程
下载数据之后,我们接下来做的是上传数据到公有云。一般来说,公有云都提供了 OBS 桶用于存放文件,本文所涉及的 csv 文件可以作为对象上传。上传文件截图如下图所示:
注意,上传文件前请删除表头字段名,否则训练过程中会报错。此外,数据集不用自己划分为训练集和测试集,AI 平台会自动按照 7:3 的比例进行切分。数据预览如下图所示:
接下来就可以进行模型训练了。首先登陆网站https://console.huaweicloud.com/modelarts/,首页如下图所示:
有没有看到屏幕中间的“自动学习”按钮?后续我会写一篇文章系统性介绍什么是自动学习,这里先略过。我们本案例要做的是预测,也就是“预测分析”按钮,点击该按钮。
点击“创建项目”按钮:
接着选定数据集后,你会看到如下图所示的步骤,分为数据标注、魔性训练,以及部署上线。
点击训练按钮,开始模型训练,由于是机器学习算法,只需要采用 CPU 资源即可。
训练任务完成后,你可以点击进去查看模型的准确度预测(默认 7:3 比例已经预留了测试集,可以用来生成测试报告),如下图所示:
上面这张图提到了评估结果,包括真阳性、伪阳性、伪阴性、真阴性。我们这个案例的准确率不高(46.2%),主要原因是样本数据太少,并且阈值设为 1 也起了较大作用。具体讲讲这类名词定义,如下表所示:
TP(真正,True Positive,对应上面图中的真阳性)表示真实结果为正例,预测结果也是正例;FP(假正,False Positive,对应上面图中的伪阳性)表示真实结果为负例,预测结果却是正例;
TN(真负,True Negative,对应上面图中的真阴性)表示真实结果为负例,预测结果是负例;
FN(假负,False Negative,对应上面图中的伪阴性)表示真实结果为正例,预测结果是负例。
显然,TP+FP+FN+TN=样本总数。
精确率 P 和召回率 R 的定义为:精确率(P)= TP/(TP+FP),召回率(R)=TP/(TP+FN)
理想情况下,准确率和召回率两者都越高越好。然后往往两者是有矛盾的,准确率高时,召回率低;准确率低时,召回率高。比如在搜索网页时,如果只返回最相关的那一个网页,那准确率就是 100%,而召回率就很低;如果返回全部网页,那召回率为 100%,而准确率就很低。因此在不同场合需要根据实际需求判断哪个指标更重要。
后记
机器学习、深度学习与医学结合的应用,需要应对独特的局限。与电子商务、监管合规和股东关系相比,治疗病人是一个更加细致的过程。作为一名 AI 工程师,我相信医疗领域数据和人工智能的结合,每一次的研究努力都是有意义的,毕竟人工智能的计算效率是人无法比拟的,医疗过程很多时候就是和死神赛跑,哪怕是一分一秒的进步都具有里程碑意义。公有云的计算资源和 AI 技术,将是推动科学向前方展的引擎。接下来,我会针对不同的业务场景训练模型,可能是自己写代码,也可能基于自动学习技术。我们下一篇文章见。
作者简介
周明耀,九三学社社员,2004 年毕业于浙江大学,工学硕士。现任华为云 AI 产品研发总监,著有《大话 Java 性能优化》、《深入理解 JVM&G1 GC》、《技术领导力-如何带领一支软件研发团队》、《程序员炼成记》等。职业生涯从软件工程师起步,后转为分布式技术工程师、大数据技术工程师,2016 年开始接触 AI 技术。
评论