一种基于深度学习的ICU患者电子病历分析方法及系统

文档序号:25952992发布日期:2021-07-20 17:10阅读:521来源:国知局
一种基于深度学习的ICU患者电子病历分析方法及系统

本发明涉及信息智能化领域,特别涉及一种基于深度学习的icu患者电子病历分析方法及系统。



背景技术:

随着当今大数据和医疗病例电子化的推进。越来越多的病人信息和电子病历数据被存入医疗系统和数据库。并且随着人工智能领域的快速发展和服务器算力的不断提高,现在已经有能力去研究这些数据的分布和特征,进而对辅助临床诊断,药方推荐和健康管理等方面提供帮助。

最近,电子病历(electronichealthrecord)渐渐成为研究的热点。ehr数据以其丰富的信息量吸引了大量学者对其进行研究,例如,有学者利用ehr数据构建医疗知识图谱。这种图谱将不同情形,数据,进行整理,并开发出智能化医疗诊断和辅助决策这样的系统,供医疗工作者们使用。这样的系统可以记录患者的患病信息和身体状况,甚至可以挖掘其中的病因和潜在的问题。另外,将深度学习和ehr数据结合的研究主要在于以下三个方面:信息提取(informationextraction),表征学习(representinglearning)和临床预测(clinicalprediction)。在表征学习中,除了常用的word2vec,glove等nlp中常用的词向量嵌入工具,还有专门针对病人信息进行的嵌入方法,例如choi等人提出的嵌入结构。对于信息提取方面,由于数据量的巨大,人工处理会耗费大量的时间和成本,在此背景下,针对ehr数据的信息提取工具valx应运而生。临床预测就是将病人的信息例如体征,检测数据等输入模型,然后模型给出相应的病情诊断,比较著名的模型有doctorai。

表征学习是将病人的icd编码和相应的药物做有效的表征,利于模型学习。临床预测是在与以较高的准确率去预测该病人的药方。本文将该工作量化为一个多标记分类问题,旨在根据数据分布特点,利用合理的模型作出可靠的预测。多标记分类模型的发展已经演化出了很多模型,例如经典的binaryrelevance,他的方法是将数据标记视作独立,用多个二分类器的集成解决问题。classifierchain(cc)是将多标记分类问题转化为一个链式分类问题,在一定程度上考虑到了标记之间的依赖性。labelpowerset(lp)是将所有标签的组合排列出来,将问题转化为一个多分类问题,但是药方数据标签数量巨大,lp的时间复杂度将会难以估量。还有学者提出了基于决策树和支持向量机的多标记分类算法,multi-labeldecisiontree,rank-svm等。另外,还有学者利用rnn探索标记间的相关性。例如guibinchen等人提出的cnn_rnn网络,用cnn提取图片或文本信息,用rnn考虑标记的相关性并做分类。探索标记间的相关性是多标记分类十分重视的一个方面,该方面处理的好坏会直接影响分类器的性能和效果。传统的多标记分类模型虽然时间复杂度低,但是难以探索标记间隐藏的联系。即使是有些模型考虑到了标记之间的联系,但是其考虑的方式可结实性和合理性欠妥。



技术实现要素:

本发明的目的在于克服现有技术的不足,提出一种基于深度学习的icu患者电子病历分析方法及系统,基于电子病历(electronichealthrecord)数据训练出一种准确率高的多标记分类模型,能够输出包括多种药物的药方。

本发明解决其技术问题所采用的技术方案是:

一方面,一种基于深度学习的icu患者电子病历分析方法,包括:

s101,接收输入的icd编码和药物向量,并将icd编码和药物向量分别输入两个多层感知机,生成两个维度大小相同的隐藏层,并计算出两个隐藏层的相关性;

s102,基于初始化的稀疏系数,用kl散度计算稀疏系数和自编码器的中间层激活后神经元的平均激活程度的距离,并放入到损失函数;

s103,将隐藏层作为自编码器的中间层,使用一个多层感知机进行解码,输出包括多种药物的药方;

s104,基于初始化的加权矩阵,对输出的药方进行加权,将多开的药物作为药物损失放入损失函数。

优选的,所述s101中,icd编码通过独立热编码one-hot嵌入后再进行词向量嵌入作为输入;所述药物向量为one-hot编码,实现病情到药物的映射。

优选的,所述s101中,计算出两个隐藏层的相关性,如下:

