cv.glmnet - 选择 lambda 以包含特定数量的变量

机器算法验证 套索 网络
2022-04-07 13:43:46

我正在运行 LASSO 回归选择模型,使用cv.glmnet(). 预测的是一种疾病的发病率,我有 63 个 coviarates 包括在内。

在这 63 个协变量中,我通过将惩罚因子设置为 0 来强制将三个变量包含在模型中。结果看起来不错,并且始终包含三个惩罚变量以及其余 60 个协变量中的一些。一位同事现在建议我像以前一样运行模型,但也选择 lambda.min 以便解决方案始终包含 5 个额外的协变量(加上三个受惩罚的协变量)。

我怎么做?他建议告诉模型选择类似的东西

min(lambda[which(n.var==x)])

但我不知道如何将其构建到模型中。

这是我所拥有的:

cvfit = cv.glmnet(x, y, family="cox", penalty.factor=pen)

coef.min = coef(cvfit, s = "lambda.min",penalty.factor=pen)

我假设为了让模型包含我的惩罚协变量加上剩余 60 个中的 5 个,我必须在cv.glmnet()? 有人可以帮忙吗?

1个回答

我不认为你的同事有什么特别的想法——像往常一样拟合一个glmnet值下你有多少非零特征当您有 5 个(或许多)非零特征时,这就是要选择λλ

glmnet甚至会自动为您跟踪。如果lassoFit是您的cv.glmnet对象,则lassoFit$nzero计算序列中每个 lambda 值的非零条目数。它们按 lambda 序列的顺序出现。