自举和交叉验证有什么区别?

数据挖掘 交叉验证 评估
2021-10-13 20:58:23

我曾经应用 K 折交叉验证来对我的机器学习模型进行稳健的评估。但我也知道为此目的存在引导方法。但是,我看不出它们在性能估计方面的主要区别。

据我所知,自举也产生了一定数量的随机训练+测试子集(尽管以不同的方式)那么使用这种方法优于 CV 有什么意义呢?我唯一能想到的是,在自举的情况下,可以人为地产生几乎任意数量的此类子集,而对于 CV,实例的数量是对此的一种限制。但这方面似乎是一个非常小的滋扰。

3个回答

交叉验证和引导都是重采样方法。

  • bootstrap 使用替换重新采样(并且通常会生成与原始数据集具有相同案例数量的新“代理”数据集)。由于带有替换的绘图,一个自举数据集可能包含相同原始案例的多个实例,并且可能完全省略其他原始案例。
  • 交叉验证无需替换即可重新采样,因此生成的代理数据集小于原始数据集。这些数据集以系统的方式生成,以便在预先指定的数量后k 的代理数据集,每个 n原始案例仅被遗漏了一次。这称为 k-fold 交叉验证或 leave- x - out 交叉验证x=nk,例如,留一法交叉验证为每个代理集省略了 1 个案例,即k=n.

  • 顾名思义,交叉验证的主要目的是衡量(泛化)模型的性能。相比之下,自助法主要用于为广泛的统计数据建立经验分布函数(范围广泛,例如,从均值的变化到袋装集成模型中模型的变化)。

  • bootstrap 过程的留一法类似物称为jackknifing(实际上比 bootstrap 更早)。

  • 泛化误差的交叉验证估计的 bootstrap 模拟称为out-of-bootstrap估计(因为测试用例是那些被排除在 bootstrap 重采样训练集之外的)。

[交叉验证与自举验证] 但是,我看不出它们在性能估计方面的主要区别。

这种直觉是正确的:在实践中,迭代之间通常没有太大区别k-fold交叉验证和out-of-bootstrap。在评估的替代模型总数相似的情况下,[模型预测误差测量的]总误差被发现是相似的,尽管 oob 通常比相应的 CV 估计具有更多的偏差和更少的方差。

有许多尝试减少oob 偏差(.632-bootstrap,.632+-bootstrap),但它们是否真的会改善这种情况取决于手头的情况。

文学:


我唯一能想到的是,在自举的情况下,可以人为地产生几乎任意数量的此类子集,而对于 CV,实例的数量是对此的一种限制。

是的,CV 可能的组合比 bootstrapping 的组合要少。但是 CV 的限制可能比你意识到的要高。对于一个数据集 n 案例和 k-折叠交叉验证,你有

  • 简历 (nk) 没有替换的组合(对于 k < n 远远超过 k 通常评估的可能性)与。
  • 引导程序/oob (2n1n)与替换的组合(这再次远远超过通常评估的 100 或 1000 个代理模型)

Bootstrapping 是依赖于随机抽样和替换的任何测试或度量。它是一种在许多情况下都有帮助的方法,例如验证预测模型性能、集成方法、估计模型参数的偏差和方差等。它的工作原理是对原始数据集进行带放回抽样,同时假设未被选取的数据点为测试数据集。我们可以多次重复此过程并计算平均分数作为我们模型性能的估计。此外,Bootstrapping 与集成训练方法有关,因为我们可以使用每个 bootstrap 数据集构建模型,并使用多数投票(用于分类)或计算所有模型的平均值(用于数值预测)将这些模型“打包”到集成中。这些模型作为我们的最终结果。

交叉验证是验证模型性能的过程,它通过将训练数据分成 k 个部分来完成。我们假设 k-1 部分是训练集,使用另一部分是我们的测试集。我们可以重复这 k 次,每次都保留数据的不同部分。最后,我们将 k 个分数的平均值作为我们的性能估计。交叉验证可能会受到偏差或方差的影响。增加分割的数量,方差也会增加,偏差也会减少。另一方面,如果我们减少分割的数量,偏差会增加,方差会减少。

综上所述,交叉验证将可用数据集拆分以创建多个数据集,而 Bootstrapping 方法使用原始数据集通过替换重采样后创建多个数据集。当它用于模型验证时,引导它不如交叉验证强。Bootstrapping 更多的是关于构建集成模型或只是估计参数。

  • 交叉验证:提供测试误差的估计。
  • Bootstrap:提供估计的标准误差。