基于Keras的LSTM模型的心肌梗死患者发病预测

作者: 刘志雄 潘媛媛

基于Keras的LSTM模型的心肌梗死患者发病预测0

摘要:心肌梗死是冠状动脉急性、持续性缺血缺氧所引起的心肌坏死,具有突发性。该疾病发生前伴随心肌梗死前综合征,为了更好地对心肌梗死进行诊断,文章提出了基于Keras的LSTM(Long Short-Term Memory)模型对心肌梗死患者发病预测。对患者各种临床症状及其症状程度进行one-hot[1]编码用作数据集,通过该数据集进行LSTM模型训练,已训练的模型可用作心肌梗死发病预测。

关键词:心肌梗死;LSTM模型;预测

中图分类号:TP18      文献标识码:A

文章编号:1009-3044(2022)23-0068-03

1 相关问题提出

心肌梗死(AMI)是冠状动脉急性、持续性缺血缺氧所引起的心肌坏死。约半数以上的急性心肌梗死患者,在起病前1—2天或1—2周有前驱症状,其前驱症状需要得到患者以及家属重视,最常见的是原有的心绞痛加重,心绞痛发作时间延长,或患者对硝酸甘油效果变差;或一些继往无心绞痛者,突然出现长时间心绞痛或出现不规律的频繁心绞痛症状。心肌梗死可并发心律失常、导致患者休克或心力衰竭,其症状严重,常可危及生命。患者一旦确诊心肌梗死,病情难以控制或无法预测其发病时间,导致患者伤亡高。中国近年来心绞痛患者人数呈明显上升趋势,且40岁以下中年人群发病率呈逐年上升趋势,每年新发至少50万,现有患者至少200万,心肌梗死作为老年人常见病,其发病率高,发病后会对患者造成不可逆的伤害。

关于疾病发生预测的研究一直是各领域研究的热点,目前国内的心肌梗死疾病预测大多数针对预后治疗和疾病死亡率,2020年有学者通过Logistic回归分析急性ST段抬高型心肌梗死患者(STEMI)PCI术后6月发生不良心血管事件(MACE)的危险因素[2];在心肌梗死领域,学者通过获取Holter文件、心率变异SDNN及超声心动图检测的左室射血分数、左室舒张末期直径的参数,对患者进行随访,采用变量回归分析得到室性早搏后窦性心律震荡现象的减弱或消失是急性心肌梗死后患者死亡的独立预测指标[3];在疾病预测领域也有学者采用回顾性分析,探讨SYNTAX积分和Gensini评分对急性ST段抬高心肌梗死(STEMI)患者远期预后的预测价值[4].

基于深度学习的模型正在革命性地改变部分领域,它能够解决涉及大量快速变化的高维数据[5]。深度学习模型的搭建也成为热门应用。神经网络与预测临床事件的递归神经网络(RNN)模型被发现相对于其他传统的方法更准确,但不容易解释。长短时记忆网络(LSTM)是近年来应用于临床数据的一种递归神经网络,用于学习医学概念的低维表示,并对特定临床措施活动的时间序列进行分类处理,LSTM对于时间序列的处理准确度高,模型更易被大众接受,因此,LSTM现在被广泛应用于时间序列分析预测。相比较RNN而言,LSTM可以保存数据更久,其时间梯度损失较慢,LSTM使得计算机对语言的处理不再停留在简单的字面匹配层面,而是进一步深入到语义理解的层面。

心肌梗死涵盖人体系统范围广、病因复杂,因此,针对心肌梗死的研究进展一直比较缓慢,并且心肌梗死的研究主要集中于病理学、临床医学、生物化学和分子生物学等医学或生命学领域,计算机科学领域的研究相较不多。本项目将基于LSTM算法,关注在未确诊病情状况下,通过对患者出现心肌梗死早期症状进行研究,预测患者患有心肌梗死的概率。

2 基于Keras的LSTM模型

