【写在前面】本论文是发表在NIPS2018上关于疾病预测的论文,其方向为心力衰竭预测,最后的结果是一个二值型分类任务,它利用了EHR中的内在的层次结构,辅助于一些预测任务来疾病预测。该文章有好多附录,可以仔细看一下实验细节。综合来看,能发在NIPS上读论文应该都是非常不错的,但是这一篇文章的实验部分并没有一些其他的模型,而是自己和自己比较,来证明自己的结论。不知道是因为该方向本身就是个空白还是说其他的什么原因。
论文地址:https://arxiv.org/pdf/1810.09593v1.pdf
论文源码: https://github.com/mp2893/mime
Motivation
1.现有疾病诊断模型通常需要的训练数据量都超过了大多数医疗保健系统的容量,即需要的训练数据量太大,在一些罕见疾病和ICU中无法提供大数据量的训练数据。
2.有一些方法尝试利用外部资源,例如医疗本体,来克服数据量的限制,但是很多时候由于医疗本体术语和电子健康记录中术语的不同,无法直接使用外部资源。
Idea
1.提出利用EHR内在的层次结构进行疾病预测
2.加入了联合辅助预测任务,可以更好地将模型推广到训练过程中看不到的病人
作者利用EHR数据的内部多层次结构,学习数据的多层嵌入,同时联合执行辅助预测任务。即一种多层次医学嵌入(MiME),同时将EHR数据中的固有的多层次结构转换为多层次嵌入,同时联合执行反映这种固有结构的辅助预测任务,而不需要外部标签。主要在两个任务上进行实验,即心衰预测和连续性疾病预测。
Method
对于一个单独的病人,每个病人记录都会包括多次访问(visit),每一次访问中医生都会给定一个诊断(diagnosis)以及相应的药物(medication)和检查程序(procedure)。此过程生成一组治疗(treatment)(药物和程序)代码以及诊断和治疗代码之间的关系。MiME旨在明确捕捉诊断代码和治疗代码之间的关系。
MiME的记号说明
某一个病人有一系列visits
V
(
1
)
,
.
.
.
,
V
(
t
)
V^{(1)},...,V^{(t)}
V(1),...,V(t),每个
V
(
t
)
V^{(t)}
V(t)都包含一系列诊断(Dx)对象
O
1
(
t
)
,
.
.
.
,
O
∣
V
(
t
)
∣
(
t
)
O_1^{(t)},...,O_{|V^{(t)}|}^{(t)}
O1(t),...,O∣V(t)∣(t),每个
O
i
(
t
)
O_i^{(t)}
Oi(t)包含一个单个Dx code
d
i
(
t
)
∈
A
d^{(t)}_i \in A
di(t)∈A和一系列相关的treatments
M
i
(
t
)
M^{(t)}_i
Mi(t)(medication or procedures)。每个
M
i
(
t
)
M^{(t)}_i
Mi(t)包含一系列treatment codes
m
i
,
1
(
t
)
,
.
.
.
,
m
i
,
∣
M
i
(
t
)
∣
(
t
)
∈
B
m^{(t)}_{i,1},...,m^{(t)}_{i,{|M^{(t)}_i|}} \in B
mi,1(t),...,mi,∣Mi(t)∣(t)∈B。
MiME Model
每一个单独吃visit都可以用给一个二值向量表示 x ( t ) ∈ { 0 , 1 } ∣ A ∣ + ∣ B ∣ x^{(t)} \in \{0,1\}^{|A|+|B|} x(t)∈{0,1}∣A∣+∣B∣,每个维度都表示一个Dx和Treatment,然后该二值向量会经过一个全连接层,将其压缩到一个低维的向量空间中:
v ( t ) = σ ( W x x ( t ) + b x ) v^{(t)} = \sigma (W_x x^{(t)}+b_x) v(t)=σ(Wxx(t)+bx)
得到每一个visit表示只有,利用给一个映射函数(RNN or RNN+CNN)将所有的visit映射得到最终的病人表示h.
h = h ( v ( 1 ) , v ( 2 ) , . . . , v ( t ) ) \boldsymbol{h}=h(v^{(1)}, v^{(2),...,v^{(t)}}) h=h(v(1),v(2),...,v(t))
MiME模型如下:
相关公式如下,其中公式(1)、(2)、(3)分别描述了visit level、diagnosis level 和 treatment level。
公式(1):
公式1表示了visit level的计算过程,通过将 o 1 , . . . , o ∣ V ∣ \boldsymbol{o}_1,...,\boldsymbol{o}_{|V|} o1,...,o∣V∣,进行累加,然后经过一个权重矩阵映射之后输入到激活函数中,最后与残差连接F累加作为第t个visit的输出
公式(2):
公式2表示diagnosis level的计算过程, r ( d i ) r(d_i) r(di)表示第i个Dx的嵌入, g ( d i , m i , j ) g(d_i,m_{i,j}) g(di,mi,j)表示第i个Dx与其第j个treatment的相互影响,计算方式如公式3所示,对于第i个Dx,将其自身的嵌入向量和其余 ∣ M i ∣ |M_i| ∣Mi∣个相互影响的向量进行累加,然后经过权重矩阵映射后,输入到激活函数中,最后与残差连接G累加作为第i个Dx的输出。
公式(3):
公式3表示每个Dx与其所涉及到的treatment之间的相互关系的计算过程,首先将Dx的嵌入向量经过映射矩阵后,输入到激活函数中,然后与其他的treatment嵌入向量进行按位乘操作。
为什么要先将Dx的嵌入向量进行映射之后再进行按位乘??
原因:收到现在的双线性池化技术的启发,首先将Dx映射到一个潜在的向量空间,然后就可以有效的捕捉到Dx和treatment之间的相互作用。论文附录A中有解释。
辅助任务的联合训练
患者嵌入h通常用于特定的预测任务,如心力衰竭预测或死亡率。在该模型还使用了辅助预测任务,即利用Dx的嵌入向量去预测Dx code d i ( t ) d_i^{(t)} di(t)和相关的treatment code m i , j ( t ) m_{i,j}^{(t)} mi,j(t),其计算公式如下:
其中,U为映射权重矩阵。
辅助预测任务的损失函数如下:
其中,CE()为交叉熵函数。
辅助任务是基于EHR的内在结构的,不需要额外的标签,该任务可以指导模型去学习Dx的嵌入向量 o i ( t ) o_i^{(t)} oi(t),正确捕获visit中的事件是所有下游预测任务的基础,这些通用的辅助任务结合特定的目标任务,鼓励模型学习访问嵌入v(t),它们不仅针对目标预测任务,而且基于通用的基础知识。
Experiments
Source of Data
数据库共涉及到50-85岁之间的30764个病人,616073个EHR,其中根据Clinical Classifification Software for ICD9-CM将疾病分为388个类别,根据Generic Product Identififier Drug Group将medication分为99个类别,将procedure分为1824个类别。
Baseline Models
首先对于病人每次的visit嵌入向量采用GRU进行预测,但是visit的初始向量的计算方式不同:
-
raw:直接采用二值向量 x ( t ) ∈ { 0 , 1 } ∣ A ∣ + ∣ B ∣ x^{(t)} \in \{0,1\}^{|A|+|B|} x(t)∈{0,1}∣A∣+∣B∣表示
-
linear:将上面的二值向量通过一个全连接层进行线性变换到一个低维的向量空间中
-
sigmoid,tanh,relu: 将通过线性变换之后的低维向量通过一个非线性层
-
sigmoid_mlp,tanh_mlp,relu_mlp:增加两个线性变换和非线性层, v ( t ) = σ ( W x 2 σ ( W x 2 x ( t ) ) ) v^{(t)} = \sigma(W_{x_2} \sigma(W_{x_2}x^{(t)})) v(t)=σ(Wx2σ(Wx2x(t))).
其次,没有采用二值向量的初始化方法,采用了预训练模型初始化visit向量的方法:
- Med2Vec: 使用Med2Vec初始化visit向量,作为预测模型的输入
- GRAM:使用方法同上
Prediction Tasks
heart failure prediction 实验进行了心力衰竭预测,观测窗口为18个月,在30764个病人中,3414个病人在18个月后的一年中被诊断为心力衰竭,剩余的27350个病人的病情得到控制。
此外,模型还运用了逻辑回归的方式,从病人的表示获得一个0-1分布,其中0表示没有获得心衰,1代表患有心衰。模型的评价指标采用了PR-AUC。
Experiment 1: Varying the Data Size
在该部分,作者根据每个病人的visit的次数将数据划分为大小不同的数据集,T_max分别为E1:10,E2:20,E3:30,E4:150,每个数据集的个数为6299 (414 cases), 15794 (1177 cases), 21128 (1848 cases), 27428(3173 cases) patients。具体实验结果如下:
MiME和raw在数据集E1,E2上的差距比E3,E4上的差距更大,这也证明了作者的假设,即利用EHR的固有结构可以缓解数据不足的问题。
Experiment 2: Varying Visit Complexity
根据作者提出的一种计算visit复杂度的方法,对其进行了划分:
将其分为D1:0-15%,D2:15-30%,D3:30-100%,实验结果如下:
首先,通过表中的实验结果证实了MIME确实从Dx代码和处理代码之间的交互中获得了力量,无论是否有辅助任务。在D1数据集中,病人的visit复杂性较小,不存在太多的结构,所以MiME相比于基础模型的提升不是特别大,在一些复杂性比较高的模型上,提升的效果比较明显。
其次,辅助任务确实有助于我更好地推广到训练中看不见的患者。