J'utilise le package caret pour analyser les modèles de forêt aléatoire construits à l'aide de ranger . Je ne peux pas comprendre comment appeler la fonction train à l'aide de l'argument tuneGrid pour régler les paramètres du modèle.
Je pense que j'appelle mal l'argument tuneGrid, mais je ne peux pas comprendre pourquoi il est faux. Toute aide serait appréciée.
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'
)
Voici la syntaxe pour ranger dans caret:
library(caret)
ajouter .
avant de régler les paramètres:
tgrid <- expand.grid(
.mtry = 2:4,
.splitrule = "gini",
.min.node.size = c(10, 20)
)
Seuls ces trois sont soutenus par un caret et non par le nombre d'arbres. En train, vous pouvez spécifier le nombre d'arbres et leur 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")
pour obtenir une importance variable:
varImp(model_caret)
#output
Overall
Petal.Length 100.0000
Petal.Width 84.4298
Sepal.Length 0.9855
Sepal.Width 0.0000
Pour vérifier si cela fonctionne, définissez le nombre d'arbres sur 1000+ - l'ajustement sera beaucoup plus lent. Après avoir changé importance = "impurity"
:
#output:
Overall
Petal.Length 100.00
Petal.Width 81.67
Sepal.Length 16.19
Sepal.Width 0.00
Si cela ne fonctionne pas, je recommande d'installer le dernier ranger de CRAN et le caret de git hub:
devtools::install_github('topepo/caret/pkg/caret')
Pour former le nombre d'arbres, vous pouvez utiliser lapply
avec des plis fixes créés par createMultiFolds
ou createFolds
.
ÉDITEZ : alors que l'exemple ci-dessus fonctionne avec le package caret version 6.0-84, l'utilisation des noms d'hyper paramètres sans points fonctionne également.
tgrid <- expand.grid(
mtry = 2:4,
splitrule = "gini",
min.node.size = c(10, 20)
)