长短期记忆网络(Long—Short Term Memory,LSTM)在1997年提出的。LSTM模型是RNN模型的一种。LSTM由于其设计特点,适合对时间序列进行建模预测,如文本数据、图片数据、时间序列数据。RNN模型在处理长期记忆时[6],存在严重的梯度消失问题,因此RNN模型很难处理长序列的数据或RNN模型在处理长序列的数据时准确度断崖式下降。为了解决这一问题,从RNN模型上衍生出了LSTM模型,它解决了常规RNN模型的梯度消失问题,使得模型在进行长序列数据预测时,能够表现出更好的效果,因此LSTM模型受到了广泛的应用。

2.1 LSTM网络

LSTM模型的结构相对于RNN较为复杂,LSTM模型的细胞结构是队列结构,LSTM模型是若干个细胞串联而成,在进行模型训练或数据预测时,数据从第一个细胞进入,在细胞内存在激活函数,遗忘门等细胞内容,数据被当前细胞处理之后,将得到一个输出结果并将输出结果传递至下一个细胞,下一个细胞将对传入的数据进行同样的处理,直至最后一个细胞将最终结果输出。在训练LSTM模型的过程中,数据通过细胞后,得出最终结果,LSTM模型会将该结果与真实结果进行比对,同时LSTM会通过比对的结果,对细胞内部的参数进行调整、优化,使LSTM模型下一次输出的结果与真实结果更加相近。但训练过程中,为了防止出现结果过拟合,LSTM模型会在每次训练时,会使用正则化防止过拟合。LSTM模型细胞结构如图1所示。

1)细胞状态

LSTM模型每个细胞都拥有自己的细胞状态,细胞状态为LSTM训练过程中,该细胞输出的值,在数据完整地通过一次所有细胞,细胞状态会根据此次结果进行更新优化,细胞状态的优化调整直至训练结束或细胞状态达到最佳。

2)遗忘门

遗忘门是控制是否遗忘信息的“决策机构”。遗忘门为当前细胞输入内容,即为上一细胞的输出结果。细胞并不能直接处理上一个细胞的输出结果,在实际的模型中,细胞的输入以及细胞的输出具有很大的差异,遗忘门会对上一细胞的输出结果进行函数变换,将上一个细胞的结果转化成可用的细胞输入。遗忘门的公式如式(1)所示。[ht,xt]为两个向量合并,[Wf]为函数的权重,[σ]是细胞的激活函数(sigmoid函数),[bf]是函数偏置量。

3)输入门

输入门由两个部分组成,第一部分使用了sigmoid激活函数,输出为[it]。第二部分为使用了tanh激活函数,输出为[at]。输出门的公式如式(2)与式(3)所示。

公式中[Wi],[Ui],[Ua],[Wa]为权重,[bf]为函数的偏置量。

4)细胞状态更新

细胞状态更新是输出门之前重要的一环,遗忘门与输入门的结果都会作用于细胞状态,细胞状态的更新将决定该模型的优劣,当训练结束后,细胞状态停止更新。细胞状态更新公式如式(4)与式(5)所示。[⊗]为Hadamard积,[Ct-1]为前一时刻细胞状态,[Ct]为当前时刻细胞状态。

5)输出门

输出门分为两个部分,第一部分如式(6)所示,第二部分如式(7)所示。输出门最终结果为当前时刻的输出。

2.2 基于Keras的LSTM神经网络模型

Keras是基于TensorFlow框架和Theano的深度学习库,是由Python语言编写而成的神经网络API,Keras具有很多优势:原型快速且简易,对初学者友好;模块化结构,Keras内模型独立,损失函数,优化函数,激活函数模块可根据需求直接进行调用,数据处理效果理想;模型扩展性好,添加新模块容易,只需要仿照现有的模块编写新的类或函数;模型与Python协作性好,Keras无需单独的模型配置文件,模型内容在代码可以直接体现,因此模型调试扩展很方便。

3 心肌梗死的LSTM模型实现

