如何在R中的randomForest中找到最好的ntree和nodesize,然后计算混淆表的RMSE作为结果?

时间:2015-10-09 12:27:14

标签: r random-forest

我有两个与R中的randomForest相关的问题。

  1. 如何找到两个参数的最佳值:ntree和nodesize?我只是在这里放一个随机数,有时我发现了更好的结果。我可以使用k-fold交叉验证,如果没有,我可以使用哪种方法来查找这些值?

  2. 在我运行randomForest函数并拥有模型之后,我做了预测,并且我有预测数据,然后我可以制作如下的混淆表:

  3.   

    预测1 2 3

     Actual   1  4 3 1
    
              2  2 4 2
    
              3  3 2 1
    

    (即有4 + 4 + 1个正确的预测)

    我的问题是,鉴于这种表格,我如何计算预测的RMSE(均方根误差)?当然我可以手动完成,但我认为这不是最好的答案。

    非常感谢,

2 个答案:

答案 0 :(得分:3)

您可以使用mlr package完成上述所有操作。本教程详细介绍了tuningperformance measurements。要进行调整,您应该使用nested resampling

假设您有一个回归任务,它看起来像这样:

library(mlr)

# define parameters we want to tune -- you may want to adjust the bounds
ps = makeParamSet(
  makeIntegerLearnerParam(id = "ntree", default = 500L, lower = 1L, upper = 1000L),
  makeIntegerLearnerParam(id = "nodesize", default = 1L, lower = 1L, upper = 50L)
)

# random sampling of the configuration space with at most 100 samples
ctrl = makeTuneControlRandom(maxit = 100L)

# do a nested 3 fold cross-validation
inner = makeResampleDesc("CV", iters = 3L)
learner = makeTuneWrapper("regr.randomForest", resampling = inner, par.set = ps,
                          control = ctrl, show.info = FALSE, measures = rmse)

# outer resampling
outer = makeResampleDesc("CV", iters = 3)
# do the tuning, using the example boston housing task
res = resample(learner, bh.task, resampling = outer, extract = getTuneResult)

# show performance
print(performance(res$pred, measures = rmse))

整个过程在分类方面看起来非常相似,有关详细信息,请参阅相关教程页​​面。

答案 1 :(得分:2)

  1. 是的,您可以通过k折交叉验证选择最佳参数。我建议不要调整ntree,而只是设置它相对较高(1500-2000树),因为过度拟合不是RF的问题,这样你就不必将其作为参数进行调整。您仍然可以继续调整mtry

  2. 评估分类问题的绩效有许多不同的衡量标准。如果您对类似RMSE的度量特别感兴趣,可以查看this CV post,其中讨论Brier Score - 计算方式与RMSE类似,您可以使用预测的概率和实际值来实现得到均方误差。