随机森林中的最佳树木数量是否取决于预测变量的数量?


46

有人可以解释为什么预测变量数量大时我们为什么需要在随机森林中有大量树木吗?我们如何确定最佳树木数量?

Answers:


70

随机森林使用套袋(选择观察样本而不是全部)和随机子空间方法(选择特征样本而不是全部特征,换句话说就是属性装袋)来生长一棵树。如果观察的数量很多,但是树木的数量太少,那么将仅预测一次甚至根本不预测某些观察。如果预测变量的数量很大,但是树的数量太少,则(理论上)可能会在所有使用的子空间中丢失某些功能。两种情况均导致随机森林预测能力降低。但是最后一种情况相当极端,因为子空间的选择是在每个节点上执行的。

在分类期间,默认情况下,子空间维数为(相当小,是预测变量的总数),但是树包含许多节点。在回归期间,尽管一棵树包含更少的节点,但是默认情况下,子空间维数为(足够大)。因此,仅在极端情况下,随机森林中的最佳树木数量取决于预测变量的数量。 pp/3ppp/3

算法官方页面指出,随机森林不会过度拟合,您可以根据需要使用任意数量的树木。但是Mark R. Segal(2004年4月14日。“机器学习基准和随机森林回归。”生物信息学和分子生物统计中心)发现它适合某些嘈杂的数据集。因此,要获得最佳数量,您可以尝试在ntree参数网格上训练随机森林(简单,但会消耗更多的CPU),或使用来构建一个包含许多树的随机森林,并keep.inbag计算前树的袋外(OOB)错误率(其中从变为),并绘制OOB错误率与树数的关系图(更复杂,但占用的CPU更少)。Ñ 1nn1ntree


-2

因此该文章

他们认为,随机森林应有之间的一些树木64 - 128棵。这样,您应该在ROC AUC和处理时间之间保持良好的平衡。


10
他们的结果与数据集中的特征数量无关,这似乎很奇怪……
naught101 '17

-5

我想添加一些东西,如果您拥有1000多个功能和1000行,那么您就不能只花很少的树了。

我建议您应该先检测cpu和ram的数量,然后再尝试启动交叉验证,以找到它们与树数量之间的比率

如果您使用sikit在python中学习,则可以选择n_jobs=-1使用所有进程,但是在此之后每个核心请求数据副本的成本都可以通过以下公式计算

ntree = sqrt(行数*列数)/ numberofcpu


6
我认为您需要对此进行编辑,以便为您的陈述提供证据和依据。
mdewey
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.