其中,f1和f2分别表示两个隐藏层的神经网络;x1和x2分别表示两个神经网络的输入;θ1和θ2分别表示两个神经网络的网络参数。

优选的,所述s102中,用kl散度计算稀疏系数和自编码器的中间层激活后神经元的平均激活程度的距离,具体如下:

其中,aesparseloss表示稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离;s2表示神经元个数。

优选的,所述s104中,药物损失的计算方式如下:

weightloss=-σrelu(output-true_label)

其中,weightloss表示药物损失;relu表示线性整流函数;output表示输出的药方;true_label表示真实的药方标签。

优选的,所述损失函数的表示如下:

modelloss=α*dccaloss+β*aesparseloss+η*weightloss

其中,modelloss表示总损失;dccaloss表示自编码器的损失;α、β和η分别表示对应的权重系数。

另一方面,一种基于深度学习的icu患者电子病历分析系统,包括:

相关性获取模块,接收输入的icd编码和药物向量,并将icd编码和药物向量分别输入两个多层感知机,生成两个维度大小相同的隐藏层,并计算出两个隐藏层的相关性;

距离获取模块,基于初始化的稀疏系数ρ,用kl散度计算稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离,并放入到损失函数;

药方输出模块,将隐藏层作为自编码器的中间层,使用一个多层感知机进行解码,输出包括多种药物的药方;

药方损失获取模块,基于初始化的加权矩阵,对输出的药方进行加权,将多开的药物作为药物损失放入损失函数。

根据本发明的实施例,本发明具有如下有益效果:

(1)本发明利用疏稀自编码器来挖掘标记之间的多重相关性,稀疏自编码器利用神经元直接探索标记间的相关性,避免了链式结构或rnn结构的局限,并且该方法的时间复杂度远低于训练多个基分类器的时间复杂度,所述疏稀自编码器的损失函数除包括自编码器本身的损失外,还包括用kl散度计算稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离;

(2)本发明的基于深度学习的icu患者病历分析方法使用多标记分类模型,所述多标记分类模型利用深度典型相关分析dcca和疏稀自编码器同时进行嵌入,学习出一个隐空间latentspace(隐藏层),再利用解码器进行解码;这样的好处是可以更为直接的探索标签之间的关系,并且做出分类。还有一个好处是药物的种类过多导致数据非常稀疏,利用疏稀自编码器的嵌入方式便于使输出稀疏化;

(3)本发明为了切合临床开方的实际情况,优化了损失函数,减少了不需要药物的出现。

以下结合附图及实施例对本发明作进一步详细说明,但本发明的一种基于深度学习的icu患者电子病历分析方法及系统不局限于实施例。

附图说明

图1是本发明实施例的基于深度学习的icu患者电子病历分析方法的流程图;

图2是本发明实施例的多标记分类模型的结构示意图;

图3是本发明实施例的药物损失随迭代次数上升的变化曲线图;

图4是根据本发明实施例的基于深度学习的icu患者电子病历分析系统的结构框图。

具体实施方式

下面结合附图详细描述本发明的实施例,需要注意的是附图所描述的实施例仅仅是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。以下结合附图描述根据本发明实施例的基于深度学习的icu患者电子病历分析方法及系统。

参见图1和图2所示,一种基于深度学习的icu患者电子病历分析方法,包括:

s101,接收输入的icd编码和药物向量,并将icd编码和药物向量分别输入两个多层感知机,生成两个维度大小相同的隐藏层,并计算出两个隐藏层的相关性;

s102,基于初始化的稀疏系数,用kl散度计算稀疏系数和自编码器的中间层激活后神经元的平均激活程度的距离,并放入到损失函数;

s103,将隐藏层作为自编码器的中间层,使用一个多层感知机进行解码,输出包括多种药物的药方;

s104,基于初始化的加权矩阵,对输出的药方进行加权,将多开的药物作为药物损失放入损失函数。

进一步的,所述s101中,icd编码通过独立热编码one-hot嵌入后再进行词向量嵌入作为输入;所述药物向量为one-hot编码,实现病情到药物的映射。

one-hot编码是一种常用的编码方式,由于icd编码的数量有上千条,但是对于一个具体的实例只有30-40种病。因此,如果使用one-hot编码进行实验,输入数据将变得异常稀疏,不利于神经网络的特征抽取。再者,因为疾病与疾病之间有一定的联系,比如得了糖尿病就比较容易得视网膜病变,肾脏等器官神经受损等并发症。但是one-hot编码由于编码性质,直接忽视了这种联系。因此,one-hot编码不适用于这类医疗数据。

