提升的袋外误差估计?

机器算法验证 机器学习 交叉验证 数据挖掘 随机森林 助推
2022-03-06 11:03:36

在随机森林中,每棵树都是在一个独特的自举数据样本上并行生长的。因为每个 boostrap 样本预计包含大约 63% 的独特观察,这留下了大约 37% 的观察,可用于测试树。

现在,似乎在 Stochastic Gradient Boosting 中,也有一个类似于 RF 中OOBerror

如果 bag.fraction 设置为大于 0(推荐 0.5),gbm 计算预测性能改进的袋外估计。它评估在选择下一个回归树时未使用的那些观察值的偏差减少情况。

资料来源:Ridgeway (2007),第 3.3 节(第 8 页)。

我无法理解它是如何工作/有效的。假设我在序列中添加一棵树。我在原始数据集的随机子样本上种植这棵树。我可以根据未用于种植它的观察结果来测试这棵树。同意。但是,由于 Boosting 是顺序的,我宁愿使用迄今为止构建的整个树序列来为那些遗漏的观察结果提供预测。而且,很多前面的树很有可能已经看到了这些观察结果。因此,该模型并没有真正在每一轮都在用 RF 等看不见的观察结果进行测试,对吧?

那么,为什么这被称为“袋外”误差估计呢?对我来说,由于观察结果已经被看到,它似乎没有“出”任何袋子?

2个回答

只回答部分(并在您的问题中添加一个新问题)。

R http://www.rdocumentation.org/packages/gbm/functions/gbm中的 gbm 实现 有两个参数来调整一些 out-of-bagness。

a)train.fraction将定义用于训练所有树的数据的一部分,因此 1-train.fraction将是真正的 OOB(袋外)数据。

b)bag.fraction将定义用于在 boost 中创建下一棵树的训练数据的比例。因此,可能有一些数据从未用于创建任何树,它们可以真正用作 OOB 数据。(但不太可能,请参阅下面的问题)

这让我想到了这个问题。您对 37% 的 OOB 数据的分析仅适用于一棵树。但是在任何树中都没有使用任何数据的机会要小得多 -(它必须在所有树的 OOB 中 - 我的理解是每棵树都有自己的引导程序)。因此,在 RandomForests 中,几乎不可能是任何 OOB 来测试森林。然而 R 中的 randomForest 实现(基于 Breiman 的原始代码)谈论了很多关于 OOB 的内容(例如结果数据请参阅http://www.rdocumentation.org/packages/randomForest/functions/randomForest0.37ntreesntreeerr.rateconfusion

我不知道如何回答(我感谢您(+1)提出问题并让我意识到我不了解随机森林的这一方面)。可能的解决方案是只有一个引导程序——所有的树都是由它构建的——但据我所知,情况并非如此。

我相信他们对每一步都进行了现成的估计。由于添加了所有步骤的结果(带有系数),因此也可以使用相同的系数添加 OOB 误差。