try ai
科普
编辑
分享
反馈
  • 机器学习验证

机器学习验证

SciencePedia玻尔百科
核心要点
  • 验证的基本规则是严格分离训练数据和测试数据,以防止数据泄露并准确衡量模型的泛化能力。
  • 选择合适的指标(如精确率和召回率)对于评估性能至关重要,尤其是在简单准确率具有误导性的不平衡数据集上。
  • 稳健的模型评估需要超越内部验证,进行外部验证和时间验证,以测试模型在新数据源上以及随时间推移的性能。
  • 在医学等高风险领域,一个完整的验证过程包括分析验证(数据质量)、临床验证(预测准确性)和证明临床实用性(改善患者结局)。

引言

机器学习模型日益强大,但其真正价值并非通过它们在已见过数据上的表现来衡量。它取决于模型对来自真实世界的、未见过的新数据做出准确预测的能力——这一概念被称为泛化。模型在研究中的表现与在实践中的效果之间的差距,往往源于有缺陷或不完整的验证,这造成了人工智能系统的信任危机。本文旨在通过对机器学习验证进行全面概述,来填补这一关键的知识空白。

首先,在“原理与机制”一章中,我们将剖析验证的基本规则,从数据泄露这一“原罪”,到选择超越简单准确率的有意义的评估指标。我们将探讨交叉验证等技术,以及内部验证、外部验证和时间验证之间的关键区别。随后,“应用与跨学科联系”一章将展示这些原则如何在现实世界中应用,将抽象的算法转变为从材料科学到临床医学等领域中值得信赖的工具。读完本文,您将理解构建不仅准确而且真正可靠的模型所需的严谨过程。

原理与机制

想象一下,您想教一个学生区分 Van Gogh 和 Monet 的画作。您向他展示了数百个例子,指出其中一位画家旋转的笔触和另一位斑驳的光影。这是​​训练​​阶段。但您如何知道他是否真正学会了这门艺术,还是仅仅记住了您给他看过的特定画作?唯一的方法是给他一次​​测试​​:向他展示一组他从未见过的新画作,并要求他进行分类。这个简单的类比正是机器学习验证的核心所在。我们最终关心的不是模型在已见过数据上的表现如何,而是它​​泛化​​的能力——即对来自真实世界的、未见过的新数据做出准确预测的能力。

首要原则:切勿作弊

所有验证的基础,是将数据清晰地分离为​​训练集​​和​​测试集​​。模型从训练集中学习,其最终“成绩”由其在测试集上的表现决定。这听起来很简单,但在这次考试中,无意中“作弊”却惊人地容易。这种作弊行为被称为​​数据泄露​​或​​信息泄露​​,它发生在任何来自测试集的信息渗透到训练过程中时,这会给模型带来不公平的优势,并导致性能评估结果被人为夸大、不可信赖。

一个经典的错误例子发生在数据预处理阶段。假设我们有一个来自两家不同医院的患者基因表达值数据集,我们想要校正“批次效应”,即一家医院的测量值系统性地高于另一家。一个诱人的捷径是取整个数据集,计算每家医院的平均表达量,并相应地调整所有数据。只有在这次“校正”之后,我们才将数据划分为训练集和测试集。这是一个灾难性的错误。通过使用所有数据计算均值,我们允许了测试数据影响应用于训练数据的转换。实际上,模型等于是在考试前得到了答案的提示。首要原则是:​​任何从数据中学习参数的步骤——无论是计算均值、拟合缩放器,还是选择特征——都必须只使用训练数据来完成。​​ 从训练集学到的参数,可以被应用于转换测试集,以模拟模型在实际应用中遇到全新数据的情形。

这一原则也延伸到数据本身的结构。如果我们有来自同一位患者的多个样本,我们不能随机地将其中一些样本放入训练集,另一些放入测试集。模型可能只是学会识别单个患者独特的生物学特征,而不是疾病的普遍迹象。这会让我们对模型的性能产生一种虚假的安全感。唯一有效的方法是按​​患者ID​​进行划分,确保来自特定患者的所有数据都只属于训练集或测试集中的一个。这个概念可以很好地推广。例如,在蛋白质结构预测中,蛋白质通过共同的进化史(同源性)相互关联。将两个同源蛋白质放在不同的数据分割中是另一种形式的泄露。稳健的解决方案是将这些关系建模为一个图,并确保在划分数据时,相关的蛋白质簇能完整地保留在一起,永不分割。

“好”究竟意味着什么?选择正确的衡量标准

