K-Fold Cross Validation、Bootstrap、Out of Bag 本质上是一样的吗?

机器算法验证 交叉验证 引导程序 装袋
2022-03-20 15:31:45

谁能告诉我 K-Fold 交叉验证、Bootstrap 和 Out of Bag 方法在使用时有何不同

1)将数据分为训练数据和测试数据

2)使用训练数据制作模型,使用测试数据进行预测

3)使用带有重复方法的随机抽样

4)重复上述过程N次

5)平均所有预测值以获得响应变量y的每个预测的单个值

2个回答

尽管这 3 种方法是将数据集划分为几个子集,但它们在划分的主要目的上仍然不同。

K 折交叉验证 (CV)

它包括将原始观察集划分为或多或少相同大小的 k 个子集。然后,您将使用其中一个子集作为测试集,其余子集将用于形成您的训练集。您将重复第 k 次,每次用作测试集的子集都会改变。例如,如果您使用 3 折 CV,您的原始集合将分为 k1、k2、k3。首先,k1 将形成测试集,k2 和 k3 将形成训练集。然后,k2 将形成测试集,k1 和 k3 将形成训练集。最后,k3 将形成测试集,k1 和 k3 将形成训练集。对于每个折叠,您输出结果并将它们聚合以获得最终结果。

引导程序

引导程序是原始数据的随机子集,有时用替换绘制(检查http://www.stat.washington.edu/courses/stat527/s13/readings/EfronTibshirani_JASA_1997.pdf关于 .632 规则),有时不是。但这个想法是,引导程序只包含你的整个观察集的一部分。它与 CV 不同,因为它不包含测试集。Bootstrap 用于每次在不同的观察集上训练不同的分类器。为了输出您的结果,使用组合方法,例如平均。

袋外

如上所述,并非所有观察都用于形成引导程序。未使用的部分形成袋外分类器,可用于评估分类器的错误率。Out-of-bag 通常用于计算错误率,而不是用于训练分类器。

首先,您对相似之处是正确的:它们都是基于重采样的误差估计类型。现在谈谈差异。

交叉验证自举:交叉验证(以及称为集合验证或保留验证的随机拆分程序)使用重采样而不替换,而引导程序使用替换重采样在交叉验证中,无需替换的重采样以确保每个样本在每次“运行”交叉验证时准确测试一次的方式完成。
(也有用于交叉验证的非随机拆分程序,例如在特殊情况下使用的百叶窗或连续块。)
这些过程中的哪一个最适合您的模型验证取决于例如您的样本情况和您正在验证的模型(引导程序对于删除重复项的建模算法没有用)。

袋外估计与“正常”的自举或交叉验证估计有很大不同,因为它们不估计单个模型(通常是建立在整个数据集上的一个模型)的泛化误差,而是泛化聚合(集成)模型的错误(bag = bootstrap 聚合)。所以这个区别就像一个单一的决策树和一个随机森林之间的区别。
同样,您也可以使用不替换的重采样(例如交叉验证)来生成用于聚合的模型集合 - 原理完全相同。(问我是否需要文学示例)


@benmaq 已经指出,自举通常用于验证以外的其他目的,特别是用于估计由于随机抽样过程导致手头样本的变异性。
使用留一法交叉验证的替代模型进行重采样而不进行替换或更准确地说,类似的过程称为jackknifing