■ 摘要:
EHR的二次利用有助于临床研究和临床决策,但EHR数据的整理表征限制了使用EHR数据进行预测的模型的广泛实践。这里提出了一种新颖的无监督深度特征学习方法,该方法可从EHR数据中获得通用的患者表征,从而有助于临床预测建模。特别是,使用三层去噪自动编码器堆栈来捕获来自西奈山数据仓库的约700,000名患者的汇总EHR中的分层规律性和依存关系。结果就是我们称为“深层患者”的表示。我们通过评估患者罹患各种疾病的可能性,将该代表评估为对健康状况的广泛预测。我们对76,214名测试患者进行了评估,这些患者包括来自不同临床领域和时间窗的78种疾病。我们的结果大大优于使用基于原始EHR数据和替代特征学习策略的表示所获得的结果。严重的糖尿病,精神分裂症和各种癌症的预测性能最高。这些发现表明,应用于EHR的深度学习可以派生出能够改善临床预测的患者表征,并且可以为增强临床决策系统提供机器学习框架。
■ Introduction:
精准医疗的首要任务是确定一个量化模型来预测病人的状况,进来的研究已经取得了诸多成果,但基于现在机器学习的预测模型还没有广泛而可靠的应用于医疗系统。
EHR数据中数据的不完善性,统一病症的多种术语描述等增加了机器学习方法的应用难度。
预测算法的成功很大程度上取决于特征选择和数据表示。 电子病历的一种常见方法是让领域专家指定要寻找的模式(即学习任务和目标)并以临时方式指定临床变量。尽管在某些情况下合适,但对特征空间的监督定义的缩放比例很差,不能很好地泛化,并且错过了发现新颖图案和特征的机会。 为了解决这些缺点,已经提出了在电子病历中采用数据驱动的特征选择方法[14,15,16]。 这些方法的局限性在于,通常将患者表示为由临床数据仓库中所有可用数据描述符组成的二维向量。 这种表示是稀疏的,嘈杂的和重复的,这使其不适用于对嵌入或隐含在EHR中的分层信息进行建模。
无监督特征学习试图通过自动识别数据中的模式和依赖性来克服监督特征空间定义的局限性,以学习紧凑而通用的表示形式,从而在构建分类器或其他预测变量时更容易自动提取有用的信息。 尽管通过文本,多媒体和营销进行的特征学习取得了成功,并且深度学习(即基于神经网络层次结构的学习)日益普及,但这些技术并未广泛用于EHR数据。 在这里,我们表明,将无监督的深度特征学习应用于预处理的患者水平的汇总EHR数据,可以使机器更好地理解这些表示,并显着改善针对各种临床情况的预测性临床模型。
本文提出了一个新颖的框架,我们称之为“深度患者”,它通过一组一般特征来代表患者,这些特征是通过深度学习方法从大型EHR数据库中自动推断出来的。具体来说,使用由一堆降噪自动编码器组成的深度神经网络以无监督的方式处理EHR,从而捕获了数据中的稳定结构和规则模式,这些数据组合在一起构成了深度患者表示。深度患者是无领域的(即,自从大型多域数据集学习以来,与任何特定任务无关),不需要任何额外的人工操作,并且可以轻松地应用于有监督和无监督的不同预测应用程序。为了证明所提出的表示的有效性,我们应用了深度患者来预测患者未来的疾病,并表明,在大规模的现实世界数据实验中,深度患者始终优于原始的EHR表示以及通用(浅)特征学习模型。
■ 材料和方法:
深度病人表征:
图1显示了用于导出深层患者代表的高级概念框架。 首先从临床数据仓库中提取EHR,对EHR进行预处理以识别和规范化临床相关的表型,然后将其分组到患者向量中(即原始图1A)。 可以仅通过单个矢量或通过在例如预定的时间窗中计算出的矢量序列来描述每个患者。 从所有患者那里获得的向量集合被用作特征学习算法的输入,以发现一组高级通用描述符(图1B)。 然后,使用这些功能来表示数据仓库中的每个患者,并且这种深度表示可以应用于不同的临床任务(图1C)。
我们在深度学习架构中(即深度患者)使用多层神经网络来推导患者表示形式。 通过优化本地无监督标准(图2),对网络的每一层进行训练,以基于其从下一层输入的数据生成观察模式的高层表示。 每个级别产生的输入模式表示都比前一个级别更抽象,因为它是通过组合更多的非线性操作获得的。 这个过程大致类似于认知的神经科学模型,将低级特征分层组合为统一而紧凑的表示形式。 链的最后一个网络输出最终的患者代表。
自动降噪编码器:
我们通过使用一种降噪自编码器(SDA)实现了我们的框架,其是逐层独立训练的;该架构中所有的自编码器具有同样的结构和功能。简而言之,一个自编码器首先获得一个输入x,通过编码器将其映射为隐藏表征y,然后再用解码器将y映射为一个重构向量z。希望代码y是一种分布式表示形式,可以捕获沿数据变化的主要因素的坐标。 训练模型时,算法会搜索使x和z之间的差异最小的参数(即重构误差)。
自编码器常被训练用于重构来自初始数据有噪声版本的输入(即:降噪)以防止过拟合。这一过程首先是通过一个随机映射破坏初始输入 x 以得到一个部分被破坏的版本。然后这个被破坏的输入再通过基本自编码器被映射为一个隐藏的表征y,然后再映射成解码的表征 z 。我们使用掩蔽噪声算法实现了输入破坏,其中随机选择的元素x一部分y变为零(这里应该是将x的一部分元素值设为0)。这可以被看作是模拟 EHR 中缺失组件的存在(如,未被记录在患者病历中的药物或诊断),从而假设输入的临床数据是实际临床状况的降级或「噪声」版本。然后所有关于这些被遮掩的组件的信息将被从输入模式中移除,而去噪自编码器就可以被看作是为填补这些人工引入的空白而训练的。模型中的参数 θ 和 θ’ 通过训练数据优化以最小化平均重构误差。我们用作损失函数的是重构交叉熵函数。
优化是通过微型批量的随机梯度下降进行的,它遍历训练病历的小型子集,并在损失函数梯度的相反方向上对参数进行修改,以最小化重构误差。然后学习到的编码函数 fθ(·) 被应用到没有噪声的清洁输入 x 上,其结果编码 y 是分布式表征(即 SDA 架构中以后的自编码器的输入或最终的深度患者表征)。
■ 评估设计:
特征学习算法通常在监督式应用中进行评估,以利用可用的手动标注的标签。在这里我们使用了西奈山医院数据仓库来学习深度特征,然后我们通过它们对患者未来疾病的预测而对它们进行评估。西奈山医疗系统从其医疗保健和临床手术中生成了大量结构化、半结构化和非结构化数据,其中包括住院、门诊和急诊。该系统中的患者可以受到长达 12 年的跟随调查,除非他们搬家或改变保险。从 2003 年开始,电子记录已被我们的医疗系统逐步完全采用。2003 年之前与到该医院就诊的患者相关的数据也迁移到了电子格式,但我们可能会缺乏一些医院就诊的具体细节(即一些诊断和用药可能未被记录或迁移)。整个 EHR 数据库包含大约 420 万份去除了身份标识的 2015 年 3 月之前的病历,其使用遵循 HIPAA 法案的 IRB 许可。我们保留了 1980 年到 2014 年之间所有至少一种 疾病被表述为ICD-9 编码的患者的数据。最终得到了一个包含大约 120 万患者数据的数据集,其中每个患者平均拥有 88.9 个记录。然后我们将 2013 年 12 月 31 日(即分割点)之前的数据用作训练数据(即 34 年的训练信息),2014 年的所有诊断则被用作测试数据。
■ EHR处理
对于数据集中的每位患者,我们保留了一些基本的人口统计学详细信息(即年龄,性别和种族),以及以结构化格式提供的常见临床描述符,例如诊断(ICD-9代码),药物,程序和实验室检查, 以及分割点之前记录的自由文本临床注释。所有的临床记录都通过 Open Biomedical Annotator(开放生物医学标注)进行了预处理,以获得手术和实验室测试的统一代码、基于品牌名称和剂量的标准化后的用药,并从自由文本笔记中提取临床概念。
对记录标准化的处理因数据类型而有不同。对于诊断、用药、手术和实验室测试,我们只需计算患者 EHR 中每一个标准化代码的存在的次数,以便于相关临床事件的建模。自由文本临床笔记需要更复杂的处理。我们使用了 LePendu 等人描述过的工具,其可以帮助识别否定标签和与家族病史相关的标签。这些笔记中出现的否定标签被认为是不相关和不可用的[5]。否定标签使用 NegEx 识别,这是一个使用了几种表示否定的词组的正则表达式算法,能够过滤包含了看起来被误认为是否定词组的句子,并能限制否定词组的范围。与家族病史相关的标签只是标记了相关病史,并与病人直接相关的标签相区分。然后我们分析了时间连续的笔记中表达的相似性,移出了重复的信息(如,被错误地记录了两次的信息)。
被解析的笔记然后被进行了进一步的处理以减少表征的稀疏度(提取了大约 200 万个规划化的标签)和获得嵌入式临床信息的语义抽象。我们使用主题建模为解析后的笔记建模——一种无监督的推理过程,该过程捕获文档中单词共现的模式以定义主题并将文档表示为这些主题的多项式。主题建模已在很多研究中被用来归纳临床笔记和改善患者数据的自动处理。我们的主题建模的实现使用了隐含狄利克雷分布(latent Dirichlet allocation),我们通过 100 万份随机笔记的困惑度分析(perplexity analysis)估计了主题的数量。我们发现有 300 个主题获得了最好的数学归纳;因此,每个注释最终被归纳为300个主题概率的多项式。对于每一位患者,我们最终保留了一个在分割点前所有可用笔记上平均化的基于主题的表征。
■ 数据集
为了评估的目的,所有带有至少一个记录的 ICD 代码的患者被分割在了三个独立的数据集中(即,每个患者只在一个数据集中出现)。首先,我们保留了 81,214 个在 2014 年至少有一个新 ICD-9 诊断且之前至少有十条记录的患者。这些患者组成了验证集(即 5,000 个患者)和测试集(即 76,214 个患者)以用于监督式评估(即:未来疾病预测)。尤其上,2014 年所有的诊断都被用于评估使用分割点前的患者数据计算出的预测(即:根据患者的临床状况做出的预测)。每位患者至少拥有十个记录的要求是为了确保每个测试案例都有一定最小量的临床历史,这样才能得出合理的预测。然后我们随机取样了 200,000 个在分割点前至少有五个记录的不同患者的子集,以用作疾病预测实验的训练集。
我们使用ICD-9编码对病人的疾病诊断进行陈述,但由于同样的病可以使用不同的编码来表示,因此我们将编码映射到西山医院的病名结构中,从而得到231中疾病。过滤此列表以保留仅具有至少10名受过训练的患者的疾病,并且还经过执业医师的手动修饰,移出了所有不能仅用 EHR 标签就能预测的疾病——有的疾病涉及社会行为(如 HIV)和外部生活事件(如受伤、中毒),或太过笼统的疾病(如:「其它形式的癌症」)。最终得到的词表包含 78 种疾病,具体可在线查阅补充附录 B。
最后,我们使用剩下的在 2013 年 12 月之前至少有五项记录的患者的数据创造了用于特征学习算法的训练集。选择每位患者至少五项记录的原因是移出一些信息不足的案例和减少训练集大小,以及最终减少训练时间。然后我们得到了包含了 704,587 位病人和 60,238 项临床描述的数据集。再后,从数据集中删除出现在80%以上患者中的描述符或少于五名患者中的描述符,以避免在学习过程中出现偏见和干扰,最终词汇表为41,072个。总体而言,用于特征学习的原始患者数据集由 2 亿条非零项组成(即大约为患者描述矩阵中所有项的 1%)。
患者表征学习:
我们在 704,857 位患者的数据集上应用了 SDA 以提取深度患者表征。该数据集中的所有特征值第一次得到了规范化,落到了 0 到 1 之间,以在保留零项的同时减少数据的变化。我们在这种深度架构的所有自编码器中都使用了相同的参数(而不管是那层),因为这样的配置和每层参数不同的情况往往具有相似的表现,而且相同的配置也更易评估。特别地,我们发现当使用验证数据集调整模型时,使用验证数据集调整模型时每层使用 500 个隐藏单元和一个噪声破坏因子(noise corruption factor) v=5% 可以得到良好的泛化误差和一致的预测。我们使用了一种由三层自编码器和 S 型激活函数组成的深度架构(即:「DeepPatient(深度患者)」)。使用不同层数的疾病预测的初步结果可见于补充附录 C 。然后再将训练集和测试集应用于该深度特征模型以进行监督式评估;因此这些数据集中的每一位患者都是用具有 500 个特征的密度向量表示的。
我们将深度患者表征和医学等多种领域中已被证明有效的知名的特征学习算法进行了比较。所有这些算法也都应用于缩放后的数据集,并且仅对原始数据执行了一次转换(即浅度特征学习)。特别要提到,我们考虑了主成分分析(即 100 个主成分的 PCA)、K-均值聚类(即 500 个聚类的 K-均值)、高斯混合模型(即 200 个混合和全协方差矩阵的 GMM)和独立成分分析(即 100 个主成分的 ICA)。特别地,主成分分析通过正交转换将一组可能相关的变量的观测值转换为一组线性不相关的变量,称为主成分,其变量数量少于或等于原始变量的数量。第一个主成分占据了数据中最大的可变性,并且每个后续成分在与前一个成分正交的约束下又具有可能的最大方差值。K-均值将无标签数据分组成 k 个聚类,每一个数据点都属于均值与其最接近的聚类。在特征学习中,每一个聚类的矩心(centroid)都被用于产生特征,即:每一个特征值是数据点与每一个聚类矩心的距离。高斯混合模型(GMM)是一种概率模型,其假设所有数据点都是由有限数量的高斯分布和未知参数混合而成的。独立成分分析(ICA)表示使用了独立的非高斯分量的加权和。随着 DeepPatient 的完成,在初步实验过程中通过优化学习错误或期望以及在验证集中获得的预测结果确定了每个模型的潜在变量数量。我们还包括了在去除频繁变量和罕见变量后基于原始描述符的患者表征。
未来疾病预测:
我们使用200,000名患者的数据集实施了针对每种疾病训练的随机森林分类器,并用它通过病人的当前临床表征,来预测之后发展出某种疾病的可能性。我们使用随机森林的原因是,它的表现通常比其它标准分类器要好很多,易于调节,并且对过度拟合的适应性更强。在对于校验数据库的初步测试中,我们将每一项疾病的分类器调节为含有 100 个树的结构。对于测试集中的每一位患者(以及所有不同表征),我们会计算词汇表中每一个疾病发生的概率(例如,每一位患者都以发病概率的向量来表示)。
■ 结果
我们在两项适用的临床任务中评估了疾病预测:疾病分类(如,评估疾病)和疾病诊断(如,评估患者状况)。对于每个患者,我们只考虑新出现的疾病,而忽略二次诊断的疾病。除了另外说明的情况,实验使用的矩阵上限均为一。
疾病评估:
为了测量深度患者在预测某位病人是否身患新疾病方面,表现如何,我们评估了分类器在判定患者是否可能被诊断出某种疾病(时隔一年)方面的能力。每种疾病,我们都记录下了测试组(76214位患者)所有病人的值(scores),测量了处在接受者操作特征曲线下的区域(比如,AUC-ROC),准确性以及 F值。ROC曲线是在一组预测中找到的真阳性与假阳性的关系图。 通过对ROC曲线进行积分来计算AUC,其下限为0.5。准确性是真实结果(真实阳性和阴性阴性)在所检查病例总数中的比例。Fscore是分类精度和召回率的调和平均值,其中precision是正确的阳性结果数除以所有返回阳性结果数,而召回率是正确的阳性结果数除以应该返回的阳性结果数。准确性和Fscore要求一个阈值来区分正面和负面预测; 我们将该阈值设置为0.6,此值可通过减少假阳性预测的数量来优化验证集中所有表示形式的精度和查全率之间的权衡。
表1中报告了所有不同数据表示形式的结果。DeepPatient的性能指标优于RawFeat获得的性能指标(即,没有将特征学习应用于EHR数据)。特别是DeepPatient实现了平均AUC-ROC为0.773,而RawFeat仅为0.659(即提高了15%)。准确性和F分数分别提高了15%和54%,这表明通过对具有深度结构的EHR进行预处理可以提高阳性预测的质量(即实际患该病的患者)。此外,DeepPatient始终显着优于所有其他特征学习方法。表2比较了RawFeat,PCA和DeepPatient针对10种疾病的子集获得的AUC-ROC(有关整个疾病词汇的结果,请参见在线补充附录D)。 DeepPatient总是胜过RawFeat,PCA并不能改善某些疾病。(例如“精神分裂症”,“多发性骨髓瘤”)。总体而言,DeepPatient报告的每种疾病的AUC-ROC得分最高,但“脑和神经系统癌症”的PCA表现稍好(AUC-ROC为0.757对0.742)。对于多种疾病,例如“睾丸癌”,“注意力缺陷和破坏性行为障碍”,“镰状细胞性贫血”和“前列腺癌”,AUC-ROC评分显着提高(即超过60%)。 相反,某些疾病(例如“高血压”,“无并发症的糖尿病”,“脂质代谢紊乱”)难以分类,所有代表的AUC-ROC得分均低于0.600。
患者评估:
在此实验中,我们检查了DeepPatient在患者特定水平上的表现如何。 为了达到这个目的,我们只保留了得分大于0.6的疾病预测(即标签),并针对该时期内所有确诊的患者在不同的时间窗内测量了这些注释的质量。 特别是,我们考虑了在30天(即16,374例患者),60天(即21,924例患者),90天(即25,220例患者)和180天(即33,607例患者)内分配的诊断。 总体而言,我们发现,在所有检查的时间间隔内,DeepPatient始终优于其他方法(表3和图3)。
特别是,我们首先测量了at-k精度(Prec @ k,k等于1、3和5),其将每个时间窗口内分配给每个患者的正确率最高的k个疾病的得分进行了平均化(表3)。在每次比较中我们纳入了理论上界模型(即“ UppBnd”),该模型报告了可能的最佳结果(即,将所有正确的疾病分配给每个患者)。可以看出,当建议每位患者三种或三种以上疾病时,无论时间间隔如何,DeepPatient都会获得约55%的校正预测。此外,当我们将DeepPatient与上限进行对比时,我们发现在任何时候都比其他方法提高了5–15%。最后,我们报告Rprecision,它是所分配疾病的R精确度,其中R是在所考虑的时间间隔内根据地面真实情况进行的患者诊断次数(图3)。同样在这种情况下,与其他模型相比,DeepPatient获得了从5%到12%的显着改进(ICA获得次佳的效果)。
perplexity:在信息论中,困惑度是一种评判概率模型或概率分布预测的衡量指标,可用于评价模型好。——可以理解为在一个位置上出现正确单词的可能性。
主成分分析(即 100 个主成分的 PCA)——设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上用来降维的一种方法。
K-均值聚类(即 500 个聚类的 K-均值)——k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。
高斯混合模型(即 200 个混合和全协方差矩阵的 GMM)——一文详解高斯混合模型原理 - 知乎 (zhihu.com)
独立成分分析(即 100 个主成分的 ICA)——独立成分分析(ICA)是一种用于将[多元]信号分离为加性子分量的计算方法。 [1] 这是通过假设子分量是非高斯信号,并且在[统计]上彼此独立来完成的。ICA是[盲源分离]的特例。一个常见的示例应用程序是在嘈杂的房间中聆听一个人的语音的“ [鸡尾酒会问题]
ICA是一种函数,X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量,[矩阵]ICA的目的就是寻找解混矩阵W(A的逆矩阵),然后对X进行线性变换,得到输出向量U。
随机森林分类器