一旦我们有了一个公平的测试,就需要一种有意义的方式来评分。单一的准确率分数,比如“95%正确”,可能会有极大的误导性,尤其是在处理医学领域常见的不平衡数据集时。

想象一下筛查一种罕见病,患病率仅为千分之一。一个“懒惰”的模型,只要简单地将所有人都声明为“健康”,准确率就能达到99.9%!然而,它将是灾难性地无用,因为它会漏掉每一个患病的病人。为了得到真实的情况,我们必须打开​​混淆矩阵​​(confusion matrix),这是分类任务的基本记分卡。它不仅告诉我们有多少预测是正确或错误的,还告诉我们这些正确与错误的性质:

  • ​​真阳性 (TPTPTP)​​:正确地将患病者识别为患病。
  • ​​真阴性 (TNTNTN)​​:正确地将健康者识别为健康。
  • ​​假阳性 (FPFPFP)​​:错误地将健康者标记为患病(误报)。
  • ​​假阴性 (FNFNFN)​​:错误地将患病者判定为健康(危险的漏报)。

由此,我们得出更细致的指标:

  • ​​召回率​​(Recall,或称灵敏度 Sensitivity):在所有实际患病的人中,我们成功识别出了多大比例?即 TPTP+FN\frac{TP}{TP+FN}TP+FNTP​。当漏诊一个病例的代价很高时,高召回率至关重要。
  • ​​特异度​​(Specificity):在所有健康的人中,我们正确地排除了多大比例?即 TNTN+FP\frac{TN}{TN+FP}TN+FPTN​。高特异度对于避免对健康个体进行不必要且昂贵的后续检查至关重要。
  • ​​精确率​​(Precision,或称阳性预测值 Positive Predictive Value):当模型预测为“患病”时,其预测正确的概率是多少?即 TPTP+FP\frac{TP}{TP+FP}TP+FPTP​。

这些指标之间存在固有的权衡关系。大多数模型会产生一个连续的风险评分,我们通过应用一个​​决策阈值​​来进行二元分类。如果我们为了不那么严格而降低阈值,我们会捕捉到更多的病人(提高召回率),但同时也会对健康人群产生更多的误报(降低特异度)。这种权衡是根本性的。

指标的选择必须依据临床背景和疾病的患病率。在我们那个罕见病的例子中,健康人的数量远超病人数量。即使一个特异度非常好的模型(例如,假阳性率很低),也可能产生大量的假阳性绝对数,从而使其精确率急剧下降。这就是为什么​​受试者工作特征(ROC)曲线​​(它绘制了召回率 vs. 假阳性率)对于不平衡问题可能具有误导性。由于其两个轴都以真实状态为条件,ROC曲线对类别不平衡不敏感。它可能展示出一条优美的、曲线下面积(ROC AUC)很高的曲线,暗示性能极佳。然而,​​精确率-召回率(PR)曲线​​则讲述了一个更贴近实际的故事。当我们试图提高召回率(找到更多罕见的阳性病例)时,我们常常会看到精确率出现剧烈而迅速的下降。因此,PR曲线下面积(PR AUC)为模型在不平衡数据上的性能提供了一个更为清醒和信息丰富的总结,这对于罕见病筛查等应用至关重要。

追求真正的泛化

单次训练-测试划分就像一次单独的考试。结果可能是侥幸——也许测试异常简单或困难。为了更可靠地评估模型的能力,我们使用​​交叉验证​​(cross-validation)。在 kkk 折交叉验证中,我们将数据分成 kkk 个块,或称“折”。然后我们进行 kkk 次实验:在每次实验中,我们使用一折作为测试集,其余 k−1k-1k−1 折作为训练集。通过对所有 kkk 折的性能取平均值,我们得到了一个更稳定、更稳健的模型性能估计。

但交叉验证的结果告诉我们的不仅仅是平均分数。各折分数之间的方差是一条至关重要的信息。它量化了我们的​​认知不确定性​​(epistemic uncertainty)——即源于数据量有限的不确定性。高方差意味着模型的性能不稳定,并且高度依赖于其所训练的特定数据子集。因此,我们对平均分数的置信度就较低。