利用LSTM模型实现对心肌梗死的发病预测,将数据集划分为训练集与测试集,通过训练集训练LSTM模型,多次训练得出最优的训练模型,再用测试集测试训练出的LSTM模型,得出模型对心肌梗死患者发病预测的准确率,选择准确度最高的模型,模型准确率是判断模型优劣的重要指标。

3.1 数据介绍

该数据集包括Age,Sex,Cp等等14个标签,该标签内容呈时间序列,时间间隔为3个月。数据部分如表1所示,数据部分标签的意义如下。

Cp:经历过的胸痛类型(值1:典型心绞痛,值2:非典型性心绞痛,值3:非心绞痛,值4:无症状)。

Trestbps:患者的静息血压(入院时的毫米汞柱)。

Chol:患者的胆固醇测量值,单位 :mg/dl。

3.2 数据分析及处理

对各项标签进行相关性分析,可以得出各个标签对最终结果的相关性,以此为依据,可以排除部分无相关性的数据,这种做法可以提高模型的准确性,分析结果如图2所示,其中1代表该标签与患者患病完全正相关,-1代表该标签与患者患病完全负相关。

由图2知:是否患病和Cp、Thalach、Slope等标签正相关,和Eang、Oldpeak、Ca、Thal等标签负相关。选取与患病相关性较高标签进行下一步处理,同时去掉与患病相关性较低的标签。进一步处理相关性最较高的标签与患者患病的关系,Thalach(静息血压)与Target关系,如图3所示。Cp(胸痛类型)与Target关系,如图4所示。

从图3中橙色点分布情况可知,Thalach越大,患病的人数更多。而在运动中产生胸痛的人中(Target值为1),该类人群存在许多胸痛现象,该类人群心率比较高,大部分集中在120~150之间,对于并没有心脏病的人群,该人群仅仅心率较高,并未产生胸痛。由图4知,胸痛类型1、2、3患病概率更大[7]。

3.3 模型搭建

使用Keras建立LSTM模型包括数据预处理、定义模型、训练模型、评估模型以及使用模型进行预测。数据预处理阶段,提取数据集中相关性较高的若干特征标签,为该数据集生成DataFrame类型数据,作为序列索引,提取出Target用作Y标签,即结果标签。对提取出的数据进行非空处理,填补缺失的数据,并对其中Trestbps、Chol等特征标签归一化处理,将数据映射至(0,1)范围内,如果不对数据进行归一化处理,模型的LOSS将会很大,模型训练效果也会很不理想。将处理后的数据划分数据集,设置标志dataFlag=0.7,标志前数据为训练集,标志后为测试集。[xtrain={x1,x2,x3,...x0.8*len}]和[xtest={x0.8*len+1,...xlen-1xlen}]。数据处理完成后,定义、构建LSTM神经网络,本次实验采用了Keras中Sequential层次模型,采用层层线性叠加构架激活函数为relu函数,评估函数为MSE(均方误差)。输入处理好的训练集数据进入模型,训练迭代128次,若训练损失函数较低,将提前结束训练。训练结束后,对模型进行测试,输入测试集数据进入模型,分析测试结果,得出结果参数。

3.4 实验结果分析

本次使用采用了对比实验,选取卷积神经网络RNN是深度学习常用算法之一,属于多层前馈网络,使用训练完成的LSTM神经网络模型与RNN卷积神经网络模型对同一组数据进行预测,对比预测结果。

1)评估标准

使用均方误差(MSE),检测模型预测值与真实值之间的差异,MSE公式如式(8)所示。

损失函数(LOSS),损失函数可以用来评估模型的预测值和真实值不一致程度,LOSS函数可以很好地反映该模型训练结果是否准确。LOSS公式如式(9)所示。

2)实验结果分析

本节将通过MSE与LOSS两种评估方法,去对比LSTM模型与RNN模型对本数据集的处理效果。在LSTM模型中,一共训练了100次,BitchSize为训练集的长度,优化器为Adam。

LSTM模型的MSE为0.332,RNN模型的MSE为0.711。

LSTM模型的LOSS为0.0604,RNN模型的MSE为0.351。

上一篇 点击页面呼出菜单 下一篇