[Notes] 2019 Machine Learning for Clinical Predictive Analytics
为什么是机器学习?
机器学习是由计算机科学、数学、统计学组成的跨学科领域,也是建立智能机器、实现人工智能的途径。机器学习的思路是利用数据(实例与经验)进行学习,将数据喂给模型,算法会基于数据和特定任务学习到优化函数。这种数据驱动的方法目前在许多研究领域都是最先进的方法,例如计算机视觉(Krizhevsky et al.,2012)、NLP(Yala et al., 2017)、语音文本翻译(Wu et al., 2016; Chung et al., 2018; 2019)。与传统需要专家的临床数据分析不同,机器学习的方法能够帮助我们识别数据内部的模式,使用可生成的预测模型作出个性化的临床预测。
临床预测的学习方案
在临床预测的场景下进行机器学习,可按照以下步骤进行:
- 定义任务的输出
- 咨询领域专家,确定重要的特征/变量
- 选择合适的参数和恰当的算法(或设计一个新的机器学习算法)
- 根据训练集找到优化模型
- 选择合适的评价指标,使用测试集评估模型
- 在真实数据中应用该预测模型
机器学习方案
机器学习有许多学习方案,例如监督学习、无监督学习、半监督学习、强化学习,和迁移学习。我们只关注前两种类型,监督学习和无监督学习,这两种方案的目标都是学习数据的潜在分布,寻找数据的潜在模式。两者的区别是,监督学习拥有标签数据,而无监督学习没有标签数据。
监督学习
如果输出定义得好,监督学习是机器学习任务中最常见的学习策略,例如预测病人死亡率、住院时间、药物反应等。监督学习可以根据预测类型或模型类型分为两类:回归问题和分类问题。对于预测连续输出,使用诸如线性回归的回归模型是合适的;但对于分类问题,应该使用逻辑回归、朴素贝叶斯、决策树、支持向量机一类的回归算法。
例如,对于儿童的身高预测,应该使用线性回归;而对于二值的死亡率,使用SVM更加。无论学习目标是什么,判别模型(回归、决策树、SVM)都是使用数据学习判别边界;而诸如朴素贝叶斯的生成模型则是学习数据的概率分布。
无监督学习
由于缺乏相应的输出变量,无监督学习算法直接从给定的无标签数据中发现潜在结构和模式,机器只能发现数据内部的联系和区别(簇),例如我们可以使用无监督学习发现某种疾病的潜在子类型(Ghassemi et al., 2014)。
其他策略
强化学习:交互。例如通过交互地仿真病人状况和动作,改善模型参数,获得反馈奖励,最终模型收敛。
寻找最佳函数
为了评价预测任务的模型,我们需要定义一些标准,因此我们需要一个损失函数和一个代价函数(目标函数)。损失函数定义的是模型预测值与真值之间的距离,不同的机器学习算法需要使用不同的损失函数;代价函数是每个训练集所有损失之和的平均值,我们可以通过定义代价函数来评价模型表现。

在无监督学习中,没有真实数据去计算损失函数,因此我们直接使用输入数据计算输入与输出的距离。例如,对于自动编码器使用重建损失来评价模型是否能够很好地重建输入数据。
评价指标
选择恰当的评价指标对于优化来说至关重要。
监督学习
在分类任务中,经常使用的评价指标是:
- 准确率 accuracy
- 精确度 precision/ posictive predictive value (PPV)
- 召回率/敏感度 recall/ sensitivity
- 特异性 specificity
- F1分数

我们使用混淆矩阵来展示。
受试者工作特性曲线下的面积(AUROC)也是常用的评价指标,x轴为FPR,y轴为TPR。根据主观选择的阈值不同,FPR和TPR的值可能会改变。

在回归任务中,常用的评价指标是校正决定系数。
- R-square value
- adjusted R-square value(多元)

此外,还有其他用于不同研究目的的回归评价指标,如AIC、BIC信息准则等。
无监督学习
由于缺乏真实标签,无监督学习的评价指标相对而言难以定义,取决于要求的算法模型。例如,K-means聚类算法使用CH指标(数值越大模型越优)和轮廓系数来评价,而自动编码器使用重构误差来评价。
模型验证
下一步是准备好训练模型需要的数据,在实践中,我们把整个数据机分为三个部分:
- 训练集,仅用于模型训练
- 开发集(也就是dev偏差集,验证集,留出集hold-out),用于模型优化和验证
- 用于模型性能测试的测试集,仅在预测时应用
需要注意的问题是:
- 训练集、开发集、测试集需要尽量符合同一分布,否则易出现过拟合。
- 避免在模型训练中使用开发集或测试集的数据。
- 三个子集在全部数据集中所占的比例是不一致的。
交叉验证
一般使用k折交叉验证来减少过拟合。在实际应用中k一般为5或10。测试集不包含在内。