即使是一个稳健的交叉验证结果也只能带我们走这么远。它告诉我们模型在从相同底层分布中抽取的新数据上表现如何。但现实世界是混乱且不断变化的。这就引出了不同验证层面之间的关键区别:

  • ​​内部验证​​:这就是我们一直在讨论的——在来自同一来源(例如,同一家医院、使用相同设备)的数据上使用留出集或交叉验证。它回答的问题是:“我们对这个特定数据集中的模式学得有多好?”

  • ​​外部验证​​:这涉及到在来自完全不同来源——另一家医院、另一个国家或另一台机器——的数据上测试模型。这是一个更难的测试。它回答的问题是:“我们模型的知识能否泛化到一个新的环境中?”

  • ​​时间验证​​:这涉及到在过去的数据(例如,2018-2019年)上训练模型,并在来自同一来源的未来数据(例如,2022-2023年)上进行测试。它测试模型对抗​​数据漂移​​(data drift)的稳健性——即患者群体、临床实践和设备随时间的自然演变。

未能执行外部验证和时间验证是许多在研究论文中看起来非常出色的AI模型在现实世界中无法实现价值的主要原因。真正的泛化不仅仅是在理想化的测试集上表现良好,更是要对一个动态世界中不可避免的变迁和变化保持稳健。

全方位考验:从代码到临床

构建一个不仅准确而且足够值得信赖以用于临床的机器学习模型,是一项艰巨的挑战,远不止是简单地训练一个算法。它涉及一个严谨的、多阶段的验证过程,从技术层面到临床层面,最终到实践层面。

第一步是​​分析验证​​(analytical validation),这一步常被数据科学家忽视。在我们甚至将数据喂给模型之前,我们必须信任产生这些数据的仪器。如果我们使用质谱仪测量蛋白质,该检测方法是否精确、可重现且稳健?我们是否控制了不同运行批次间的批次效应?这个阶段是关于确保我们输入特征 XXX 的可靠性。没有它,我们就是在沙地上构建模型。

第二个也是最广泛的阶段是​​临床验证​​(clinical validation)。这涵盖了我们刚才讨论的所有内容:证明模型在给定可靠输入的情况下,能够在预期使用的群体中准确预测临床结局。一个金标准的临床验证计划包括:

  • 一个在大型、独立、多中心的外部测试集上测试的锁定模型,该测试集从未用于训练或调优。
  • 预先指定的、具有临床相关性的主要终点,例如在可接受的固定特异度下达到高灵敏度。
  • 严谨的不确定性量化,重点关注95%置信区间的下限,为最低性能水平提供合理保证。
  • 广泛的稳健性检查,包括跨不同年龄、性别和种族的亚组分析,以确保模型是公平的,并且不会在脆弱的亚人群上失效。
  • 对数据收集中潜在偏见的敏锐意识,例如​​谱系偏倚​​(spectrum bias),即仅在“病情严重”和“非常健康”的极端病例上进行训练,可能会产生一个AUC完美膨胀至1.0的模型,但该模型在现实实践中占主导地位的、细微且难以分类的病例上会完全失败。

最后,即使一个模型以优异的成绩通过了分析验证和临床验证,也必须面对最终的考验:​​临床实用性​​(clinical utility)。问题不再是“模型是否有效?”,而是“使用该模型来指导决策是否真的能改善患者结局?”一个模型可能极其准确,但提供的信息医生早已知晓,或者它可能不会以一种能带来更好健康状况的方式改变治疗过程。确立临床实用性是最高标准,通常需要进行前瞻性随机试验,其中一组患者接受生物标志物指导的护理,另一组接受标准护理。只有在这样的研究中显示出切实的益处,一个模型才能真正完成其从计算机中的算法到医学中值得信赖的工具的旅程。

这整个验证的严峻考验,从检查硬件到证明患者受益,是建立合理信任的科学过程。这是一门艺术和科学,它在每一步都严谨地追问:“你怎么知道?”——并且在得到满意答案之前绝不停止。

应用与跨学科联系

在了解了机器学习验证的原理之后,人们可能会留下这样的印象:这是一个有些形式化、抽象的事情——无非是划分数据和计算分数。但如果止步于此,就像学会了语法规则却从未读过一首诗。验证的真正魅力只有在实践中才能显现,当它作为连接模型优雅的数学世界与我们自己混乱、复杂且后果重大的现实之间的关键桥梁时。正是这个过程,将一个聪明的模式发现者转变为一个值得信赖的工具。

这不是一个一刀切的过程。我们对模型提出的问题,以及我们必须提出的严谨程度,完全取决于其使用情境。一个向你推荐新歌的模型所面临的证明标准,与一个推荐药物剂量的模型截然不同。让我们来探讨其中一些情境,看看验证的普适原则是如何被调整、扩展和深化,以应对不同科学和人类领域的独特挑战。

基石:物理科学中的验证

