随机森林 - 如何处理过拟合

机器算法验证 随机森林 过拟合
2022-01-29 02:20:35

我有计算机科学背景,但我试图通过解决互联网上的问题来自学数据科学。

过去几周我一直在解决这个问题(大约 900 行和 10 个功能)。我最初使用逻辑回归,但现在我已切换到随机森林。当我在训练数据上运行我的随机森林模型时,我得到了非常高的 auc 值(> 99%)。但是,当我在测试数据上运行相同的模型时,结果并不是那么好(准确度约为 77%)。这让我相信我过度拟合了训练数据。

防止随机森林过度拟合的最佳实践是什么?

我使用 r 和 rstudio 作为我的开发环境。我正在使用该randomForest软件包并接受所有参数的默认值

4个回答

为了避免在随机森林中过度拟合,您需要做的主要事情是优化一个调整参数,该参数控制随机选择的特征数量,以从引导数据中生成每棵树。通常,您通过折交叉验证来执行此操作,其中,并选择最小化测试样本预测误差的调整参数。此外,种植更大的森林将提高预测的准确性,尽管一旦种植了数百棵树,回报通常会递减。kk{5,10}

您如何在训练数据上获得 99% 的 AUC?请注意,两者之间存在差异

predict(model)

predict(model, newdata=train)

在获取训练数据集的预测时。第一个选项从随机森林中获取袋外预测。在将预测值与训练数据的实际值进行比较时,这通常是您想要的。

第二个将您的训练数据视为新数据集,并将观察结果沿每棵树运行。这将导致预测值和实际值之间人为地密切相关,因为 RF 算法通常不会修剪单个树,而是依靠树的集合来控制过度拟合。因此,如果您想对训练数据进行预测,请不要这样做。

对于决策树,有两种处理过度拟合的方法:(a)不要将树完全生长(b)修剪

这同样适用于森林 - 不要种植太多并修剪它们。

我用randomForest的不多,但据我所知,有几个参数可以用来调整你的森林:

  • nodesize- 终端节点的最小尺寸
  • maxnodes- 最大终端节点数
  • mtry- 用于构建每棵树的变量数(感谢@user777)

尝试在 [5, 15] 的范围内调整max_depth参数,但不要超过此范围,因为如果您采用较大的深度,则很有可能过度拟合。