2016-03-25 22 views
4

Bir GLM boost modeli için parametreleri ayarlamaya çalışıyorum. Bu model ile ilgili Caret package documentation göre, ayarlanabilir, mstop ve erimesi için 2 parametre vardır.R düzeltme: Ayarlama GLM boost prune parametresi

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. 

erik parametresi (Tuning parameter 'prune' was held constant at a value of yes) sabit tutulduğu glmBoostGridprune == no da içerir, ancak:

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 

çıkış aşağıdaki gibidir. boost_control yönteminde mboost paket belgelerine bir göz attım ve yalnızca mstop parametresine erişilebilir, bu nedenle prune parametresi train yönteminin tuneGrid parametresiyle nasıl ayarlanabiliyor?

cevap

2

fark glmboost çağrılarına bu bölümünde loceted olduğunu:

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

fark aic nasıl hesaplandığını yatmaktadır. Ancak, pıhtıdaki glmboost ile çeşitli testler yapmak, beklenildiği gibi davranıyorsa, şüphelerim var. Şüphelerimin doğru olup olmadığını görmek için github'da bir sorun yarattım. Geliştiricilerden daha fazla bilgi varsa cevabımı düzenlerim.

+0

Teşekkürler phiver, Github'dan geri bildiriminiz için bizi izlemeye devam ediyorum! – Mesmer

+0

Ben orada sorduğunuz için [github] (https://github.com/topepo/caret/issues/396) topepo gelen cevabı gördüm. 'Prune' parametresi tek bir giriş olarak kullanılır ve bir vektörle ayarlanamaz. Yaptığınız gibi iki modelle denemeliyim, biri 'prune = no', diğeri ise 'prune = yes' ile bir fark olup olmadığını kontrol edin. – Mesmer