web-dev-qa-db-fra.com

caret - La grille de paramètres de réglage devrait avoir des colonnes mtry

J'utilise ce code:

    mtry <- round(sqrt(18), 0)

gbmGrid <- expand.grid(
              interaction.depth = c(1, 2, 3, 4, 5, 6)
            , n.trees = seq(10, 10000, by = 100)
            , shrinkage = 0.01
            , n.minobsinnode = c(5, 10, 20, 30)
            , distribution = 'gaussian'
            , method = 'gbm'
            , mtry = mtry
    )

    fitControl <- trainControl(
                method = "repeatedcv"
                , number = 2
                , repeats = 3
        )

    gbmFit1 <- train(

                     Y ~

                      X1
                    + X2

                    , data = Train

                    , trControl = fitControl
                    , tuneGrid = gbmGrid
                    , verbose = FALSE
        )

mais obtenez:

The tuning parameter grid should have columns mtry

J'ai installé le dernier paquet car certaines personnes l'ont suggéré et ont également essayé d'utiliser .mtry. Des idées? (oui j'ai googlé et jeté un coup d'oeil à SO)

7
cs0815

Je l'ai ramené à l'essentiel (iris). Cela fonctionne - le mtry non existant pour gbm était le problème:

library(datasets)
library(gbm)
library(caret)

grid <- expand.grid(
                n.trees = seq(10, 1000, by = 100)
            , interaction.depth = c(4)
            , shrinkage = c(0.01, 0.1)
            , n.minobsinnode = c(5, 10, 20, 30)        
    )

train_control <- trainControl(
                    method = "repeatedcv"
                    , number = 10
                    , repeats = 10
    )

model <- train(Petal.Width ~ Petal.Length
                        , method = 'gbm'
                        , distribution = 'gaussian'
                        , data = iris
                        , trControl = train_control
                        , tuneGrid = grid
                        , verbose = FALSE
    )

model

Désolée de vous avoir fait perdre votre temps!

3
cs0815

Dans la version> = 6.0-81 de caret, le message d'erreur pour ce type de cas est plus clair. Par exemple, considérer que l'on fournit une mtry dans la grille de réglage lorsque mtry n'est pas un paramètre pour la méthode donnée.

Dans caret <6.0-81, l'erreur suivante se produira:

# Error: The tuning parameter grid should have columns mtry

Dans caret> = 6.0-81, l'erreur suivante se produira:

# Error: The tuning parameter grid should not have columns mtry

Reprex du message d'erreur confus d'origine

Et voici un exemple reproductible démontrant l'amélioration du message d'erreur.

caret <6.0-81

library(caret)
getNamespaceVersion("caret")
## version 
## "6.0-80"

mtry <- round(sqrt(18), 0)
gbmGrid <- expand.grid(
    interaction.depth = c(1, 2, 3, 4, 5, 6)
    , n.trees = seq(10, 10000, by = 100)
    , shrinkage = 0.01
    , n.minobsinnode = c(5, 10, 20, 30)
    , distribution = 'gaussian'
    , method = 'gbm'
    , mtry = mtry
)
fitControl <- trainControl(
    method = "repeatedcv"
    , number = 2
    , repeats = 3
)
gbmFit1 <- train(
    Species ~ Sepal.Length + Sepal.Width
    , data = iris
    , trControl = fitControl
    , tuneGrid = gbmGrid
    , verbose = FALSE
)
# Error: The tuning parameter grid should have columns mtry

caret> = 6.0-81

library(caret)
getNamespaceVersion("caret")
## version 
## "6.0-81"

mtry <- round(sqrt(18), 0)
gbmGrid <- expand.grid(
    interaction.depth = c(1, 2, 3, 4, 5, 6)
    , n.trees = seq(10, 10000, by = 100)
    , shrinkage = 0.01
    , n.minobsinnode = c(5, 10, 20, 30)
    , distribution = 'gaussian'
    , method = 'gbm'
    , mtry = mtry
)
fitControl <- trainControl(
    method = "repeatedcv"
    , number = 2
    , repeats = 3
)
gbmFit1 <- train(
    Species ~ Sepal.Length + Sepal.Width
    , data = iris
    , trControl = fitControl
    , tuneGrid = gbmGrid
    , verbose = FALSE
)
# Error: The tuning parameter grid should not have columns mtry

Pour plus d'informations, reportez-vous au problème GitHub qui décrit puis corrige ce problème: https://github.com/topepo/caret/issues/955

0
jmuhlenkamp