我在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
知道为什么会发生这种情况以及如何解决这个问题?我当然可以输入我自己的序列,但我想知道为什么它会发生,以防它只是一个更大问题的症状。
答案 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;。