2014-07-22 4 views
12

Użyłem pakietu caret do tuningu modelu regresji logistycznej glmnet. Natomiast wartość lambda z najlepszych melodii jest jedną z wartości I określonych w tuneGrid wartości lambda końcowego modelu są zupełnie inne:R trt pociąg końcowy model glmnet model wartości nie zgodnie z

require(caret) 
set.seed(1) 
x <- matrix(runif(1000), nrow = 100) 
y <- factor(rbinom(100, 1, 0.5)) 
lambda.seq <- exp(seq(log(1e-5), log(1e0), length.out = 20)) 

model <- train(x, y, 
       method ="glmnet", 
       family = "binomial", 
       tuneGrid = expand.grid(alpha = 1, 
             lambda = lambda.seq)) 
model$bestTune 
# alpha lambda 
# 13  1 0.0143845 
model$finalModel$lambdaOpt 
# [1] 0.0143845 

model$finalModel$lambda 
# [1] 0.1236344527 0.1126511087 0.1026434947 0.0935249295 0.0852164325 0.0776460395 
# [7] 0.0707481794 0.0644631061 0.0587363814 0.0535184032 0.0487639757 0.0444319185 
# [13] 0.0404847094 0.0368881594 0.0336111170 0.0306251980 0.0279045398 0.0254255774 
# [19] 0.0231668392 0.0211087610 0.0192335169 0.0175248642 0.0159680036 0.0145494502 
# [25] 0.0132569171 0.0120792091 0.0110061255 0.0100283716 0.0091374787 0.0083257303 
# [31] 0.0075860954 0.0069121676 0.0062981097 0.0057386030 0.0052288013 0.0047642890 
# [37] 0.0043410427 0.0039553964 0.0036040099 0.0032838396 0.0029921123 0.0027263013 
# [43] 0.0024841042 0.0022634233 0.0020623470 0.0018791337 0.0017121967 0.0015600899 
# [49] 0.0014214958 0.0012952140 0.0011801508 0.0010753094 0.0009797819 0.0008927408 

model$finalModel$lambdaOpt %in% lambda.seq 
# [1] TRUE 

ostatecznego modelu jest optymalna wartość lambda również nie jest na liście lambda, że ten sam model rzekomo wykorzystane:

model$finalModel$lambdaOpt %in% model$finalModel$lambda 
# [1] FALSE 

Co wyjaśnia te rozbieżności w lambda?

Odpowiedz

9

Ostateczny model jest w zasadzie remont z całym zbiorze PO alphalambda i zostały zoptymalizowane przy użyciu technik resamplingu.

przypadku drukowania model$finalModel$call widać połączenie jest wykonane (pominięty x, y struktura krótkość):

Call: glmnet(x, y, family = "binomial", alpha = 1) 

Tutaj alpha jest ustawiony (jeśli zaszło sekwencję byłoby optymalne alpha znaleziono), ale żadna z ustawionych wartości lambda nie jest ustawiona na trenowanie, a zatem sekwencja automatyczna jest generowana na podstawie danych użytkownika i model jest dopasowany. Następnie przewiduje ten sam zestaw treningowy z lambdaOpt (i resztą sekwencji, którą dałeś). Spójrz na glmnet vignette i jak możesz określić różne lambda po treningu.

Jeśli wpiszesz:

> names(model$modelInfo) 
    [1] "label" "library" "type" "parameters" "grid" "loop"  
    [7] "fit" "predict" "prob" "predictors" "varImp" "levels"  
    [13] "tags" "sort" "trim" 

a następnie przejść przez każdy z tych odcinków, można spojrzeć na to, co train robi. Możesz zobaczyć w model$modelInfo$predict sposób przewidywania na lambdaOpt i resztę sekwencji.

Podczas drukowania model$results rzeczywiście dostać listę lambda oraz działania na całego szkolenia zestaw z każdego z nich:

alpha  lambda Accuracy  Kappa AccuracySD KappaSD 
1  1 1.000000e-05 0.5698940 0.15166891 0.09061320 0.17133524 
2  1 1.832981e-05 0.5698940 0.15166891 0.09061320 0.17133524 
3  1 3.359818e-05 0.5698940 0.15166891 0.09061320 0.17133524 
4  1 6.158482e-05 0.5698940 0.15166891 0.09061320 0.17133524 
5  1 1.128838e-04 0.5698940 0.15166891 0.09061320 0.17133524 
6  1 2.069138e-04 0.5698940 0.15166891 0.09061320 0.17133524 
7  1 3.792690e-04 0.5698940 0.15166891 0.09061320 0.17133524 
8  1 6.951928e-04 0.5698940 0.15166891 0.09061320 0.17133524 
9  1 1.274275e-03 0.5675708 0.14690433 0.09071728 0.17085665 
10  1 2.335721e-03 0.5643334 0.14059590 0.09153010 0.17204036 
11  1 4.281332e-03 0.5629588 0.13822063 0.09403553 0.17715441 
12  1 7.847600e-03 0.5694974 0.15221600 0.08791315 0.16433922 
13  1 1.438450e-02 0.5700431 0.15448347 0.08864353 0.16509332 
14  1 2.636651e-02 0.5695053 0.15189752 0.08113581 0.15184619 
15  1 4.832930e-02 0.5635977 0.14112303 0.05833646 0.11617226 
16  1 8.858668e-02 0.5305835 0.08983718 0.08116759 0.14752307 
17  1 1.623777e-01 0.4800871 0.01124082 0.05827521 0.05715298 
18  1 2.976351e-01 0.4725241 0.00000000 0.04488500 0.00000000 
19  1 5.455595e-01 0.4725241 0.00000000 0.04488500 0.00000000 
20  1 1.000000e+00 0.4725241 0.00000000 0.04488500 0.00000000 

podsumować to, co dzieje się w daszek + glmnet:

  1. optymalizuje alpha i lambda w obrębie wartości tuneGrid podanej przy użyciu technik resampling;

  2. nowe wyposażenie modelu, teraz na planie treningowym cały, z optymalnealpha;

  3. przewiduje cały zestaw treningowy z lambdaOpt znaleziony w 1. oraz w pozostałej części sekwencji lambda w grze Grid.