本发明利用word2vec来进行词向量嵌入并进行输入数据的降维。word2vec是用一个浅层的神经网络来寻找独立热编码和词向量之间的映射关系。也就是说,word2vec是将独立热编码转化成词向量的一种映射。通过映射之后,数据的维度得以大大减小,而且还能有效的保留数据信息。当然这种映射也可以理解成空间的转化,就是将原本的独立热编码以信息量减少最小的方式缩减其维度。本发明使用了该方法对icd编码进行降维,能够提高分类器性能。

进一步的,所述s101中,计算出两个隐藏层的相关性,如下:

其中,f1和f2分别表示两个隐藏层的神经网络;x1和x2分别表示两个神经网络的输入;θ1和θ2分别表示两个神经网络的网络参数。

本发明的基于深度学习的icu患者病历分析方法使用多标记分类模型,所述多标记分类模型利用深度典型相关分析dcca和疏稀自编码器同时进行嵌入,学习出一个隐空间latentspace,再利用解码器进行解码,解码器用两层神经网络解码。其中,dcca通过多个非线性变换的堆叠层来计算两个空间的表示形式。假设第一个空间的网络中的每个中间层都有c1个单位,而最终(输出)图层具有o个单位。让成为第一个空间的实例。实例x1的第一层的输出是其中是权重矩阵,是偏置矢量,s:r→r是一个非线性函数。同理,另一个空间的输入也按照类似方法计算出其输出值。

以具体变量计算:h1∈ro*m,h2∈ro*m,是两个通过深度网络将两个不同空间的数据输出的结果。下面定义定义并且定义其中r1是一个正则项。假设r1是正的,那么必然是正的,根据cca中相关性的计算公式,h1,h2中前k个因子的值的相关性值为t矩阵前k个奇异值的和。其中如果取k=o,代入公式会有下式成立:

corr(h1,h2)=||t||tr=tr(t′t)1/2

这样的好处是可以更为直接的探索标签之间的关系,并且做出分类。还有一个好处是药物的种类过多导致数据非常稀疏。利用疏稀自编码器的嵌入方式便于使输出稀疏化。在模型做出分类之后,利用药物损失使所开的药方中尽少包含病人不需要的药物。

进一步的,所述s102中,用kl散度计算稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离,具体如下:

其中,aesparseloss表示稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离;s2表示神经元个数。

进一步的,所述s104中,药物损失的计算方式如下:

weightloss=-∑relu(output-true_label)

其中,weightloss表示药物损失;relu表示线性整流函数;output表示输出的药方;true_label表示真实的药方标签。

进一步的,所述损失函数的表示如下:

modelloss=α*dccaloss+β*aesparseloss+η*weightloss

其中,modelloss表示总损失;dccaloss表示自编码器的损失;α、β和η分别表示对应的权重系数。

其中,自编码器的损失aesparseloss即为auto-encoder的输出与真实值之间的欧式距离。β为一个系数,用来控制sparsity的程度。从损失函数的变化中,在进行反向传播的时候,其梯度计算公式会从式

转换成式:

如上所述,由于是多标记分类模型,本发明采用的评价指标除包括汉明距离、fl_score、和jaccardloss外,还提出了一个评价指标,它用于衡量模型是否有多开药,即模型是否开出了病人不需要的药物。因为本模型提供的是一个开药的参考,最理想的情况是开出的药方完全与病人需要的药方相符。但是实际训练中无法到达百分之一百的正确率。因此,本模型本着开病人不需要的药物不如不开这些药物的原则,引进了新的评价指标,定义为weightloss。

这用的就是稀疏自编码的思想,虽然计算分布间距离的方式不一样,但是这样的损失还是可以达到让输出变得稀疏的效果。weightloss也成为一个重要指标来衡量模型的优劣。

如下将对本发明方法所使用的多标记分类模型(caae_sparse)和binaryrelevance(br)、classifierchain(cc)、med_ar和rnn_att模型进行比对。

