Glmnet。相同的lambda向量,根据是由glmnet计算还是作为参数传递而来,会得到不同的结果。

4

当使用glmnet算法选择lambda向量时,带有岭正则化的Glmnet在计算第一个lambda值的系数时与在函数调用中给定lambda向量时不同。例如,两个模型(我期望它们是相同的)

> m <- glmnet(rbind(c(1, 0), c(0, 1)), c(1, 0), alpha=0)
> m2 <- glmnet(rbind(c(1, 0), c(0, 1)), c(1, 0), alpha=0, lambda=m$lambda)

给出完全不同的系数:

> coef(m, s=m$lambda[1])
3 x 1 sparse Matrix of class "dgCMatrix"
                        1
(Intercept)  5.000000e-01
V1           1.010101e-36
V2          -1.010101e-36

> coef(m2, s=m2$lambda[1])
3 x 1 sparse Matrix of class "dgCMatrix"
                       1
(Intercept)  0.500000000
V1           0.000998004
V2          -0.000998004

对于不同的数据集也会出现同样的情况。当glmnet没有提供Lambda时,除截距之外,所有lambda.max coef(m, s=m$lambda[1])的系数都非常接近于零,并且由于四舍五入,预测结果对于任何X都相等。

我的问题:

  1. 为什么会这样?是否存在差异?
  2. 最大Lambda coef(m, s=m$lambda[1])的系数是如何确定的?
1个回答

6
这是一个棘手的问题。当alpha=0时,lambda(所有系数除截距外均为零时的值)的“起始”值为无穷大。由于我们希望生成一个从起始值几何地趋近于零的值网格,因此无穷大没有什么用处。因此,我们将其设置为alpha = 0.001时要使用的起始值(在这种情况下为500),这是最大的lambda值。
因此,在m中,系数实际上为零,但所报告的最大lambda为500(实际上它确实是无穷大)。
在m2中,我们实际上在第一个位置上产生了500的拟合,系数并不完全为零。
要验证我所说的,请注意随后的系数都匹配。
Trevor Hastie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接