22

我在 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 和相应的系数。谢谢你的帮助。

4

3 回答 3

21

尝试这个:

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

或者您可以指定一个指定的 lambda 值coef

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

您需要选择一个“最佳” lambda,并且lambda.1se是一个合理或合理的选择。但是您可以使用cv.glmnet(as.matrix(mtcars[-1]), mtcars[,1])$lambda.min或任何其他您认为对您来说“最佳”的 lambda 值。

于 2015-06-01T04:10:49.910 回答
4

要提取最佳 lambda,您可以键入fit$lambda.min

要获得与最佳 lambda 对应的系数,请使用coef(fit, s = fit$lambda.min)- 请参考Glmnet vignette的第 6 页。

我认为系数是由适合完整数据的模型产生的,而不仅仅是测试集,如本页所述。

于 2020-02-03T21:30:28.680 回答
-1

boxcox(){MASS} 提供一个最大似然图,显示 l 的哪个值在线性模型中提供最佳拟合

boxcox(lm.fit) 为线性模型中的大范围 l 提供最大似然图

lm.fit 选择 ML 值最高的 l

boxcox(lm.fit,lambda=seq(-0.1, 0.1, 0.01)) 例如,如果最高 l 约为 0.04,则在该区域周围放大图

在该示例中,该函数以 0.01 为增量提供了一个介于 l =- 0.1 和 0.1 之间的图。

于 2018-02-22T02:12:22.480 回答