网络。同一个 lambda 向量的不同结果,取决于它是通过 glmnet 计算还是作为参数传递下来
Posted
技术标签:
【中文标题】网络。同一个 lambda 向量的不同结果,取决于它是通过 glmnet 计算还是作为参数传递下来【英文标题】:Glmnet. Different results for the same lambda vector, depending on whether it was calculated by glmnet or passed down as a parameter 【发布时间】:2014-05-16 16:11:36 【问题描述】:当 lambda 向量由 glmnet 算法选择时,与在函数调用中给出时相比,具有岭正则化的 Glmnet 计算第一个 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 的预测都相等(由于舍入? )。
我的问题:
-
为什么会这样?差异是故意的吗?
最大 lambda coef(m, s=m$lambda[1]) 的系数究竟是如何确定的?
【问题讨论】:
【参考方案1】:这是一个棘手的问题。当 alpha=0 时,lambda 的“起始”值(除截距之外的所有系数都为零时的值)为无穷大。由于我们想要生成一个从初始值几何上趋于零的值网格,因此无穷大并没有多大用处。因此,我们将其设为当 alpha=0.001(在本例中为 500)时使用的起始值,这是看到的最大 lambda。
因此,在 m 中,系数实际上为零,但报告的最大 lambda 为 500(同时它实际上是无穷大)
在 m2 中,我们实际上为第一个位置生成了 500 处的拟合,并且系数并不完全为零。
为了验证我所说的,注意后面的系数都匹配。
特雷弗·哈斯蒂
【讨论】:
以上是关于网络。同一个 lambda 向量的不同结果,取决于它是通过 glmnet 计算还是作为参数传递下来的主要内容,如果未能解决你的问题,请参考以下文章
$\lambda = 0$ 和 OLS 的 LASSO 在 R glmnet 中产生不同的结果