r - 格姆内特。相同 lambda 向量的不同结果,取决于它是由 glmnet 计算的还是作为参数传递的

标签 r glmnet

当 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]) 的系数究竟是如何确定的?
  • 最佳答案

    这是一个棘手的问题。当 alpha=0 时,lambda 的“起始”值(除截距以外的所有系数都为零时的值)为无穷大。由于我们想要生成一个从起始值以几何方式趋于零的值网格,无穷大没有多大用处。因此,我们将其作为 alpha=0.001(在本例中为 500)时使用的起始值,这是所见的最大 lambda。

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

    在 m2 中,我们实际上为第一个位置生成了 500 的拟合,并且系数不完全为零。

    为了验证我所说的,请注意后续系数都匹配。

    特雷弗·哈斯蒂

    关于r - 格姆内特。相同 lambda 向量的不同结果,取决于它是由 glmnet 计算的还是作为参数传递的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861233/

    相关文章:

    read_csv() 解析错误信息,如何解释?

    R 将整个文件夹 move 到另一个目录

    r - ggplot - 使中位数不可见 geom_boxplot

    r - Purrr 将函数映射到除一列以外的所有列

    r - 从 cva.glmnet 对象中提取最佳参数

    r - R:glmnet-Cox错误

    r - 使用 R 中的 glmnet 预测二进制结果的函数

    r - glmnet 的标准化参数如何处理虚拟变量?

    r - 将最新的 R 加载到新的 Debian 机器上的脚本