或许,机器学习最根本的应用是作为科学发现的伙伴。在物理、化学和材料科学等领域,我们常有一些基于第一性原理的理论,它们非常强大但计算成本高昂。在这里,机器学习可以充当“代理模型”(surrogate model)——一种快速的近似方法,它学习底层物理学复杂的输入-输出关系,而无需每次都从头求解方程。但我们如何信任这样的代理模型呢?

我们用物理学本身来验证它。想象一位化学家使用离子迁移谱技术研究分子的形状。分子的“碰撞截面”(Ω\OmegaΩ),一个衡量其大小和形状的指标,可以通过其在气体中漂移的时间(tdt_dtd​)和一个公认的物理定律——Mason-Schamp方程——来计算。这个计算很精确,但需要特定的实验数据。一个能够直接从分子结构预测 Ω\OmegaΩ 的机器学习模型将极大地加速研究。为了验证这样的模型,我们不仅要将其预测与先前结果的数据库进行核对,我们还可以生成新的、一手实验数据,利用物理定律计算出“基准真相” Ω\OmegaΩ,然后比较模型的性能。这使我们能够量化诸如平均绝对误差之类的误差,并且更细致地检查模型在不同化学类别间的偏倚——也许模型对胺类表现出色,但对氨基酸却处理不佳。

当我们进入材料科学的量子世界时,这个想法就更加深刻了。科学家们构建机器学习原子间势来预测材料的行为,与诸如密度泛函理论(DFT)之类的完全量子力学模拟相比,节省了大量时间。一个简单的验证可能会检查模型是否正确预测了静态构型中原子的受力。但一个更深刻的测试,即“属性驱动的验证”,提出了一个更深层次的问题:模型是否正确预测了材料的涌现性、集体性属性?例如,通过在虚拟晶体上模拟微小应变并测量能量响应,我们可以计算其弹性常数——即其刚度和抗剪切能力。如果机器学习模型计算出的弹性常数与参考的DFT值相匹配,我们不仅对其死记硬背受力情况的能力有信心,而且对其真正理解材料物理性质的能力也更有信心。这个过程甚至可以成为一个诊断工具。如果模型在刚度上预测正确,但在剪切响应上出错,这就为科学家指明了模型需要改进的特定方面——也许是其对原子角度的处理。

