Glmnet。相同lambda向量的不同结果,取决于它是由glmnet计算还是作为参数传递

时间:2014-04-04 11:13:05

标签: r glmnet

具有脊正则化的Glmnet在通过glmnet算法选择λ矢量时与在函数调用中给出的λ矢量相比时不同地计算第一λ值的系数。例如,两个模型(我希望它们是相同的)

> 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 个答案:

答案 0 :(得分:6)

这是一个棘手的问题。当alpha = 0时,&#34;开始&#34; lambda的值(当除截距之外的所有系数都为零时的值)是无穷大。由于我们想要从起始值生成几何上为零的网格,因此无穷大并没有多大用处。所以我们把它当作alpha = 0.001(在这种情况下为500)时使用的起始值,这是看到的最大lambda。

因此,在m中,系数实际上为零,但报告的最大lambda为500(同时它实际上是无穷大)

在m2中,我们实际上为第一个位置产生500的拟合,系数不是很零。

要验证我所说的内容,请注意后续系数都匹配。

Trevor Hastie