赵 慧, 容芷君*, 许 莹, 但斌斌, 乔 瀚
(1.武汉科技大学工业工程系, 武汉 430081; 2.武汉市第五医院, 武汉 430050)
中国高血压患者人数已达2.45亿人[1]。高血压合并症是患者血压控制不佳所引发的一系列疾病,其存在严重威胁患者的健康状况。疾病的复杂性和患者个体特征的多样性增加了合并症诊断的难度,因此从医学角度对并发症进行预测十分困难,以机器学习方法为基础的疾病预测模型通过为医生提供临床决策支持[2],可以提高合并症的早期检出效率。常见的疾病预测模型大多针对单一疾病进行分类,然而在实际临床场景中患者可能患有多种合并症。多标签分类是指一个样本同时属于多个标签,合并症预测是典型的多标签分类问题。
多标签分类模型主要分为问题转换和算法适应两大类[3],问题转换方法是基于一定的策略将多标签问题拆解为多个单标签问题,通过逐个学习标签来解决多标签问题,如Ji等[4]提出了一种基于lightGBM(light gradient boosting machine)的疾病预测模型,针对高血压的多种合并症,采用增强策略集成多棵决策树,将多标签分类问题转化为了二分类问题,问题转换方法简单易行,然而单独对标签建模容易导致一些有用的跨类标签信息丢失。算法适应则是对常用的单标签分类算法进行改进以解决多标签分类问题,如Guo等[5]使用ML-KNN(multi-labelk-nearest neighbor) 、RankSVM(ranking support vector machine)等多标签算法构建了疾病预测模型,然而这类算法假设疾病之间相互独立,未考虑标签之间的相关性,存在分类准确性不高的问题。
研究表明疾病之间存在一定关联,有效利用疾病之间的相关性可以提高模型整体的预测效果[6]。Huang等[7]针对不良心血管事件预测问题,通过使用正则化项将不良心血管事件之间的相关性纳入模型。Wang等[8]将疾病之间的局部相关性纳入多标签分类模型,并在ICU(intensive care unit)数据集上进行了实验,结果表明纳入疾病相关性后模型性能有了显著提升。但这类模型仅考虑临床指标等结构化数据,忽略了电子病历中医生提供的描述性和评论性的文本,这类高层次的语义信息往往更能表征患者的健康状况。
为提高合并症预测的准确性,从不同语义空间的临床概念中提取患者特征,全面构建患者特征表示;并在传统多标签分类算法的基础上,构建基于疾病相关性的高血压合并症预测模型,从而为医生提供更为准确的临床决策支持。
高血压是以体循环动脉压增高为主要表现的慢性疾病,研究表明随着病程发展,高血压极易引发严重的心、脑、肾血管并发症,并导致较高的死亡率和致残率[9],其诱发的疾病主要有冠心病、脑梗死、糖尿病、高脂血症等慢性疾病[10]。性别、年龄等患者个体特征以及生化、炎症、血常规等实验室检出指标是高血压合并症最基本的影响因素;另外,患者的症状和疾病史也是诊断合并症的重要依据,例如冠心病的诊断依据为患者存在典型心绞痛、心肌缺血等症状或心肌梗死病史[11]。
电子病历是患者健康信息的重要载体,其中主诉、既往史、现病史这类医学文本描述了患者的症状和病史,而检查数据和患者人口统计学信息这类结构化数据则是患者生理状况的体现,基于以上信息医生可以利用临床知识对患者的疾病进行判断。然而由于患者的个体特征往往呈现出多样性的特点,使得临床决策变得困难。
根据患者的临床特征,经验丰富的医生可以将其归入某一案例模式进行诊断,ML-KNN基于K近邻思想寻找患者的相似组,利用组内患者疾病标签的概率分布结合最大后验概率原则对预测患者的疾病进行判断,该方法已被广泛应用于多标签疾病预测领域。因此在传统ML-KNN算法的基础上构建高血压合并症预测模型AR-MLKNN(multi-labelk-nearest neighbor based on association rules),模型的总体框架如图1所示,首先利用主成分分析(PCA)和主题模型(LDA)从不同语义空间的临床概念中构建了患者特征表示,然后使用关联规则方法从标签空间中挖掘疾病相关性,并利用ML-KNN计算患者对每个疾病标签的隶属概率,在此基础上将疾病相关性和隶属概率相结合计算合并症风险值,最后提出了基于最小化分类损失的阈值调整方法,通过阈值对合并症风险进行判断,从而输出患者合并症的预测结果。
M为患者指标值处于正常水平;L为患者指标值低于正常水平;H为患者指标值高于正常水平;Di为疾病i;Yij为疾病i与疾病j之间的相关性
所用数据来自于武汉市某三甲医院住院患者电子病历,提取了2019年间主要诊断为高血压的患者的电子病历,共5 658份。病历中出现频率最高的5种疾病及国际疾病分类第10版(ICD-10)编码如表1所示,这5种疾病均为高血压的常见合并症,因此选定这5种疾病作为研究对象。
表1 出现频率最高的前五种疾病
为保证数据的安全性,剔除了包括患者姓名、住址在内的全部隐私信息。根据研究需求,从病历中提取患者的年龄、性别、检查、主诉、既往史、现病史,如表2所示。从形式上看,电子病历数据可分为数值型和文本型,病历文本中记载了大量和患者疾病相关性的信息,但其无法为模型直接使用;而检查数据维度高,且不同患者所做的检查也不完全相同。因此,需要对现有数据进行预处理,将其转化为模型可用的特征向量。
表2 数据集中包含的特征
2.2.1 数值特征提取
电子病历中的数值特征主要来自检查数据,检查数据反映了患者的生理状况,基于相关研究,从病历中提取与上述5种合并症相关的检查指标,共162个。由于不同检查指标的取值范围不同,传统的数据预处理采用归一化的方式将不同取值范围的数据映射到区间[0,1]中,然而检查指标需结合相关的临床知识,因此采用式(1)对检查指标进行赋值处理,其中Tl和Th分别为临床意义上该检查指标正常值的下限和上限。针对检查指标中的缺失值赋值为0,表示患者未进行该项检查。
(1)
特征向量维度过高会使模型的计算量急剧增加,带来“维数灾难”,同时部分检查指标之间存在高度的相关性,数据之间存在冗余。主成分分析(principal component analysis,PCA)是一种常用的数据降维方法,其通过计算样本协方差矩阵的特征向量,将高维特征映射到低维空间,可以有效降低特征维度,并消除冗余特征。使用主成分分析对由年龄、性别、检查所构成的高维特征矩阵进行降维,将所得到主成分矩阵记为C,矩阵的元素Cij表示第i个患者在第j个主成分的取值。
2.2.2 病历文本特征提取
与检查数据相比,对于包含语义信息的高层次文本型数据,则需要借助自然语言处理方法将其转换为模型可识别的特征向量。LDA(latent dirichlet allocation)主题模型是一种针对文本中潜在主题信息进行建模的方法[12],通过基于词袋的方法,LDA主题模型可以将非结构化的文本型数据转化为结构化的数值型数据。LDA主题模型认为文本中的每个词的生成过程都是以一定概率选择了某个主题,并从该主题中以一定概率选择了某个特征词,如图2所示。首先采用对电子病历文本进行分词处理,并基于停用词表去除无实际意义的词。使用北京大学开源分词工具Pkuseg对电子病历进行分词[13],该分词工具的特点是支持包括医学在内的特定领域分词;然后计算各特征词的TF-IDF(term frequency-inverse document frequency)值,并将TF-IDF矩阵输入LDA主题模型,得到主题矩阵N,矩阵的元素Nij表示第i个患者属于第j个主题的概率。
图2 LDA主题模型结构示意图
将主成分矩阵C和主题矩阵N合成为特征矩阵M=[C,N],矩阵的行即为患者的特征向量。特征矩阵M包含了不同层次的患者特征,确保了特征的完整性。
在实际医疗场景中,当患者确诊某种疾病后,基于疾病之间的相关性,临床专家能够更为准确的诊断和该疾病高度相关的疾病[8]。关联规则(association rule,AR)常用于揭示事务之间的潜在联系,可从大数据集中产生形式为“A⇒B”的规则,其含义为如果A存在,则B同时存在。因此借鉴关联规则挖掘的思想,发现疾病之间的并发规律,进而量化成对疾病标签之间的相关性。
对于疾病标签空间L={l1,l2, …,lq}令患者标签数据集Y={y1,y2,…,ym},其中yi为第i个患者样本的标签所构成的集合,关联规则算法挖掘疾病相关性的步骤如下。
(1)定义最小支持度minsupp和最小置信度minconf。
(2)对于L中的每个疾病标签l,根据式(2)计算其支持度,可见疾病l的支持度等价于该疾病在患者数据集中的发病率。
(3)令满足条件supp(l)>minsupp的标签构成集合Lf,对于集合Lf中的成对标签lA和LB可生成规则lA⇒LB,根据式(3)可计算规则lA⇒LB的置信度。筛选出大于minconf的全部规则,即为关联规则挖掘的结果。
(3)
通过设定最小支持度和最小置信度,使得关联规则挖掘的结果具有一定的代表性和可靠性。定义疾病li和lj的相关性如式(4)所示,rij值越大,表示当疾病li发生时,疾病lj发生的概率也会相应提高。
rij=conf(li⟹lj)
(4)
关联规则可以量化疾病之间的相关性,为实现合并症预测,还需计算样本对每个疾病标签的隶属概率。ML-KNN是多标签疾病分类的常用算法之一,基于样本K邻域内标签的概率分布,ML-KNN以后验概率的方式计算样本对每个疾病标签的隶属概率。
基于ML-KNN算法计算患者疾病标签隶属概率的方法描述如下:
令X={x1,x2,…,xm}表示患者样本空间,xi为第i个患者的特征向量。首先基于欧式距离计算样本之间的距离:
(5)
对于样本xi,基于样本之间的距离确定其k近邻N(xi)。令事件Hj表示具有疾病标签lj,Cj表示N(xi)中标签lj出现的次数。则xi对疾病lj的隶属概率可表示为
(6)
(7)
(8)
(9)
ML-KNN算法使用简单且分类性能高效,通过标签隶属概率是否大于0.5对患者进行分类,但该方法在模型训练过程中并未考虑标签之间的相关性,因此ML-KNN算法存在优化改进的空间[14]。为提高合并症分类的准确性,引入疾病相关性信息对ML-KNN算法进行改进,提出了基于疾病相关性的合并症分类方法。
对于患者数据集X以及标签空间L,首先基于关联规则得到疾病标签之间的相关性矩阵Rq×q,是对角线元素为1的q阶方阵,其元素rij表示疾病标签li和lj的相关性,即当疾病li发生时,疾病lj也会同时发生的可能性;其次根据MLKNN算法求得标签隶属概率矩阵Pm×q,矩阵的元素pkj表示患者xk患有疾病lj的概率。将标签隶属概率矩阵和疾病相关性矩阵相乘,构建合并症风险矩阵。
P′m×q=Pm×q×Rq×q
(10)
对于患者xk,其对应疾病lj的风险值如式(11)所示,公式由两部分构成,第一部分是由MLKNN所输出的疾病隶属概率,第二部分为其他疾病对预测疾病概率的影响,影响程度由疾病之间的相关性决定。因此合并症风险考虑了疾病之间的成对相关性,不仅体现了患者个体的疾病特征,还包含了合并症之间的相互影响。
(11)
分类模型往往通过设定阈值来对分类结果进行判断,阈值的选择对分类结果的准确性具有重要影响。对于用于临床辅助决策的合并症分类模型,过高的阈值会降低模型的召回率,影响疾病的检出效率,过低的阈值又会增加模型误诊的几率。因此需要确定合适的阈值,以获取最优的分类结果。多标签问题常使用汉明损失来度量分类结果的准确性,汉明损失的计算如式(12)所示,其中h(xi)为模型输出样本xi的标签集合,yi为样本xi的真实标签集合,Δ为两个集合之间的对称差,即h(xi)和yi中不同元素的个数。汉明损失越小,分类准确性越高。
(12)
因此将汉明损失作为模型的损失函数,设定阈值t,当p′ij大于t时,则认为患者患有疾病lj,不断调整阈值t并计算相应的汉明损失,基于损失最小的原则确定最优的阈值t。
h(xi)={lj|p′ij>t, 1 (13) (14) AR-MLKNN算法的流程如下: 算法1 AR-MLKNN 除了汉明损失外,实验采用精确率(precision)、召回率(recall)、F1-score等多标签分类评价指标对AR-MLKNN多标签分类模型的有效性进行评价,各个指标的定义和说明如下。 precision表示对于某一标签,预测正确的标签数量与预测为该标签数量的比值的均值,即在所有预测为正例的样本中,模型预测的正确性。 (15) recall表示对于某一标签,预测正确的标签数量与实际为该标签数量的比值的均值,即在所有实际值是正例的样本值,模型预测的正确性。 (16) F1-score是precision和recall的综合体现。该指标越大,模型性能越优。 (17) 利用关联规则对疾病相关性进行分析,设定最小支持度minsupp和最小置信度minconf为0.01,共得到446条强关联规则,采用置信度代表疾病之间的相关系数,其中前5种疾病的相关系数如图3所示,可见,相关系数最高的三对疾病分别是:2型糖尿病(E11.900)→脑梗死(I63.900),相关系数为0.34;2型糖尿病(E11.900)→高脂血症(E78.500),相关系数为0.27;2型糖尿病(E11.900)→冠心病(I25.103),相关性为0.22,可见高血压合并糖尿病会进一步增加脑梗死、冠心病等心脑血管疾病的发病概率。同时冠心病(I25.103)和脑梗死(I63.900)之间也显示出较高的相关性。 图3 疾病相关性挖掘结果 针对武汉市某三甲医院电子病历数据,提取结构化的检查特征和非结构化的文本特征,以高血压患者常见的5种合并症作为标签集合,构建多标签数据集。对数据集进行划分,70%的样本作为训练集,30%的样本作为测试集。图4展示了参数k和阈值t对模型性能的影响,实验结果表明,当k=5,t=0.8时,AR-MLKNN模型的性能最优,此时汉明损失为0.065。当k过低时,样本邻域内标签信息较少,而k过高则会引入更多的噪声,从而降低模型的分类性能。观察不同k下阈值变化对模型性能的影响,可见过高或过低的阈值都会降低模型的准确性,过低的阈值增加了模型误诊的几率,而过高的阈值又会使模型过于严格,影响疾病的检出效率。 图4 不同参数k下汉明损失随阈值t的变化曲线 图5展示了AR-MLKNN模型对5种疾病标签的分类性能,可见模型对高脂血和冠心病具有较好的分类准确性,对腔隙性脑梗死的分类准确性相对其他疾病较低,究其原因,腔隙性脑梗死样本量较低,且大多数腔隙性脑梗死患者在早期无明显的临床症状[15],导致模型对其识别准确性较低。图6展示了仅以数值特征作为输入时,AR-MLKNN模型5种疾病标签的分类性能。与图5相比,引入文本特征后,模型对冠心病的预测准确性有了大幅提升,病历文本中的症状和病史等信息是诊断冠心病的重要依据,仅使用数值特征模型无法对冠心病进行准确的识别。 图5 AR-MLKNN对5种疾病的分类性能 图6 仅输入数值特征时AR-MLKNN对5种疾病的分类性能 表3验证了引入文本特征和疾病相关性对分类结果的影响,实验结果表明:①验证了引入文本特征对模型性能的影响,相较于仅使用结构化的数值特征,引入文本特征后模型的精确率和召回率均有了一定提升;②以数值特征和文本特征作为输入,相较于传统的ML-KNN分类模型,AR-MLKNN模型(k=5,t=0.8)的召回率提升了14%,F1-score提升了8%,即考虑疾病相关性可以有效提升模型对疾病的检出效率,进而改善分类性能。 表3 不同模型的性能对比 针对高血压患者合并症预测的多标签分类问题,从患者特征体系构建和标签相关性两个方面对传统多标签分类模型进行改进,构建了基于疾病相关性的高血压合并症预测模型AR-MLKNN。 (1)将同一样本的文本特征添加到数值特征中,得到新的特征矩阵,相较于仅使用单一的结构化数据,综合考虑非结构化的文本信息可以实现患者不同语义空间的特征提取,更全面地挖掘患者特征,提高模型分类准确率。 (2)传统的ML-KNN使用标签隶属概率对合并症进行分类,AR-MLKNN基于疾病相关性对分类过程进行改进,采用合并症风险值替代标签隶属概率,使其既包含患者个体特征,又包含合并症之间的相互影响。根据合并症风险值,AR-MLKNN基于最小化分类损失原则迭代计算不同阈值下模型的分类损失,选取最优的分类阈值以确保模型获取全局最优的分类结果。实验结果表明,与传统的ML-KNN模型相比,在分类阶段考虑疾病相关性可以有效提升模型的召回率,使模型具有更优的分类性能。3.4 方法评价指标
4 实验结果
4.1 疾病相关性挖掘结果
4.2 合并症预测结果
5 结论