据我所知,人们对此的看法往往有所不同。最佳实践肯定会规定使用交叉验证(尤其是将RF与同一数据集上的其他算法进行比较时)。另一方面,原始消息来源指出,在模型训练期间计算出OOB误差这一事实足以说明测试集的性能。甚至特雷弗·哈斯提(Trevor Hastie)在最近的一次对话中都说“随机森林提供免费的交叉验证”。直观地,如果在一个数据集上训练并尝试改进基于RF的模型,这对我来说很有意义。
有人可以提出支持和反对使用随机森林进行交叉验证的论点吗?
据我所知,人们对此的看法往往有所不同。最佳实践肯定会规定使用交叉验证(尤其是将RF与同一数据集上的其他算法进行比较时)。另一方面,原始消息来源指出,在模型训练期间计算出OOB误差这一事实足以说明测试集的性能。甚至特雷弗·哈斯提(Trevor Hastie)在最近的一次对话中都说“随机森林提供免费的交叉验证”。直观地,如果在一个数据集上训练并尝试改进基于RF的模型,这对我来说很有意义。
有人可以提出支持和反对使用随机森林进行交叉验证的论点吗?
Answers:
默认情况下,随机森林会选择2 / 3rd数据用于训练和休息,以进行回归测试,并且将近70%数据用于训练和休息,以便在分类期间进行测试。从原理上讲,由于它会在每次树拆分期间将变量选择随机化,因此不容易出现过拟合但是,如果要在sklearn中使用nfolds来使用CV,则仍可以使用保持集的概念,例如oob_score(out of bag)= True,它显示使用或不使用CV时模型的性能。简而言之,使用oob_score = True带有或不带有nfolds本身可以判断使用CV是否适合您的数据。通常,如果目标遵循一定的分布并且您没有太多观察数据,那么使用CV不会给出很大的进步。
一个主要区别是,交叉验证可确保所有样本都出现在训练和测试集中,因此100%的数据将在某个时间用于训练和测试。
根据数据集的大小,在随机目录林中进行的引导(包括替换采样)将无法保证树看到的拆分包含所有实例。如果您的森林中有足够的树木,则OOB估计值应渐近收敛于最佳OOB估计值。
两种方法的准确性在某种程度上都取决于数据,因此,最好将两种方法与您面前的特定数据进行比较,并查看CV和RF OOB估计值是否给出相似的值。
如果没有,那么值得进一步探讨真实错误率的估计,也许是通过CV中更高的K值来进行的。