使用随机森林建模是否需要交叉验证?

数据挖掘 随机森林 交叉验证
2021-09-27 22:01:49

据我所见,对此的看法往往不同。最佳实践肯定会要求使用交叉验证(尤其是在将 RF 与同一数据集上的其他算法进行比较时)。另一方面,原始消息来源指出,在模型训练期间计算 OOB 误差这一事实足以作为测试集性能的指标。即使是 Trevor Hastie,在最近的一次谈话中也说“随机森林提供免费的交叉验证”。直观地说,如果在一个数据集上训练并尝试改进基于 RF 的模型,这对我来说是有意义的。

有人可以提出支持和反对需要与随机森林进行交叉验证的论据吗?

3个回答

默认情况下,随机森林选择 2/3 的数据用于训练,其余数据用于回归测试,近 70% 的数据用于训练,其余数据用于分类期间的测试。原则上,因为它在每个树分裂期间随机选择变量,它不容易过度拟合,不像其他模型。但是,如果您想在 sklearn 中使用 nfolds 使用 CV,您仍然可以使用保留集的概念,例如 oob_score(out of bag)=True,它显示了使用或不使用 CV 的模型性能。因此,简而言之,使用带有或不带有 nfolds 的 oob_score=True 本身可以判断使用 CV 是否对您的数据有好处。通常,如果您的目标遵循某个分布并且您没有太多观察数据,那么使用 CV 不会给出很大的改进。

一个关键区别是交叉验证确保所有样本都出现在训练和测试集中,因此 100% 的数据会在某个时间点用于训练和测试。

根据您的数据集的大小,在随机森林中发生的引导、替换采样并不能保证树看到的分割将包含所有实例。如果您的森林中有足够多的树木,OOB 估计应该渐近收敛到最佳 OOB 估计值。

这两种方法的准确性在某种程度上取决于数据,因此最好根据您面前的特定数据比较两种方法,看看 CV 和 RF OOB 估计值是否给出相似的值。

如果他们不这样做,那么值得探索对真实错误率的进一步估计,也许是通过 CV 中更高的 K 值。

我对 50k 行的数据集进行了一些测试,使用sklearn.RandomForestRegressor.

我得到了显着不同的分数——我使用的是标准化的基尼系数——这取决于我使用的是rf.oob_prediction_(0.2927) 还是 KFold CV(7 折为 0.3258,3 折为 0.3236)。

这样一来,您的观点似乎是“特别是如果将 RF 与同一数据集上的其他算法进行比较”是使用手动 CV 而不是依赖 OOB 预测的重要考虑因素。