一种基于循环神经网络的患病风险预测方法与流程

文档序号:12467301阅读:304来源:国知局
一种基于循环神经网络的患病风险预测方法与流程
本发明属于医疗数据挖掘领域,具体涉及一种基于循环神经网络的患病风险预测方法。
背景技术
:疾病风险预测是根据大量患者的历史患病信息进行建模,并根据建立的模型进行疾病风险预测的综合系统。疾病患病风险预测大致可以分为经验预测和定量预测。经验预测作为一种主要依靠预测人员经验和直观判断能力的预测方法,不需要或只需要少量的计算,较适用于缺乏历史数据的场景。其主要方法包括:模糊聚类预测法、Delphi法、主观概率法。经验预测主要依托于人为经验与主观判读,且人工成本高,无法实现大量高准确度的预测。定量预测是依托于大量历史数据,运用统计、机器学习等方法对疾病患病风险进行数学建模。随着医疗信息化和计算机科学技术的飞速发展,医疗行业积累了大量丰富的医疗数据,越来越多的医疗诊断、健康检查数据存储在医疗机构数据中心。因此,越来越多的研究人员及企业在研究如何利用这些电子健康记录进行疾病风险定量预测。目前,针对疾病预测的某一特定领域,已经有许多专业人士通过机器学习等方法建立了预测某一种特定疾病的模型。在DimitriosH.Mantzaris等人发表的文献“Medicaldiseasepredictionusingartificialneuralnetworks[C]//BioInformaticsandBioEngineering”中,提出了使用人工神经网络的思想对疾病进行预测。他们针对骨质疏松疾病,把其患病风险预测问题作为一种模式分类问题,使用多层感知器(MLPs)及概率神经网络(PNN)建立预测模型,实现了较为准确的疾病预测结果。由于医疗诊断数据目前存在两大问题,使得难以建立合理的预测模型。问题一:由于疾病种类繁多,导致将疾病诊断数据利用传统单热(One-hot)式词向量表示方式来表示的向量维度高且十分稀疏。在传统单热式词向量表达方式中,首先,按顺序将每个疾病进行编号,创建词表库;然后,按词表库的顺序将疾病转换为向量形式,该向量的维度为疾病的总类别数。向量的元素只有0或1,其中:0表示未患该位置对应词表库的疾病;1表示患得该位置对应词表库的疾病。例如,现在共有A、B、C三种疾病,按ABC顺序生成词表库,若一个人某次患A、C两种疾病,则对应的疾病向量为[1,0,1]。如果,就诊数据包含1万中疾病,则对应的疾病向量将达到1万维。这使得建立的模型过于复杂,增加模型训练成本,且降低模型的预测准确率。问题二:疾病发展过程具有很强的时序性,传统的疾病预测模型,仅使用单次诊断及检测数据作为模型输入,未考虑将多次诊断及检测作为输入。因此,能否设计出一种兼顾上诉问题的合理预测模型,成为当前亟待解决的问题。技术实现要素:解决了因医疗诊断数据具有维度高、数据稀疏的特点导致的训练模型过于复杂、训练成本高以及训练准确率低等问题。鉴于上述,本发明提供了一种基于循环神经网络的患病风险预测方法,主要是利用循环神经网络与分布式词向量表达嵌入技术,实现了利用医疗诊断数据等电子健康记录进行疾病风险预测。一种基于循环神经网络的患病风险预测方法,包括以下步骤:(1)利用诊断的疾病作为训练样本,进行疾病名称分布式词向量训练,得到词向量映射矩阵,并进行存储;(2)再次利用诊断的疾病作为训练样本,进行循环神经网络训练,得到患病风险预测模型;(3)将病人历史记录中每种诊断疾病作为一个测试样本输入患病风险预测模型,得到患病风险预测结果。步骤(1)的具体步骤为:(1-1)对疾病诊断数据进行预处理:将每名患者的m种疾病按照诊断的顺序排序,选取前n种疾病组成第一个疾病序列,选取第2种疾病~第n+1种疾病组成第二个疾病序列,选取第3种疾病~第n+2种疾病组成第三个疾病序列,以此类推,得到m-n+1个疾病序列,n的取值为5、7或9,m为自然数;(1-2)将每个疾病序列中处于中间位置的疾病作为词向量训练模型的真实输出,剩余的疾病组成的序列作为词向量训练模型训练样本,将训练样本中的每种疾病按照诊断的顺序依次输入到词向量训练模型,进行疾病名称分布式词向量训练,得到每个疾病所对应的分布式词向量,从而组成词向量映射矩阵,并进行存储。在步骤(1-1)中,假设一名病人总患病序列为ABCDEFG,选择患者的5种疾病作为一个疾病序列,则可以形成3个疾病序列,第一个疾病序列为ABCDE,第二个疾病序列为BCDEF,第三个疾病序列为CDEFG,以此类推得到来自于同一患者的所有疾病序列。在步骤(1-2)中,对疾病名称进行分布式词向量训练,该训练过程中,为每一个疾病训练疾病特征向量,将高维度、高稀疏度的疾病名称映射为低维度、低稀疏度的疾病向量。同时,根据向量距离的度量方法,度量不同疾病间的相关程度,具体过程是:经过词向量训练后的所有疾病都有对应存在的词向量,该词向量可以用欧氏距离公式度量词向量之间的关系,欧式距离越小的词向量对应的疾病的相关度越高。如疾病白内障与玻璃体变性存在较高相似度。在步骤(1-2)中,采用连续词袋模型作为训练模型,进行训练,得到每个疾病所对应的分布式词向量,即构建每个疾病名称到K维实数向量的映射过程,使得每个疾病都能使用K维向量进行表示,其中:K远小于疾病总数。假设有N个词向量,则该词向量按疾病名称顺序进行组合,形成N*K维的矩阵,作为结果进行存储。步骤(2)的具体步骤为:(2-1)将每名患者所有次就诊行为所确诊的疾病作为就诊序列,删除就诊行为次数小于5的就诊序列,且删除就诊序列中相邻两次就诊行为后一次中重复确诊的疾病,得到预处理后的就诊序列作为循环神经网络训练样本;(2-2)将循环神经网络训练样本输入到循环神经网络模型中,利用词向量映射矩阵将训练样本转化为疾病向量;(2-3)将确诊的历史疾病转化为向量,并作为循环神经网络模型的真实输出,利用疾病向量对循环神经网络进行训练,得到患病风险预测模型。在步骤(2-1)中,假设一年内,总共有P名患者进行就诊,每名患者有Ti(i=1,2,…,N)次就诊行为,每次就诊行为有Mj(j=1,2,…,N)个疾病,因患者的个人身体素质差异性,每个患者的就诊行为数不同,且每一次就诊行为数中确诊的疾病数也不同,为增加预测的准确性,将每名患者的所有就诊行所确诊的疾病作为一个就诊序列,则一共有P个就诊序列。若一个就诊序列中有相邻且重复的疾病诊断数据,则去掉后面确诊的重复疾病诊断数据,选择序列长度大等于5的就诊序列作为循环神经网络训练模型的训练样本,序列长度大于等于5的就诊序列表示的是就诊次数大于等于5的就诊序列。在步骤(2-2)中,选择序列长度大等于5的就诊序列作为循环神经网络训练模型的输入数据,输入的高维度、高稀疏度的训练样本经词向量映射转化为低维度、低稀疏度的疾病向量数据,实际将低维度、低稀疏度的疾病向量数据作为训练样本,训练循环神经网络,得到患病风险预测模型。循环神经网络的每一次完整的循环过程,是一段完整的就诊序列。每一个循环内的处理过程,将处理该就诊序列中的一次就诊行为的所有疾病诊断数据。在步骤(2-2)中,假设某一个患者的患病序列为(A,B,C,D,E)每一个大写字母代表一次诊断,一次诊断包括多个疾病,例如诊断A中有(1,3)两种疾病,则诊断A的原始输入是[1,0,1,0,0。。。。。。]的向量,向量长度为总的疾病类别数,如所有疾病共1000种,则向量长度为1000,向量的值如上所示,如果他得了1,3两个病,则向量1,3两个位置值为1,其余值为0。这个向量是一次诊断的原始输入,用矩阵映射公式将高维度的疾病向量转化为低维度的疾病向量;矩阵映射公式为:y=Wx其中,x为输入的高维度的疾病向量,y为输出的低维度的疾病向量,W是一个映射矩阵,将x映射到y,W为词向量映射矩阵。在步骤(2-2)中,为使预测结果与未来N次实际患病最为接近,选择的优化目标函数为其中,yt*是t到t+τ时间段的正确输出值;yt'是t时刻的预测值;N是疾病的总数目;T是患病就诊的总次数减去4,因为采用的样本的最短的就诊序列是5,因此建模的时候最少是用前4次患病来预测第5次,所以t从5开始;Et(yt*,yt')是时刻t所产生的误差,表示序列中某一段的输出;E(y,y')是总的误差,是所有输出误差之和,表示序列的中所有Et(yt*,yt')的输出。在步骤(3)中,按就诊时间顺序,将多种就诊结果(疾病诊断数据)作为患病风险预测模型的输入以预测未来患者可能患得的疾病。例如,患者A共有10种疾病记录,则依次以10种疾病作为患病风险预测模型的输入,得到未来时刻所有疾病的患病概率,选择患病概率(从大到小排序)排名前十的疾病作为疾病预测的输出。本发明基于循环神经网络的患病风险预测方法,利用循环神经网络与分布式词向量表达嵌入技术,解决了因医疗诊断数据具有维度高、数据稀疏、时序性强等特点导致的训练模型过于复杂、训练成本高以及训练准确率低等问题,实现了针对历史患病信息进行具有时序性的建模过程。附图说明图1为本发明患病风险预测方法中采用模型的整体结构示意图;图2为本发明中连续词袋模型示意图;图3为本发明中循环神经网络示意图。具体实施方式为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。如图1所示,本发明基于循环神经网络的患病风险预测方法,具体包括:步骤1,对疾病诊断数据进行预处理:将每名患者的m种疾病按照诊断的顺序排序,选取前n种疾病组成第一个疾病序列,选取第2种疾病~第n+1种疾病组成第二个疾病序列,选取第3种疾病~第n+2种疾病组成第三个疾病序列,以此类推,得到m-n+1个疾病序列,n的取值为5、7或9,m为自然数;步骤2,词向量训练:将每个疾病序列中处于中间位置的疾病作为词向量训练模型的真实输出,剩余的疾病组成的序列作为词向量训练模型训练样本,将训练样本中的每种疾病按照诊断的顺序依次输入到词向量训练模型,进行疾病名称分布式词向量训练,得到每个疾病所对应的分布式词向量,从而组成词向量映射矩阵,并进行存储。如图2所示的是连续词袋模型的结构示意图,w(t)表示某一名患者的第t个疾病。将第t个疾病前2个疾病(w(t-2)、w(t-1))及后2个疾病(w(t+1)、w(t+2))作为输入,映射成为等长的向量,并进行求和(SUM),使求和的结果拟合w(t)对应向量,最后得到疾病到词向量的映射。对疾病名称进行分布式词向量训练过程中,是为每一个疾病训练疾病特征向量,将高维度、高稀疏度的疾病名称,映射为低维度、低稀疏度的疾病向量。同时,根据向量距离的度量方法,度量不同疾病间的相关程度。若一次就诊行为有多次疾病确诊,即有多个疾病向量,则将这些疾病向量按元素相加,成为疾病向量和。步骤3,对疾病诊断数据进行预处理:每名患者所有次就诊行为所确诊的疾病作为就诊序列,删除就诊行为次数小于5的就诊序列,且删除就诊序列中相邻两次就诊行为后一次中重复确诊的疾病,得到预处理后的就诊序列作为循环神经网络训练样本。步骤4,循环神经网络的训练:将循环神经网络训练样本输入到循环神经网络模型中,利用词向量映射矩阵将训练样本转化为疾病向量;将确诊的历史疾病转化为向量,并作为循环神经网络模型的真实输出,利用疾病向量对循环神经网络进行训练,得到患病风险预测模型。本发明中采用的循环神经网络如图3所示,循环神经网络是一种循环结构,每次循环的处理过程都有一个输入结点、一个隐层结点以及一个输出结点,U、V、W是三个线性变换矩阵,xt是一次就诊行为对应的词向量,由多种疾病的词向量相加得到;S是隐层向量,表示目前身体状态;o是最后的输出,表示预测患病,它们间的转换公式如下:st=f(Uxt+Wst-1)ot=softmax(Vst)f()函数是线性变换后的激活函数,实现非线性映射,softmax()是将输出归一成概率的函数。每次输入后都会在隐层结点产生对这次输入的记忆,并会结合之前的所有记忆及当前输入作为预测结果进行输出,实现有时序的预测。因此,该循环神经网络的每次完整的循环过程,是一段完整的就诊序列。每个循环内的处理过程处理的是就诊序列中的一次就诊行为的所有疾病。以一个病人的就诊序列为例,假设他有3次就诊行为,第一次就诊行为诊断为A病,第二次就诊诊断为B、C两个疾病,第三次就诊行为诊断为D病,则其就诊序列为(A)(BC)(D)。循环神经网络第一次将疾病A作为输入,产生对疾病A的记忆,并将记忆传递给第二次就诊行为,则第二次就诊时,循环神经网络的输入为疾病B、C以及上一次就诊的记忆,同时形成新的记忆,作为下一次的输入。实际上,在循环神经网络模型中,每一个输入结点的输入数据是经过词向量映射转化为低维度、低稀疏度的疾病向量。此步骤中,根据循环神经网络的预测输出和真实输出的误差情况,修改循环神经网络内部权值,以降低预测误差,具体采用随时间反向传播(BPTT)算法:选择tanh函数作为隐含层的激活函数:st=tanh(Uxt+Wst-1)选择softmax函数作为输出层的激活函数:yt'=softmax(Vst)选择交叉熵函数作为损失函数:以图3为例,yt'表示输出ot,yt*是真实的患病,本发明希望yt'=yt*,能够准确的预测疾病。函数Et(yt*,yt')表示第一次的输出(如ot)的误差;函数E(y,y')表示多次输出(如ot-1,ot,ot+1)的误差的平均。BPTT是求出误差对所有参数的梯度,然后使用梯度下降方法对参数进行优化。因为E(y,y')是所有输出单元的累加,根据微分特性,可以得到总的微分为各个部分微分的和:为了求各个参数的梯度,使用链式法则。例如我们要计算E3对V的梯度时,根据链式法则,有如下公式:其中,z是输出层激励函数的输入。由于参数V是输出层的参数,该参数值依赖于该事件点t的yt'、yt、st。但对于其他参数如W,它不仅受当前时间点t的影响,同时也受之前的时间点影响。同样以E3对W的梯度为例,根据链式法则,它的梯度公式为:此时,s3=tanh(Ux3+Ws2)只依赖于s2,而s2依赖于s1和W的,依次类推。因此,如果对W进行求导,不能将s2作为常量,需要继续使用链式法则,来推导该公式:其中,Sk表示第k个时间点的状态,k表示时间点。由于每个时间点上的参数W对E3都有影响,所以E3对W的梯度是E3对每个时间点上的W的梯度的累加。在得到误差对每个参数的导数值时,即得到了当前的梯度值。根据梯度下降算法,参数向量减去梯度向量及学习率的乘积,为一次参数迭代过程。经过多次参数迭代,将得到最终的参数向量,即得到了最终的模型。步骤5,将病人历史记录中每种疾病诊断数据作为一个测试样本,按照疾病诊断的先后顺序依次输入患病风险预测模型,得到未来时刻所有疾病的患病概率,选择患病概率前R大的疾病作为疾病预测的输出。本实施例中,训练过程:训练数据采用的是某医院40万名患者的疾病诊断数据,其中,这40万名患者中,共含有4000种疾病,诊断次数大于等于5次的患者有12万名,利用以上数据训练得到患病风险预测模型。根据场景情况,以召回率作为模型评价指标,综合对比最高频疾病作为结果,逻辑回归模型等模型,发现使用循环神经网络的模型具有最高的召回率。MODELSRECALLMOSTFREQ.0.119LR-10.404LR-40.543RNN0.575以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1