“引导验证”(又名“重采样交叉验证”)的程序是什么?

机器算法验证 交叉验证 引导程序 验证 重采样
2022-02-03 20:58:56

“引导验证”/“重新采样交叉验证”对我来说是新的,但在这个问题的答案中进行了讨论。我认为它涉及 2 种类型的数据:真实数据和模拟数据,其中一组给定的模拟数据是通过重新采样替换的方式从真实数据生成的,直到模拟数据与真实数据具有相同的大小。我可以想到两种使用此类数据类型的方法:(1)一次拟合模型,在许多模拟数据集上对其进行多次评估;(2) 使用许多模拟数据集中的每一个对模型进行多次拟合,每次都根据真实数据对其进行评估。哪个(如果有的话)最好?

2个回答

简短回答:两种验证技术都涉及训练和测试多个模型。

关于如何做到最好的长答案:这当然取决于。但这里有一些想法,我用来指导我关于重采样验证的决定。我是化学计量学家,因此这些策略以及术语或多或少与分析化学问题密切相关。

为了稍微解释一下我的想法,我认为验证是衡量模型质量,而训练是衡量模型参数——这导致与其他所有类型的测量非常相似。

这些方法在验证方面有两种不同的观点:

  1. 重采样验证的传统观点是:重采样数据集(有时称为代理数据集或子集)实际上与原始(真实)数据集相同。
    因此,拟合代理数据集的“代理模型”实际上与拟合整个真实数据集的模型相同。但是有些样本被排除在代理数据集之外,模型与这些无关。因此,我将那些遗漏或自举样本作为代理模型的独立验证集,并将结果用作整个数据模型的近似值。
    然而,代理模型通常并不等同于整体数据模型:用于训练的样本更少(即使对于引导程序,不同样本的数量也更少)。只要学习曲线在增加,代理模型平均比整体数据模型差一点。这是众所周知的重采样验证的悲观偏差(如果你最终得到一个乐观偏差,这通常表明 left-out/oob 测试集不独立于模型)。

  2. 第二个观点是重采样数据集是整个数据集的扰动版本。检查代理模型(或它们对遗漏/oob 样本的预测)与整体数据模型有何不同,然后可以了解模型相对于训练数据的稳定性。
    从这个角度来看,代理模型类似于重复测量。假设您的任务是测量一整串矿石中某些矿物的含量。矿石不是均质的。因此,您从不同位置获取物理样本,然后查看整个内容及其在整个火车上的变化。同样,如果您认为您的模型可能不稳定,您可以查看代理模型的整体性能和变化。

如果您进一步考虑,您的方法 (1) 可以说明同一模型的预测对于不同大小的样本有多少不同n. 您的方法(2)更接近通常的方法。但正如 Momo 已经写的那样,验证通常想要衡量未知情况下的性能。因此,您需要注意不要对模型已知的案例进行测试。换句话说,只测试遗漏的案例。这重复了很多次(每个模型都省略了一组不同的案例),以便(a)测量和(b)尽可能好地平均由于有限(小)样本量(用于测试和训练)引起的变化.
我通常会重新采样病例,例如一个病例 = 一名患者的所有测量值。那么现成的都是病人其中训练数据中没有测量。如果您知道一个案例的测量值比其他案例的测量值更相似(或者至少您不能排除这种可能性),这将很有用。

并不是说重采样验证允许您测量未知样本的性能。如果您还想测量未知未来样本的性能(仪器漂移!),那么您需要一个“在未来”测量的测试集,即在测量所有训练样本后的某个时间。在分析化学中,这是需要的,例如,如果您想了解您需要多久重新校准一次仪器(对于每次测定,每天、每周、每月……)

Bootstrap 与交叉验证术语

  • 替换重采样通常称为引导程序,
  • 重采样没有替换交叉验证。

两者都可以有某种分层。从历史上看,交叉验证的拆分(至少在化学计量学中)通常以非随机方式完成,例如,abcabc..abc 形式的 3 倍交叉验证(数据集按结果排序)用于校准/如果您的案例(物理样本)很少,并且您希望确保覆盖整个数据范围,则进行回归。

这两种技术通常重复/迭代多次。同样出于历史原因,至少在化学计量学中,k 折交叉验证通常意味着训练和测试 k 个模型(每个模型都使用未参与训练的数据的 1/kth 进行测试)。如果重复这样的随机分裂,人们称之为迭代或重复交叉验证。

此外,可以(大约)选择唯一样本的数量:通过kk-折叠或n请假——n-out 交叉验证。对于引导程序,您可以绘制多于或少于n样本到子样本中(很少这样做)。

  • 请注意,引导程序不适用于首先删除重复测量的某些模型拟合技术。
  • 存在一些引导程序变体,例如 .632-bootstrap 和 .632+-bootstrap

据说自举重采样比迭代更好(更快的收敛,需要更少的迭代)k-折叠交叉验证。然而,在一项针对我处理的数据类型的研究中,我们发现总体差异不大:与迭代相比,out-of-bootstrap 的方差更小,但偏差更大k-折叠交叉验证。

我不知道“最佳”(这可能取决于您使用它的目的),但我使用引导验证通过以下方式估计新数据的错误(如果您愿意,可以使用第三种方式):

  1. 从原始数据(大小为 N)中抽取 N 个观测值的训练集并进行替换。
  2. 使模型适合训练数据。
  3. 在袋外 (oob) 样本上评估模型

什么是无用的并不总是明确定义的。通常是所有那些不属于训练集的观察结果。更严格的是(我用这种方式)只在 oob 样本中观察到整个预测向量的实现,而不是训练集的一部分(如果你有很多因素,这特别有用)。更严格的是使用仅包含那些在模型中选择的预测变量上对预测变量具有不同实现的观察的 oob 样本(如果模型是通过某些变量选择过程(例如树)找到的,则特别有用)。

然后我通常重复这个 k 次,并在 k 倍上汇总结果(平均值或中值或任何方便的统计数据)。然后可以将这种方式选择的模型拟合到整个数据集(如您的选项 2 中所示),以另外衡量是否仍然存在过度拟合的趋势(性能测量应该与引导样本相差不远)。

如果我有更多模型或参数网格或类似的模型,我会将它们全部拟合到每个训练集并在每个 oob 样本上对其进行评估。也可以不使用两次训练集,而是为每个模型或调整参数组合绘制一个新的训练/oob 对。

参见例如基准测试的设计和分析