Получение коэффициентов glmnet на "лучшей" лямбда

Я использую следующий код с glmnet:

> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')

enter image description here

Однако я хочу распечатать коэффициенты в лучшем случае Lambda, как это делается в регрессии хребта. Я вижу следующую структуру подгонки:

> str(fit)
List of 12
 $ a0       : Named num [1:79] 20.1 21.6 23.2 24.7 26 ...
  ..- attr(*, "names")= chr [1:79] "s0" "s1" "s2" "s3" ...
 $ beta     :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  .. [email protected] i       : int [1:561] 0 4 0 4 0 4 0 4 0 4 ...
  .. [email protected] p       : int [1:80] 0 0 2 4 6 8 10 12 14 16 ...
  .. [email protected] Dim     : int [1:2] 10 79
  .. [email protected] Dimnames:List of 2
  .. .. ..$ : chr [1:10] "cyl" "disp" "hp" "drat" ...
  .. .. ..$ : chr [1:79] "s0" "s1" "s2" "s3" ...
  .. [email protected] x       : num [1:561] -0.0119 -0.4578 -0.1448 -0.7006 -0.2659 ...
  .. [email protected] factors : list()
 $ df       : int [1:79] 0 2 2 2 2 2 2 2 2 3 ...
 $ dim      : int [1:2] 10 79
 $ lambda   : num [1:79] 5.15 4.69 4.27 3.89 3.55 ...
 $ dev.ratio: num [1:79] 0 0.129 0.248 0.347 0.429 ...
 $ nulldev  : num 1126
 $ npasses  : int 1226
 $ jerr     : int 0
 $ offset   : logi FALSE
 $ call     : language glmnet(x = as.matrix(mtcars[-1]), y = mtcars[, 1])
 $ nobs     : int 32
 - attr(*, "class")= chr [1:2] "elnet" "glmnet"

Но я не могу получить лучшую Лямбду и соответствующие коэффициенты. Благодарим за помощь.

Ответ 1

Попробуйте следующее:

fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1], 
    lambda=cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
coef(fit)

Или вы можете указать значение лямбда в coef:

fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
coef(fit, s = cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)

Вам нужно выбрать "лучшую" лямбду, а lambda.1se является разумной или оправданной, которую нужно выбрать. Но вы можете использовать cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min или любое другое значение лямбда, которое вы считаете "лучшим" для вас.

Ответ 2

boxcox(){MASS} предоставляет график максимального правдоподобия какое значение l обеспечивает наилучшее соответствие линейной модели

boxcox(lm.fit) обеспечивает график максимального правдоподобия для широкий диапазон ls в линейной модели

lm.fit выберите l с помощью наивысшее значение ML

boxcox(lm.fit,lambda=seq(-0.1, 0.1, 0.01)), если для Например, самый высокий l составляет около 0,04, получить увеличенный график вокруг эта область

В этом примере функция обеспечивает график между l = - 0,1 и 0,1 с шагом 0,01.