R: 使用caret包和ranger包进行调参

我正在使用caret包来分析使用ranger构建的随机森林模型。我无法弄明白如何使用tuneGrid参数调用train函数来调整模型参数。

我认为我调用tuneGrid参数的方式有误,但无法找出问题所在。任何帮助都将不胜感激。

data(iris)library(ranger)model_ranger <- ranger(Species ~ ., data = iris, num.trees = 500, mtry = 4,                       importance = 'impurity')library(caret)# 我的tuneGrid对象: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')

回答:

以下是caret中ranger的语法:

library(caret)

在调参参数前添加.

tgrid <- expand.grid(  .mtry = 2:4,  .splitrule = "gini",  .min.node.size = c(10, 20))

caret仅支持这三个参数,而不支持树的数量。在train中可以指定num.trees和importance:

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             OverallPetal.Length 100.0000Petal.Width   84.4298Sepal.Length   0.9855Sepal.Width    0.0000

要检查是否有效,可以将树的数量设置为1000以上——拟合将会慢很多。在更改importance = "impurity"后:

#output:             OverallPetal.Length  100.00Petal.Width    81.67Sepal.Length   16.19Sepal.Width     0.00

如果不起作用,我建议从CRAN安装最新版本的ranger,从GitHub安装caret:

devtools::install_github('topepo/caret/pkg/caret')

要训练树的数量,可以使用lapply与通过createMultiFoldscreateFolds创建的固定折叠一起使用。

编辑:虽然上述示例适用于caret包6.0-84版本,但不使用点号的超参数名称也同样有效。

tgrid <- expand.grid(  mtry = 2:4,  splitrule = "gini",  min.node.size = c(10, 20))

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注