br和cc是两个比较常用的多标记分类模型,br就是忽视标记间的相关性,直接用基学习器对目标进行分类。而cc则是考虑到了标记之间的相关性,不断将y,也就是label作为feature输入分类器,最后综合多个分类器的结果输出最后的结果。这样将标签当作特征的做法可以考虑到标记间的相关性。举一个最简单的例子,如果基分类器是mlp,那么很显然当多个标签被作为特征进行前向传播的时候,标签之间的相关性又被考虑。rnn_att是将attention用于rnn之中,这样也考虑了相关性,而且通过attention的加权,还让不同的icd编码受到了不同程度的加权。最后,med_ar模型是由attention,rnn和rethink网络结合而成,是甘小鹿提出的一个多标记分类模型。

各模型的参数设置如下:

br(word2vec):输入数据用word2vec基分类器采用的是max_depth为2的决策树,基分类器其他参数为默认。

cc(word2vec):输入的icd编码也用word2vec进行词嵌入,基分类器采用了svm。

med_ar(glove):输入的icd编码用glove做词向量嵌入,rethink_net部分时间步time_step=5,attention部分获取疾病表征为512维。

med_ar(word2vec):输入的icd编码用word2vec进行词向量嵌入,其他步骤与上面一致。

rnn_att(word2vec):首先初始化attention向量,对向量化的icd编码进行加权。再用rnn(lstm)进行多标记分类。其中rnn的cell_num参数设置为输出药物的数量2726。

caae_sparse:用上文提到的模型进行多标记分类实验。词向量嵌入方式为word2vec。

其中caae_sparse的具体调参过程包括:批处理batch_size设为100,学习率lr设为1e-5,word2vec的维度是512。模型三处均采用2层mlp。一共的神经元数量为1020个。在计算correlation时协方差矩阵加上一个对角线元素均为1e-4的对角矩阵增加矩阵特征值分解的稳定性。dropout_rate设置为0.7,训练集测试集比例为7:3,随机抽取。

如下表1是所有数据的实验结果,根据hadm_id整合而成。一共有14727条。由于glove与word2vec所得出的结果几乎一致,本文展示试验结果均为word2vec的结果。

表1总试验结果

以上结果是针对所有数据,14727条进行的实验。就准确率而言,br和cc模型都为集成类的模型。br是将标签割裂开,忽略了标签之间的相关性。而cc虽然考虑到了标签之间的相关性,但是在此情况下这种方式欠妥。病人所使用的药方种类有两千种以上,这导致标签的编码非常稀疏。因此使用cc这样的方式不断用标签作为特征的做法也很难达到理想的效果,及会忽略一些标签之间的相关性。再看基于rnn的模型。rnnatt效果上两个模型较好的原因是它考虑到了不同疾病的重要性不同,但是通过实验结果可以看出attention机制对整体模型结果提升作用不大。再看med_ar模型,它的不同之处在于用rethinknet来考虑标记之间的相关性。模型效果得到了提升。而本发明模型更为直接的考虑了标记的相关性,并且,它还结合实情有倾向的稀疏化模型输出,让其结果更能被病患所接受。

针对于本发明定义的weightloss,可以发现br和cc的效果很好,平均每条记录原本不该开而被开出的药物平均数很小。但是他们的准确率不高。而基于rnn的两个模型,weightloss相对高了很多,容易导致误用药物,因此也不太合适。本发明提出的模型,准确率为最高。而且其weightloss也相对较低,在可以接受的范围里。如图3所示是本发明提出的模型weightloss随迭代次数上升的变化曲线图。可以清晰的看到,随着迭代次数的上升,平均每条记录的多开药的平均数是明显减少的。从而说明本发明提出的损失函数和模型结构是有效的。

参见图4所示,本发明一种基于深度学习的icu患者电子病历分析系统,包括:

相关性获取模块401,接收输入的icd编码和药物向量,并将icd编码和药物向量分别输入两个多层感知机,生成两个维度大小相同的隐藏层,并计算出两个隐藏层的相关性;

距离获取模块402,基于初始化的稀疏系数ρ,用kl散度计算稀疏系数ρ和自编码器的中间层激活后神经元的平均激活程度的距离,并放入到损失函数;

药方输出模块403,将隐藏层作为自编码器的中间层,使用一个多层感知机进行解码,输出包括多种药物的药方;

药方损失获取模块404,基于初始化的加权矩阵,对输出的药方进行加权,将多开的药物作为药物损失放入损失函数。

以上所述的具体实施例,对本发明的目的、技术方案和效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不限制本发明,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,所做出的修改、替换和变形均属于本发明的保护之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1