为什么 scikit-learn bootstrap 函数会重新采样测试集?

机器算法验证 交叉验证 引导程序 随机森林 scikit-学习 装袋
2022-01-18 23:56:05

在使用 bootstrapping 进行模型评估时,我一直认为袋外样本直接用作测试集。但是,已弃用的 scikit-learnBootstrap方法似乎并非如此,该方法似乎是通过从袋外数据子集中替换绘图来构建测试集。这背后的统计推理是什么?是否存在这种技术比仅评估袋外样本更好的特定场景,反之亦然?

2个回答

Bootstrap 样本用于通过多次迭代来评估算法的性能。这样做时,会评估随机更改集的性能。

相比之下,例如在进行 10 折交叉验证时,您仅在不同的训练和测试数据集上执行 10 次迭代。

现在,当您的样本量较小时,假设并且引导迭代次数很高,让我们选择,并且您不会像处理训练数据集那样重新采样测试数据,您将遇到以下情况:算法不止一次地看到相同或非常相似的测试。您最初想通过使用引导程序来避免的情况。n=20i=10,000

你postet的链接挂了,所以我在sklearn的当前(0.14)版本中添加了函数的描述

方法说明

带有替换交叉验证迭代器的随机采样提供训练/测试索引以拆分训练测试集中的数据,同时对输入进行 n_iter 次重新采样:每次对数据执行新的随机拆分,然后在每一侧抽取(带替换)样本的分裂来建立训练和测试集。注意:与其他交叉验证策略相反,自举将允许一些样本在每次拆分中出现多次。然而,出现在训练拆分中的样本永远不会出现在测试拆分中,反之亦然。如果您希望每个样本最多出现一次,您可能应该改用 ShuffleSplit 交叉验证。

也许你正在做某事。似乎其他人在同一个线程上拉扯Bootstrap并被弃用,以支持更有意地使用该resample方法和经过验证的真实sklearn.cross_validation方法,例如StratifiedKFold.