我有两个与R中的randomForest相关的问题。
如何找到两个参数的最佳值:ntree和nodesize?我只是在这里放一个随机数,有时我发现了更好的结果。我可以使用k-fold交叉验证,如果没有,我可以使用哪种方法来查找这些值?
在我运行randomForest函数并拥有模型之后,我做了预测,并且我有预测数据,然后我可以制作如下的混淆表:
预测1 2 3
Actual 1 4 3 1 2 2 4 2 3 3 2 1
(即有4 + 4 + 1个正确的预测)
我的问题是,鉴于这种表格,我如何计算预测的RMSE(均方根误差)?当然我可以手动完成,但我认为这不是最好的答案。
非常感谢,
答案 0 :(得分:3)
您可以使用mlr package完成上述所有操作。本教程详细介绍了tuning和performance 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)
是的,您可以通过k折交叉验证选择最佳参数。我建议不要调整ntree
,而只是设置它相对较高(1500-2000树),因为过度拟合不是RF的问题,这样你就不必将其作为参数进行调整。您仍然可以继续调整mtry
。
评估分类问题的绩效有许多不同的衡量标准。如果您对类似RMSE的度量特别感兴趣,可以查看this CV post,其中讨论Brier Score - 计算方式与RMSE类似,您可以使用预测的概率和实际值来实现得到均方误差。