我正在使用R
的{{1}}包运行随机林模型,并且在返回的对象上运行caret
可以获得平均变量重要性引导迭代次数。但是,我宁愿评估每次迭代的变量重要性。这可能是使用varImp
包吗?
可重复的例子:
caret
返回:
library(caret)
mod <- train(Species ~ ., data = iris,
method = "cforest",
controls = cforest_unbiased(ntree = 10))
varImp(mod)
我感兴趣的是一个长度列表=每次迭代具有可变重要性的bootstrap重采样数。使用cforest variable importance
Overall
Petal.Width 100.0000
Petal.Length 86.6279
Sepal.Length 0.5814
Sepal.Width 0.0000
和自定义returnResamp = "all"
的某种组合可能是可能的,但我不够明智。
答案 0 :(得分:2)
你指的是哪些引导迭代? cforest
内部使用的内容或train
完成的重新采样?
train
返回最终模型对象产生的重要性分数(可能与&#34不同;跨越自举迭代次数的平均变量重要性&#34;,取决于您对第一个模型对象的答案问题。)
如果您希望获得重新采样的重要性分数超过train
重新取样,您可以欺骗rfe
进行重新取样。例如:
set.seed(1)
mod <- rfe(x = iris[, 1:4], y = iris$Species, sizes = 4,
rfeControl = rfeControl(functions = caretFuncs,
method = "boot",
number = 5),
## pass options to train(),
tuneGrid = data.frame(mtry = 2),
method = "cforest",
controls = cforest_unbiased(ntree = 10))
然后每次迭代的重要性分数都在mod$variables
。
最高
答案 1 :(得分:0)
经过一番挖掘后,我想出了
getvarimp <- function(x) {
stopifnot(is(x, "train") & is(x$finalModel, "RandomForest"))
vi<-party:::varimp
body(vi)[[length(body(vi))]]<-quote(return(perror))
vi(x$finalModel)
}
getvarimp(mod)
至少对于这种对象类型,这似乎是varImp如何计算它的返回值。具体来说,它采用列方式和重新划分
vi <- colMeans(getvarimp(mod))
(vi-min(vi)) / max(vi)*100
请注意,每次运行此(或varImp
)时,您可能会得到略有不同的结果,因为它每次运行都会使用一些随机预测。
可能还有其他方法,但我无法找到任何方法。