诊断分析
偏差与方差
- 偏差是算法在训练集上的误差,是欠拟合问题,表示模型由于过于简单,不能很好地捕捉到数据的分布。解决方法有:增加模型复杂度,减少正则,增加输入特征。
- 方差是训练集和开发集之间的误差,是过拟合问题,表示模型对新数据难以泛化。解决方案是:简化模型,使用正则相,减少特征数量,或者增加训练数据。

高偏差和高方差有可能因为模型过差同时出现,为了得到最优结果,我们可以重复做实验,找到偏差与方差的平衡点。
画出训练集和验证误差的学习曲线是探究偏差与方差的好方法。

正则化
正则的目的是防止模型过拟合,避免高方差。常用的正则技术有:LASSO回归(L1正则化)、岭回归(L2正则化)、弹性网络回归(L1、L2结合)。在实践中,我们一般给代价函数增加一个惩罚项来作为正则项,L1正则加绝对值,L2加平方项。

误差分析
误差分析是检测模型性能至关重要的一步。为了进行误差分析,需要人工地仔细检查那些开发集中被错误预测地数据,它能让你理解现有算法设定中存在的潜在问题,例如,错误分类的病例通常来自于特殊类别(有心血管疾病的病人常与肾脏病例混淆,由于二者在两个组织系统中有相同的病理学特征),这种错误分类情况可以通过改变模型结构,使其更加复杂,或者增加更多特征来避免。
烧烛分析
烧烛分析是识别模型中重要因素的关键步骤。当你得到了一个理想模型,将它与简单但鲁棒的其他模型进行对比是非常必要的(例如线性回归、逻辑回归模型),这也是研究中十分必要的。
学习算法
(不涉及神经网络算法)
监督学习
线性模型
线性模型常被作为临床机器学习任务的基本模型,在这类算法中,我们一般对回归问题使用线性回归,对分类问题使用逻辑回归。线性模型的优点是它们的解释能力、计算量小、复杂度低;缺点是性能较差。
树状模型
- 树状模型可同时用于回归和分类任务。
- 决策树(CART)是其中最常用的模型,它最大的优点是模型可解释性和行动决定性。
- 随机森林结合了袋装法的概念和下采样特征,在大部分监督学习问题中都有良好表现,是鲁棒的分类器,但主要问题是模型的可解释性。
- Adaboost
- 梯度提升算法
支持向量机(SVM)
支持向量机的目标是找到可以将分离数据划分到两侧的超平面,且使其在特征空间上的间隔最大。

SVM也可使用核技巧,用于非线性可分数据。

常用的核函数有线性核、径向基函数、多项式核函数。我们使用和页损失训练SVM。SVM的优点是表现能力好,但模型的可解释能力差,限制了其在健康领域的应用。
无监督学习
我们可以使用聚类方法把相近的数据点聚集在一起,研究每一簇的特点。也可以使用降维算法将高维数据转换到低维向量空间中。
聚类算法
K均值聚类、EM、分级聚类都是常用的聚类算法。在这里我们只介绍K均值聚类,其目标是找到数据中的潜在群体。

K均值聚类的收敛状态可能是局部最优的,因此需要多次实验来探索不同的结果。用于k值验证的常用方法包括:肘部法则、轮廓系数、CH指标。
降维算法
处理临床数据时,经常需要面对一些高维但稀少的数据集,解决方案是将数据机转到低维的向量空间中。
PCA是线性算法,因此难以解释复杂的多项式关系。
当我们希望探索或可视化高维数据时可以使用t-SNE算法,找到数据的潜在模式。
自动编码器是另外一种基于神经网络结构的降维算法,通过最小化网络输入与输出之间的距离学习数据的表达。
缺陷与限制
从技术层面来看,我们还存在很多有待提高的方向,比如普遍性、更少监督、多模式和多任务训练、学习暂时性和不规则性等等。然而,在发展模型的同时,在将机器学习运用于医疗保健中也存在许多缺陷与限制,比如,当我们使用噪声多的数据时,模型偏置就存在问题。虽然在大部分机器学习临床研究中,因果关系不会直接展示,但它仍然是临床决策的关键。
如何利用机器学习提高工作流,整合人类与机器获取的所有信息,将其转化为临床作用,提高医疗支出,都是未来需要考虑的问题。
练习
[Code]
两个数据集:
- Breast Cancer Wisconsin(Diagnostic) Database
- Preprocessed ICU data from PhysioNet Challenge 2012 Database
