使用 caret 包的可变重要性(错误);随机森林算法
Posted
技术标签:
【中文标题】使用 caret 包的可变重要性(错误);随机森林算法【英文标题】:Variable importance using the caret package (error); RandomForest algorithm 【发布时间】:2013-09-05 21:29:59 【问题描述】:我试图以任何方式获得射频模型的可变重要性。这是我迄今为止尝试过的方法,但非常欢迎其他建议。
我已经用 R 训练了一个模型:
require(caret)
require(randomForest)
myControl = trainControl(method='cv',number=5,repeats=2,returnResamp='none')
model2 = train(increaseInAssessedLevel~., data=trainData, method = 'rf', trControl=myControl)
数据集相当大,但模型运行良好。我可以访问它的部分并运行以下命令:
> model2[3]
$results
mtry RMSE Rsquared RMSESD RsquaredSD
1 2 0.1901304 0.3342449 0.004586902 0.05089500
2 61 0.1080164 0.6984240 0.006195397 0.04428158
3 120 0.1084201 0.6954841 0.007119253 0.04362755
但我收到以下错误:
> varImp(model2)
Error in varImp[, "%IncMSE"] : subscript out of bounds
显然应该有一个包装器,但似乎不是这样:(cf:http://www.inside-r.org/packages/cran/caret/docs/varImp)
varImp.randomForest(model2)
Error: could not find function "varImp.randomForest"
但这特别奇怪:
> traceback()
No traceback available
> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] elasticnet_1.1 lars_1.2 klaR_0.6-9 MASS_7.3-26
[5] kernlab_0.9-18 nnet_7.3-6 randomForest_4.6-7 doMC_1.3.0
[9] iterators_1.0.6 caret_5.17-7 reshape2_1.2.2 plyr_1.8
[13] lattice_0.20-15 foreach_1.4.1 cluster_1.14.4
loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_3.0.1 grid_3.0.1 stringr_0.6.2
[5] tools_3.0.1
【问题讨论】:
【参考方案1】:这是因为从train()
获得的对象不是纯粹的随机森林模型,而是不同对象的列表(包含最终模型本身以及交叉验证结果等)。您可以通过ls(model2)
看到它们。所以要使用最终模型只需调用varImp(model2$finalModel)
。
【讨论】:
这对我不起作用,我通过添加重要性 = TRUE 使它起作用。【参考方案2】:计算重要性分数可能需要一段时间,train
不会自动获得 randomForest
来创建它们。将importance = TRUE
添加到train
调用中,它应该可以工作。
最大
【讨论】:
以上是关于使用 caret 包的可变重要性(错误);随机森林算法的主要内容,如果未能解决你的问题,请参考以下文章
从 mlr 包的 resample 函数中获取特定的随机森林变量重要性度量
如何绘制从使用 R 中的“caret”包创建的随机森林中选择的树
R语言使用caret包构建随机森林模型(random forest)构建回归模型通过method参数指定算法名称通过ntree参数指定随机森林中树的个数