2016-03-25 10 views
4

Ich versuche, die Parameter für ein GLM-Boost-Modell zu tunen. Laut der Caret package documentation zu diesem Modell gibt es 2 Parameter, die eingestellt werden können, Mstop und Prune.R Caret: Tuning GLM Boost Prune Parameter

library(caret) 
    library(mlbench) 

    data(Sonar) 

    set.seed(25) 
    trainIndex = createDataPartition(Sonar$Class, p = 0.9, list = FALSE) 
    training = Sonar[ trainIndex,] 
    testing = Sonar[-trainIndex,] 

    ### set training parameters 
    fitControl = trainControl(method = "repeatedcv", 
           number = 10, 
           repeats = 10, 
           ## Estimate class probabilities 
           classProbs = TRUE, 
           ## Evaluate a two-class performances 
           ## (ROC, sensitivity, specificity) using the following function 
           summaryFunction = twoClassSummary) 

    ### train the models 
    set.seed(69) 
    # Use the expand.grid to specify the search space 
    glmBoostGrid = expand.grid(mstop = c(50, 100, 150, 200, 250, 300), 
           prune = c('yes', 'no')) 

    glmBoostFit = train(Class ~ ., 
         data = training, 
         method = "glmboost", 
         trControl = fitControl, 
         tuneGrid = glmBoostGrid, 
         metric = 'ROC') 
glmBoostFit 

Der Ausgang ist die folgende:

Boosted Generalized Linear Model 

188 samples 
60 predictors 
    2 classes: 'M', 'R' 

No pre-processing 
Resampling: Cross-Validated (10 fold, repeated 10 times) 
Summary of sample sizes: 169, 169, 169, 169, 170, 169, ... 
Resampling results across tuning parameters: 

    mstop ROC  Sens Spec  ROC SD  Sens SD Spec SD 
    50 0.8261806 0.764 0.7598611 0.10208114 0.1311104 0.1539477 
    100 0.8265972 0.729 0.7625000 0.09459835 0.1391250 0.1385465 
    150 0.8282083 0.717 0.7726389 0.09570417 0.1418152 0.1382405 
    200 0.8307917 0.714 0.7769444 0.09484042 0.1439011 0.1452857 
    250 0.8306667 0.719 0.7756944 0.09452604 0.1436740 0.1535578 
    300 0.8278403 0.728 0.7722222 0.09794868 0.1425398 0.1576030 

Tuning parameter 'prune' was held constant at a value of yes 
ROC was used to select the optimal model using the largest value. 
The final values used for the model were mstop = 200 and prune = yes. 

Der prune Parameter konstant gehalten wird (Tuning parameter 'prune' was held constant at a value of yes), obwohl die glmBoostGrid enthält auch prune == no. Ich habe einen Blick auf die mboost Paket-Dokumentation unter der boost_control Methode und nur die mstop Parameter ist zugänglich, so wie der prune Parameter mit der tuneGrid Parameter der train Methode abgestimmt werden kann?

Antwort

2

Der Unterschied ist in diesem Teil der Anrufe für glmboost loceted:

if (param$prune == "yes") { 
    out <- if (is.factor(y)) 
     out[mstop(AIC(out, "classical"))] 
    else out[mstop(AIC(out))] 
} 

Der Unterschied liegt darin, wie die aic berechnet wird. Aber verschiedene Tests mit glmboost in caret laufen lassen Ich habe meine Zweifel, ob es sich wie erwartet verhält. Ich habe ein Problem in GitHub erstellt, um zu sehen, ob mein Verdacht richtig ist. Ich werde meine Antwort bearbeiten, wenn mehr Informationen von den Entwicklern vorliegen.

+0

Danke Phiver, ich bleibe dran für Ihr Feedback von Github! – Mesmer

+0

Ich habe die Antwort von topepo auf [github] gesehen (https://github.com/topepo/caret/issues/396) danke für die Frage. Der Parameter 'Prune' wird als einzelner Eintrag verwendet und kann nicht mit einem Vektor abgestimmt werden. Ich sollte versuchen, wie du es mit 2 Modellen getan hast, eines mit 'prune = no 'und das andere mit' prune = yes', um zu prüfen, ob es einen Unterschied gibt. – Mesmer