glmnet中设置LASSO预测变量数:dfmax参数失效问题求助
关于glmnet中dfmax参数的困惑与变量数量控制问题
我希望手动将LASSO模型的预测变量数量设置为5(包含截距项则计入总数),用来对比LASSO和其他模型的变量选择结果。但在含约100个潜在预测变量的真实数据中,设置dfmax=4后,求解得到的非零系数数量却是7而非4。难道只能通过迭代调整lambda这种笨拙的方法解决吗?
示例代码
library(glmnet) set.seed(42) n.obs <- 100 n.predictors <- 10 y <- rnorm(n.obs) x <- matrix(rnorm(n.obs * n.predictors), ncol = n.predictors) # 给数据添加模式,让预测变量具有不同的影响力 for (i in 1:n.predictors) {x[ , i] <- x[ , i] + y * i} m.lambda <- cv.glmnet(x = x, y = y, alpha = 1)$lambda.min m.lasso <- glmnet(x = x, y = y, alpha = 1, lambda = m.lambda, dfmax = 2) coef(m.lasso) # 所有预测变量都被保留了
关于dfmax参数的疑问
glmnet帮助文档说明dfmax用于“限制模型中的最大变量数,适用于变量数极多的情况,若需要partial path时使用”。问题可能出在我不理解这里的partial path含义,搜索也没得到有效信息(比如图论中的partial path指无需遍历所有节点的路径)。
这个问题和Stack Overflow上的相关问题相同,但该问题尚无解答。CrossValidated上的相关问题已被关闭,评论和答案相互矛盾,暗示dfmax可能是限制特定变量集而非数量。
后续进展
我最终编写了迭代代码来寻找m.lambda的乘数,以此得到所需的预测变量数量。用简单的二分法更新乘数的上下限,在我的六个模型中都能快速收敛。保留这个问题,希望有人能分享dfmax的正确用法,或是作为自制workaround可行的提醒。
内容的提问来源于stack exchange,提问作者InColorado
相关产品推荐
相关产品推荐

