【发布时间】:2015-08-14 10:30:39
【问题描述】:
我在 glmnet 中使用以下代码:
> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')
但是,我想打印出最好的 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
.. ..@ 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"
但我无法得到最好的 Lambda 和相应的系数。感谢您的帮助。
【问题讨论】:
-
您正在使用默认的 lambda 序列,它是使用
nlambda,lambda.min.ratio构造的。我一直听到的建议是传递你自己的 lambda 序列,例如lambda = 10^seq(10,-15,1/3)或类似的。 -
@smci ,您的示例中有错字。标志应该在 from 参数上,例如
lambda = 10^seq(from=-10, to=15, by=1/3) -
@smci 你有引用的建议吗?我找不到任何声明不使用默认 lambda 序列的内容。虽然我理解为什么提供一个用户指定的文件可能会很好,但我还是希望有一个来源。
-
@AW27:你有already been asking me this on CV for a week 没有引用,但我告诉你十多年来整个用户社区都知道什么是正确的方法;我既不是 glmnet doc 的作者,也不是出版者。所以无论如何,我鼓励你提出一个 docbug,写一篇博客文章来说明这一点(在多个不同的数据集上),做一个文献搜索为什么这没有很好的覆盖等等。但是请不要再问我了.
标签: r regression glmnet coefficients