You need to enable JavaScript to run this app. 为什么R语言glmnet的predict函数返回矩阵而非单列预测结果?
优惠活动
大模型
产品
解决方案
定价
更多

为什么R语言glmnet的predict函数返回矩阵而非单列预测结果?

问题解答

返回多列预测结果的原因

glmnet包默认设计为自动生成100个不同的正则化惩罚系数lambda取值,拟合整个正则化路径上的所有模型。你调用predict()时没有指定要使用的lambda参数,函数会默认返回全部100个lambda对应的预测结果,因此输出为294行(测试集样本量)100列的矩阵,你的代码逻辑本身没有本质错误,只是缺少指定预测所用lambda的步骤。

修正方案

推荐通过交叉验证自动选择最优lambda再做预测,修正后的核心代码如下:

# 拟合模型部分替换为交叉验证版本
X <- model.matrix(Attrition~ ., train)
# 5折交叉验证拟合岭正则化逻辑回归,alpha=0代表岭回归
cv_ridge <- cv.glmnet(X, train$Attrition, family = 'binomial', alpha = 0, nfolds = 5)

# 预测时指定s参数为交叉验证得到的最优lambda(交叉验证误差最小的取值)
prob_ridge <- predict(cv_ridge, newx = model.matrix(Attrition~ ., test), type = 'response', s = "lambda.min")

运行后得到的prob_ridge就是你期望的294×1单列预测结果。
如果你已经手动确定了要使用的lambda取值,也可以直接在predict的s参数中传入对应的数值即可。

内容的提问来源于stack exchange,提问作者ycenycute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 02:36:02