当预测变量的数量很大时,有人可以解释为什么我们需要随机森林中的大量树吗?我们如何确定最佳的树数?
随机森林中的最佳树数是否取决于预测变量的数量?
随机森林使用bagging(选择观察样本而不是全部)和随机子空间方法(选择特征样本而不是所有特征,换句话说 -属性 bagging)来生长一棵树。如果观测的数量很大,但树的数量太少,那么有些观测将只预测一次,甚至根本不预测。如果预测变量的数量很大但树的数量太少,那么在所有使用的子空间中(理论上)可能会遗漏一些特征。这两种情况都会导致随机森林预测能力的下降。但最后一种情况是相当极端的,因为子空间的选择是在每个节点上执行的。
在分类过程中,子空间维度默认为(相当小,是预测变量的总数),但树包含许多节点。在回归期间,默认情况下子空间维数为(足够大),尽管树包含的节点较少。因此,随机森林中的最佳树数仅在极端情况下取决于预测变量的数量。
该算法的官方页面指出,随机森林不会过度拟合,您可以使用任意数量的树。但 Mark R. Segal(2004 年 4 月 14 日。“机器学习基准和随机森林回归。”生物信息学和分子生物统计学中心)发现它对一些嘈杂的数据集过度拟合。因此,为了获得最佳数量,您可以尝试在参数网格上训练随机森林ntree
(简单,但更消耗 CPU)或构建一个包含许多树的随机森林keep.inbag
,计算前棵树的袋外 (OOB) 错误率(其中从变为)并绘制 OOB 错误率与树数的关系(更复杂,但 CPU 消耗更少)。ntree
随机森林中树的数量取决于数据集中的行数。在从 OpenML-CC18 基准测试中调整 72 个分类任务的树数时,我正在做一个实验。我在数据中的最佳树数和行数之间得到了这种依赖性:
根据这篇文章
他们建议随机森林应该有64 到 128 棵树之间的树数。这样,您应该在 ROC AUC 和处理时间之间取得良好的平衡。
如果你有超过 1000 个功能和 1000 行,我想添加一些东西,你不能只取随机数的树。
我建议您应该先检测 cpu 和 ram 的数量,然后再尝试启动交叉验证以查找它们与树数之间的比率
如果您在 python 中使用 sikit learn,您可以选择n_jobs=-1
使用所有进程,但每个核心都需要数据副本的成本,之后您可以尝试这个公式
ntree = sqrt(行数*列数)/numberofcpu