山脊与套索中的glmnet中的lambda序列

时间:2016-07-23 06:10:03

标签: r glmnet

我在glmnet计算一个不合理的lambda序列时遇到了脊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序列恰好是套索的1000倍,产生了一个荒谬的偏差范围。预测矩阵的维数为891 x 1028

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

1 个答案:

答案 0 :(得分:0)

来自D:\Xx\Xx\Xx\Xx\Testdata\Task1.in.1帮助文件:

  

lambda:使用的'lambda'值的实际序列。当'alpha = 0'时,报告的最大lambda并不能完全给出报告的零系数(原则上'lambda = inf')。相反,使用'alpha = 0.001'的最大'lambda',并且'lambda'值的序列来源于此。

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

由于有意义的lambda值的范围会根据您alpha的值而变化,因此我不完全确定您的意思&#34;修复它&#34;。