Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting glmnet coefficients at 'best' lambda

Tags:

I am using following code with glmnet:

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

enter image description here

However, I want to print out the coefficients at best Lambda, like it is done in ridge regression. I see following structure of fit:

> 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   .. ..@ i       : int [1:561] 0 4 0 4 0 4 0 4 0 4 ...   .. ..@ p       : int [1:80] 0 0 2 4 6 8 10 12 14 16 ...   .. ..@ Dim     : int [1:2] 10 79   .. ..@ Dimnames:List of 2   .. .. ..$ : chr [1:10] "cyl" "disp" "hp" "drat" ...   .. .. ..$ : chr [1:79] "s0" "s1" "s2" "s3" ...   .. ..@ x       : num [1:561] -0.0119 -0.4578 -0.1448 -0.7006 -0.2659 ...   .. ..@ 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" 

But I am not able to get the best Lambda and the corresponding coefficients. Thanks for your help.

like image 247
rnso Avatar asked Jun 01 '15 04:06

rnso


Video Answer


1 Answers

Try this:

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

Or you can specify a specify a lambda value in coef:

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

You need to pick a "best" lambda, and lambda.1se is a reasonable, or justifiable, one to pick. But you could use cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min or any other value of lambda that you settle upon as "best" for you.

like image 171
Jota Avatar answered Sep 18 '22 09:09

Jota