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')

要训练树的数量,您可以使用lapplycreateMultiFoldscreateFolds 创建的固定折叠。

编辑:虽然上面的示例适用于插入符号包版本 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 中使用插入符号调整朴素贝叶斯分类器

R语言使用caret包的train函数构建多元自适应回归样条(MARS)模型模型调优自定义设置tuneGrid参数多个超参数组合调优trainControl函数自定义调优评估指标

无法运行插入符号 xgboost 分类

随机森林中的 tuneGrid 参数问题

使用并行训练带有插入符号的随机森林

使用线性内核调整 SVM 时,R 插入符号异常缓慢