【问题标题】:lambda sequence in glmnet in ridge vs lasso岭与套索中glmnet中的lambda序列
【发布时间】:2016-11-27 02:01:34
【问题描述】:

我在 glmnet 计算不合理的 lambda 序列时遇到了 ridge cv 问题。 我正在使用完全相同的数据使用glmnet 运行岭回归和套索回归。套索很好,但岭不是。

ridge.cv <- cv.glmnet(preds[train.i,], resp[train.i], alpha=0, family="binomial", type.measure="class")
lasso.cv <- cv.glmnet(preds[train.i,], resp[train.i], alpha=1, family="binomial", type.measure="class")

range(lasso.cv$glmnet.fit$dev.ratio)
[1] 1.117039e-14 9.334558e-01

range(ridge.cv$glmnet.fit$dev.ratio)
[1] 1.117039e-14 1.852909e-01

> range( lasso.cv$lambda)
[1]   0.002812585 0.268474838

> range(ridge.cv$lambda)
[1]   2.812585 268.474838

因此,Lasso 计算了一个合理的 lambda 序列,产生了一个合理的偏差范围。然而,Ridge 计算出的 lambda 序列正好是 lasso 的 1000 倍,产生了一个荒谬的偏差范围。预测矩阵的尺寸为 891 x 1028

知道为什么会发生这种情况以及如何解决吗?我当然可以输入自己的序列,但我想知道为什么会发生这种情况,以防它只是更大问题的征兆。

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    来自glmnet 帮助文件:

    lambda:使用的“lambda”值的实际序列。当‘alpha=0’时,报告的最大 lambda 并不完全给出报告的零系数(原则上‘lambda=inf’会)。相反,使用了“alpha=0.001”的最大“lambda”,“lambda”值的序列由此得出。

    基本上,在岭回归的情况下,它从alpha = 0.001 派生lambda.max(即导致所有系数消失的lambda 的值),这将比lambda.max 大1000 倍alpha = 1(LASSO 案例)。

    我不确定您所说的“修复它”是什么意思,因为有意义的 lambda 值的范围会根据您的 alpha 值而变化。

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 2018-12-16
      • 2016-06-28
      • 2018-07-19
      • 2016-11-18
      • 2020-11-04
      • 2019-09-19
      • 2018-12-03
      • 2019-10-11
      相关资源
      最近更新 更多