如何避免随机森林中的过度拟合?

数据挖掘 机器学习 数据挖掘 r 预测建模 随机森林
2021-09-25 05:00:55
  1. 我想避免在随机森林中过度拟合。在这方面,我打算使用 mtry、nodesize 和 maxnodes 等。您能帮我选择这些参数的值吗?我正在使用 R。

  2. 另外,如果可能的话,请告诉我如何对随机森林(在 R 中)使用 k 折交叉验证。

4个回答

相对于其他模型,随机森林不太可能过度拟合,但它仍然是您想要明确努力避免的事情。调整模型参数绝对是避免过度拟合的要素之一,但它不是唯一的要素。事实上,我会说你的训练特征比模型参数更容易导致过度拟合,尤其是随机森林。所以我认为关键是真正有一种可靠的方法来评估你的模型,以检查过度拟合,这让我们想到了你的第二个问题。

如上所述,运行交叉验证将允许您避免过度拟合。根据 CV 结果选择最佳模型将导致模型没有过度拟合,而对于像袋外错误这样的情况不一定如此。在 R 中运行 CV 的最简单方法是使用caret包。一个简单的例子如下:

> library(caret)
> 
> data(iris)
> 
> tr <- trainControl(method = "cv", number = 5)
> 
> train(Species ~ .,data=iris,method="rf",trControl= tr)
Random Forest 

150 samples
  4 predictor
  3 classes: 'setosa', 'versicolor', 'virginica' 

No pre-processing
Resampling: Cross-Validated (5 fold) 

Summary of sample sizes: 120, 120, 120, 120, 120 

Resampling results across tuning parameters:

  mtry  Accuracy  Kappa  Accuracy SD  Kappa SD  
  2     0.96      0.94   0.04346135   0.06519202
  3     0.96      0.94   0.04346135   0.06519202
  4     0.96      0.94   0.04346135   0.06519202

Accuracy was used to select the optimal model using  the largest value.
The final value used for the model was mtry = 2. 

@xof6 是正确的,因为模型的深度越深越容易过度拟合,但我想添加更多可能对您有用的参数。我不知道您使用哪个包与 R 一起使用,我对 R 一点也不熟悉,但我认为在那里实现了这些参数的对应项。

树的数量 - 这个数字越大,森林过度拟合的可能性就越小。这意味着,当每个决策树都在学习训练数据的某些方面时,您将获得更多可供选择的选项,可以这么说。特征数量——这个数字构成了每棵树学习的特征数量。随着这个数字的增长,树变得越来越复杂,因此它们是测试数据中可能不存在的学习模式。需要一些试验才能找到正确的值,但这就是机器学习。正如我们所提到的,也可以尝试一般深度!

是关于 stackexchange 的一个很好的链接,但是我的一般经验是模型的深度越深,它就越容易过度拟合。

我总是减少mtry直到训练数据集上的错误增加,然后我降低节点大小和深度,直到训练和数据集上的错误之间的差异停止减少