web-dev-qa-db-fra.com

R: utilisation de ranger avec caret, argument tuneGrid

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

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)
)
20
missuse