在风险最高的工程领域,如核反应堆模拟,这种建立信任的过程被形式化为一个强大的两部分学科:验证与确认(Verification and Validation, V

  • ​​验证(Verification)​​ 问:我们是否在正确地构建模型? 这是一个对我们代码完整性的内部检查。我们的反向传播算法是否正确计算了梯度?我们可以使用一些巧妙的技巧,比如“人造解方法”(Method of Manufactured Solutions),即用一个我们完全知道其答案的合成问题来测试代码,从而高精度地验证其正确性。
  • ​​确认(Validation)​​ 问:我们是否在构建正确的模型? 这是一个对照现实的外部检查。我们将模型的预测与来自真实世界实验基准的数据进行比较。

这个框架揭示了一个美妙的微妙之处:即使是我们来自高保真度模拟的“基准真相”标签,本身也存在不确定性。确定性模拟存在离散化误差(可以用网格收敛指数估计),而随机的蒙特卡洛模拟则存在统计误差。一个严谨的确认计划必须量化这种标签不确定性,并将其与代理模型自身的泛化误差相结合,以产生一个总的预测不确定性。只有这样,我们才能与物理现实进行有意义的比较,例如,通过使用卡方检验来查看我们的预测及其完整的误差棒是否与实验测量结果在统计上一致。

人为因素:医学和生物学中的验证

当机器学习从模拟原子转向模拟人体时,风险被提高了,验证的性质也变得更加丰富和复杂。生物系统是嘈杂、多变且极其混乱的。

考虑一个旨在从革兰氏染色的显微镜载玻片中分类细菌的模型。在一个纯净的实验室里,模型可能表现得非常出色。但在真实的临床环境中,载玻片是在不同批次中制备的,染色浓度和时间有轻微变化。它们在不同的机器上扫描。图像有细微的差异。一个没有针对这种真实世界变异性进行验证的模型将会失败。严谨的验证要求在一个完全“外部”的留出集上测试模型——这些数据来自模型在训练期间从未见过的医院、染色批次和扫描仪。这就是我们测试真正泛化能力并构建稳健工具的方式。

此外,生物学中充满了“幽灵伪影”。旨在发现数据中新模式的无监督算法是强大的探索者。但它们也可能被假象所愚弄。在流式细胞术中,一种用于分析血液或骨髓中细胞的技术,算法可能会识别出一个“新的”、令人兴奋的细胞簇,这些细胞似乎表达了来自两个不同谱系的标记——这可能是一个重要的发现。但在这里,验证扮演了至关重要的科学怀疑论者的角色。通过对这个细胞簇进行“反向设门”(back-gating),专家可以对照质量控制来检查其属性。他们可能会发现,该簇中85%的“细胞”实际上是两个粘在一起的细胞(双联体),而90%是死细胞,它们会非特异性地结合抗体。这个令人兴奋的发现消失了——它只是机器中的一个幽灵,是不完美测量的产物。这不是失败,而是验证的胜利,它阻止了一场徒劳的追逐,并加强了自动化发现与人类专业知识之间的协同作用。

随着我们的医学模型变得越来越复杂,仅仅准确已经不够了。我们需要相信它们的准确性是基于正确的原因。这就引出了对模型推理过程的验证。想象一个“数字孪生”(digital twin)——一个病人身体机能的复杂模拟——可以预测不良事件的风险。我们可能还有一个经过训练的机器学习模型来做同样的事情。机器学习模型可能更快,但它是一个“黑箱”。我们如何确定它关注的是真实的生物信号,而不是数据中某些虚假的关联?我们可以使用像SHAP这样的技术来要求模型将其预测归因于其输入特征。然后,我们可以将这些归因与来自数字孪生的已知机理敏感性进行比较。如果机器学习模型说某个生物标志物正在推高风险,而数字孪生也证实了这个生物标志物与不良事件有很强的因果联系,我们就会获得巨大的信心。我们正在验证模型的逻辑与我们的科学理解是否一致。

这引出了医学验证中最后一个关键的区别,以开发“数字生物标志物”为例,比如一个通过智能手机的加速度计测量多发性硬化症患者步态速度的应用程序。这里的验证是一出两幕剧:

  1. ​​分析验证​​:该应用程序是否正确测量了物理量?我们在各种真实世界条件下(不同的手机、不同的步行表面、不同的携带手机方式),对照金标准参考(如临床级步道)进行测试。我们必须证明测量本身是准确和精确的。
  2. ​​临床验证​​:那又怎样?就算步态速度测量是完美的,步态速度的变化真的能预测疾病进展吗?它能帮助医生在何时升级治疗方面做出更好的决定吗?这需要一项前瞻性临床研究,将经过分析验证的测量结果与有意义的临床结局联系起来。

没有这两者,这个生物标志物就毫无用处。这种两部分结构——证明工具有效,然后证明工具有用——是所有有意义的医疗设备验证的核心。

社会契约:作为安全论证的验证

最终,当我们在高风险环境中部署一个机器学习系统时,我们不仅仅是在提出一个科学主张,我们正在签订一份社会契约。我们断言该系统在其预期用途下是可接受地安全和有效的。验证就是收集证据以支持这一断言的过程,其形式是一种结构化的、可辩护的论证,称为“安全论证”(safety case)。

这不是一个含糊的承诺。它可以变得非常具体。想象一个推荐抗生素剂量的临床决策支持系统(CDSS)。工程师和临床医生识别出主要危害:过量导致的肾毒性(H1)和剂量不足导致的治疗失败(H2)。他们评估每种危害的初始风险,通常使用一个简单而强大的公式:风险(rrr)= 伤害概率(PPP)×\times× 伤害严重性(SSS)。然后他们设计风险控制措施——例如根据肾功能硬编码安全限制,或要求药剂师对高风险病例进行核查。每项控制措施的效果都是降低伤害的概率。随后进行验证研究以证明这些控制措施有效,并计算最终的残余风险。这个残余风险必须低于预先指定的、具有临床合理性的可接受阈值。这整个透明的过程——从危害识别到风险量化和控制验证——构成了提交给像 FDA 这样的监管机构的安全论证的核心。

所需证据的数量由​​使用情境(Context of Use, COU)​​决定。一个仅仅旨在为临床医生提供信息的系统,其所需的验证水平与一个自动化决策并采取行动的系统不同。COU 定义了承诺,而验证包则是证明。

从材料的量子行为到病人的脚步,验证是一条共同的主线。它不是清单上一个乏味的最后步骤,而是一门动态且富有创造性的科学学科。它是检验算法成色的熔炉,揭示其隐藏的缺陷,并为我们建立信任提供证据的基石。归根结底,它是机器的良知。