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


23

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

有人可以提出支持和反对使用随机森林进行交叉验证的论点吗?


在堆栈交换站点datascience.stackexchange.com/help/dont-ask上通常不建议显式征求意见的问题,也许您可​​以改写该问题以要求提供示例来支持用户体验?或寻求一个职位或其他职位的理论基础。
image_doctor 2015年

2
随机森林不太可能过分适合其他ML算法,但仍应建议进行交叉验证(或某些替代的评估形式)。
大卫

我想你问sholud在统计学家,这样的问题:stats.stackexchange.com
马辛·科辛斯基

我想第二次@David ...一种或另一种方式,您将要进行交叉验证。

您能为Trevor Hastie的声明提供参考吗?
tipanverella

Answers:


7

默认情况下,随机森林会选择2 / 3rd数据用于训练和休息,以进行回归测试,并且将近70%数据用于训练和休息,以便在分类期间进行测试。从原理上讲,由于它会在每次树拆分期间将变量选择随机化,因此不容易出现过拟合但是,如果要在sklearn中使用nfolds来使用CV,则仍可以使用保持集的概念,例如oob_score(out of bag)= True,它显示使用或不使用CV时模型的性能。简而言之,使用oob_score = True带有或不带有nfolds本身可以判断使用CV是否适合您的数据。通常,如果目标遵循一定的分布并且您没有太多观察数据,那么使用CV不会给出很大的进步。


5

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

根据数据集的大小,在随机目录林中进行的引导(包括替换采样)将无法保证树看到的拆分包含所有实例。如果您的森林中有足够的树木,则OOB估计值应渐近收敛于最佳OOB估计值。

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

如果没有,那么值得进一步探讨真实错误率的估计,也许是通过CV中更高的K值来进行的。


3

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

我得到的分数明显不同-我使用的是标准化的基尼rf.oob_prediction_系数-取决于我使用的是(0.2927)还是KFold的简历(0.3258表示7倍,0.3236表示3倍)。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.