随机森林修剪

5

我有一个sklearn随机森林回归器。它非常沉重,有1.6 GB大小,在预测值时需要很长时间。

我希望能够修剪它以减小大小。据我所知,修剪对于决策树和森林来说并没有实现。因为树的代码是用C语言编写的,我不懂。

有人知道解决方案吗?


2
我认为你应该限制树的大小(最大叶节点数,最大深度,最小拆分样本等)。 - mcane
3
https://dev59.com/-Gsz5IYBdhLWcg3wiYU0 - invoketheshell
invoketheshell,感谢您提供的链接。主要思路是利用并行化的森林状态来使用所有CPU核心。在我的情况下,这已经完成了。 - hvedrung
2个回答

3

树的大小可能是您的一个解决方案。尝试限制森林中树的大小(最大叶节点数,最大深度,最小样本分裂...)。


这意味着需要重建回归器。选择参数是一个漫长的过程,因此如果可能的话,我想修改现有的回归器。 - hvedrung
1
随机森林分类器(理论上)需要运行所有树分类器,它们的投票产生最终决策。@invoketheshell建议您并行化问题,如果您不想完全触及分类器(并修剪树),这是唯一的选择。将更多硬件投入问题中可以节省您的时间;)。 - mcane

1
你可以尝试使用集成剪枝。这意味着从你的随机森林中删除一些决策树。

如果你随机删除决策树,预期结果是随着删除决策树的数量,集成性能会逐渐恶化。然而,你可以更聪明地做一些事情,比如删除那些预测与整个集成的其余部分高度相关的树,从而不会显著改变整个集成的结果。

或者,你可以训练一个线性分类器,该分类器使用单独集成的输出作为输入,并在训练中包括某种l1惩罚来强制分类器上的稀疏权重。具有0或非常小值的权重将提示哪些树可以从集成中删除,而对准确性影响较小。


我一直在研究相关文献,发现这种方法可以提高准确性和速度。为什么它不是默认实现的呢? - Andrew Brēza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接