R:使用带有插入符号的游侠,tuneGrid 参数
Posted
技术标签:
【中文标题】R:使用带有插入符号的游侠,tuneGrid 参数【英文标题】:R: using ranger with caret, tuneGrid argument 【发布时间】:2018-06-28 07:55:46 【问题描述】:我正在使用caret 包来分析使用ranger 构建的随机森林模型。我不知道如何使用 tuneGrid 参数调用训练函数来调整模型参数。
我认为我调用 tuneGrid 参数是错误的,但不知道为什么它是错误的。任何帮助将不胜感激。
data(iris)
library(ranger)
model_ranger <- ranger(Species ~ ., data = iris, num.trees = 500, mtry = 4,
importance = 'impurity')
library(caret)
# my tuneGrid object:
tgrid <- expand.grid(
num.trees = c(200, 500, 1000),
mtry = 2:4
)
model_caret <- train(Species ~ ., data = iris,
method = "ranger",
trControl = trainControl(method="cv", number = 5, verboseIter = T, classProbs = T),
tuneGrid = tgrid,
importance = 'impurity'
)
【问题讨论】:
【参考方案1】:这是插入符号中 Ranger 的语法:
library(caret)
在调整参数之前添加.
:
tgrid <- expand.grid(
.mtry = 2:4,
.splitrule = "gini",
.min.node.size = c(10, 20)
)
插入符号仅支持这三个,而不是树的数量。在 train 中,您可以指定 num.trees 和重要性:
model_caret <- train(Species ~ ., data = iris,
method = "ranger",
trControl = trainControl(method="cv", number = 5, verboseIter = T, classProbs = T),
tuneGrid = tgrid,
num.trees = 100,
importance = "permutation")
获得可变重要性:
varImp(model_caret)
#output
Overall
Petal.Length 100.0000
Petal.Width 84.4298
Sepal.Length 0.9855
Sepal.Width 0.0000
要检查这是否有效,请将树的数量设置为 1000+ - 拟合会慢得多。改完importance = "impurity"
:
#output:
Overall
Petal.Length 100.00
Petal.Width 81.67
Sepal.Length 16.19
Sepal.Width 0.00
如果它不起作用,我建议从 CRAN 安装最新的游侠并从 git hub 安装插入符:
devtools::install_github('topepo/caret/pkg/caret')
要训练树的数量,您可以使用lapply
和createMultiFolds
或createFolds
创建的固定折叠。
编辑:虽然上面的示例适用于插入符号包版本 6.0-84,但使用不带点的超参数名称也适用。
tgrid <- expand.grid(
mtry = 2:4,
splitrule = "gini",
min.node.size = c(10, 20)
)
【讨论】:
为什么要在转参数前加点? @dule arnaux 这正是caret
的创建者对它们的定义。
@missuse 插入符号文档在它描述的调整参数中没有点 topepo.github.io/caret/available-models.html。对于其他模型,我运行时没有点。所以想知道这是否是一些较旧的传统方式?
@dule arnaux 我的回答很可能已被弃用。我会检查并更新答案。以上是关于R:使用带有插入符号的游侠,tuneGrid 参数的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包的train函数构建多元自适应回归样条(MARS)模型模型调优自定义设置tuneGrid参数多个超参数组合调优trainControl函数自定义调优评估指标