使用tidymodels构建Lasso回归模型预测时遇price列缺失错误
tidymodels预测时提示目标列缺失的原因与解决方法
使用tidymodels构建Lasso回归工作流,模型拟合正常,但对测试集调用predict()时出现错误:new_data中缺少所需列price,但price列同时存在于训练集和测试集中。
问题原因
错误根源在你的recipe定义里:
step_normalize(all_numeric())
all_numeric()会选中所有数值型列,包括目标变量price。训练阶段这个操作能正常执行,但调用predict()时,workflow会自动从new_data中移除目标列(预测过程不需要目标变量),而step_normalize处理测试集时仍期望找到price列完成归一化,因此触发缺失列错误。
解决方法
将step_normalize的作用范围从all_numeric()改为all_predictors(),这样仅对预测变量(除price外的数值列)执行归一化:
修改后的recipe代码:
lasso_prep_recipe <- recipe(price ~ ., data = train) %>% step_zv(all_predictors()) %>% step_normalize(all_predictors()) # 替换all_numeric()为all_predictors()
重新拟合工作流后,调用predict(lasso_fit, new_data = test)即可正常生成预测结果。
内容的提问来源于stack exchange,提问作者Matt Pickard
相关产品推荐
相关产品推荐

