在 'best' lambda 获取 glmnet 系数
Getting glmnet coefficients at 'best' lambda
我在 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和相应的系数。感谢您的帮助。
试试这个:
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1],
lambda=cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
coef(fit)
或者您可以在 coef
中指定一个 lambda 值:
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
coef(fit, s = cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
你需要选择一个 "best" lambda,而 lambda.1se
是一个合理的,或者说是合理的,选择一个。但是您可以使用 cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min
或您确定为 "best" 的任何其他 lambda 值。
boxcox(){MASS}
提供了一个 maximum-likelihood 图显示
l 的哪个值最适合线性模型
boxcox(lm.fit)
提供 maximum-likelihood 图
线性模型中 l 的范围很广
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。
要提取最佳 lambda,您可以键入 fit$lambda.min
要获得对应于最佳lambda的系数,请使用coef(fit, s = fit$lambda.min)
- 请参考Glmnet vignette的第6页。
我认为这些系数是由适合 完整数据 的模型产生的,而不仅仅是测试集,如 .
中所述
我在 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和相应的系数。感谢您的帮助。
试试这个:
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1],
lambda=cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
coef(fit)
或者您可以在 coef
中指定一个 lambda 值:
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
coef(fit, s = cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.1se)
你需要选择一个 "best" lambda,而 lambda.1se
是一个合理的,或者说是合理的,选择一个。但是您可以使用 cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min
或您确定为 "best" 的任何其他 lambda 值。
boxcox(){MASS}
提供了一个 maximum-likelihood 图显示
l 的哪个值最适合线性模型
boxcox(lm.fit)
提供 maximum-likelihood 图
线性模型中 l 的范围很广
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。
要提取最佳 lambda,您可以键入 fit$lambda.min
要获得对应于最佳lambda的系数,请使用coef(fit, s = fit$lambda.min)
- 请参考Glmnet vignette的第6页。
我认为这些系数是由适合 完整数据 的模型产生的,而不仅仅是测试集,如