调优随机森林的实用问题

机器算法验证 随机森林 大车
2022-02-08 01:09:42

我的问题是关于随机森林的。这个漂亮的分类器的概念我很清楚,但仍然存在很多实际使用问题。不幸的是,我没有找到任何关于 RF 的实用指南(我一直在寻找类似 Geoffrey Hinton 的“训练受限玻尔兹曼机器的实用指南”之类的东西,但是对于随机森林!

在实践中如何调谐射频?

树木越多越好,这是真的吗?增加树的数量以及如何为给定的数据集估计它是否有合理的限制(当然除了comp.容量)?

树的深度呢?如何选择合理的?在一片森林中试验不同长度的树木是否有意义,对此有何指导?

训练 RF 时还有其他值得关注的参数吗?用于构建单个树的算法可能是?

当他们说 RF 能够抵抗过度拟合时,这有多真实?

如果我在搜索时可能遗漏了任何答案和/或指向指南或文章的链接,我将不胜感激。

2个回答

我不是权威人物,因此请考虑以下简短的从业者笔记:

随着收益递减,更多的树总是更好。更深的树几乎总是更好地受到需要更多树来获得类似性能的影响。

以上两点直接是偏差-方差权衡的结果。更深的树减少了偏差;更多的树减少了方差。

最重要的超参数是每次拆分要测试多少特征。无用的功能越多,您应该尝试的功能就越多。这需要调整。如果您只想了解您在训练数据上的表现并且没有配对(~重复测量),您可以通过 OOB 估计对其进行调整。尽管这是最重要的参数,但它的最佳值通常仍然非常接近原始建议默认值(用于分类/回归的 sqrt(p) 或 (p/3))。

最近的研究表明,您甚至不需要在功能内部进行详尽的拆分搜索即可获得良好的性能。只需为每个选定的特征尝试几个切点,然后继续。这使得训练更快。(〜非常随机的森林/树木)。

  • 树的数量:越大越好:是的。评估和知道何时停止的一种方法是在构建森林(或您可以使用的任何其他评估标准)时监控错误率并检测它何时收敛。您可以在学习集本身上执行此操作,或者如果可用,在独立测试集上执行此操作。此外,必须注意,树中测试节点的数量受对象数量的限制,因此如果您有很多变量且训练对象不多,则强烈建议使用更大的森林以增加在您的森林中至少评估一次所有描述符的机会。

  • 树深度:有几种方法可以控制树的深度(限制最大深度、限制节点数、限制拆分所需的对象数量、如果拆分不能充分改善拟合,则停止拆分,... )。大多数情况下,如果您正在处理嘈杂的数据,建议修剪(限制深度)树。最后,您可以使用完全开发的树来计算较短树的性能,因为它们是完全开发的树的“子集”。

  • 在每个节点测试多少特征:使用广泛的值(包括推荐值)交叉验证您的体验,您应该获得性能曲线并能够确定最大值,指出该参数的最佳值是什么+ Shea Parkes 回答。

  • Shea Parkes 提到了 Extra-Trees,这里是详细描述该方法的原始论文:http: //orbi.ulg.ac.be/bitstream/2268/9357/1/geurts-mlj-advance.pdf