You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tidymodels+XGBoost工作流step_dummy后预测列缺失报错求助

使用tidymodels + XGBoost时step_dummy导致预测报错的解决方法

问题描述

执行预测操作时触发如下报错:

Error in `validate_column_names()`:
! The following required columns are missing: 'A', 'B', 'C', 'D'.

核心原因是:你手动提前对测试集执行了bake()预处理,但tidymodels工作流本身已集成了配方逻辑,预测时会自动调用训练阶段拟合好的配方处理新数据。此时传入预处理后的测试集,会缺失工作流期望的原始分类列A、B、C、D。

解决方法

无需手动对测试集做bake()处理,直接将原始测试集传入predict()函数即可。工作流会自动应用训练阶段的配方(包括step_dummy生成哑变量、step_zv移除零方差特征、step_normalize标准化等操作),生成模型所需的特征。

修改后的完整代码

library(tidymodels)
library(xgboost)
library(dplyr)

set.seed(123)
datensatz <- tibble(
  outcome = rnorm(100, mean = 60, sd = 10),
  A = factor(sample(c("h", "i", "j"), 100, replace = TRUE)),
  B = factor(sample(c("e", "f", "g"), 100, replace = TRUE)),
  C = factor(sample(1:3, 100, replace = TRUE)),
  D = factor(sample(c("a", "b"), 100, replace = TRUE))
)

# 数据拆分
data_split <- initial_split(datensatz, prop = 0.75)
train_data <- training(data_split)
test_data <- testing(data_split)

# 配方定义
recipe_obj <- recipe(outcome ~ ., data = train_data) %>%
  step_dummy(all_nominal(), -all_outcomes()) %>%
  step_zv(all_predictors()) %>%
  step_normalize(all_numeric_predictors())  

# XGBoost模型规格
xgboost_spec <- boost_tree(
  trees = 1000,                    
  tree_depth = 6,                  
  min_n = 10,                      
  loss_reduction = 0.01,           
  sample_size = 0.8,               
  mtry = 0.8,                      
  learn_rate = 0.01                
) %>%
  set_mode("regression") %>%
  set_engine("xgboost", count = FALSE, colsample_bytree = 0.8)

# 工作流构建
workflow_obj <- workflow() %>%
  add_recipe(recipe_obj) %>%
  add_model(xgboost_spec)

# 模型训练
xgboost_fit <- fit(workflow_obj, data = train_data)

# 直接传入原始测试集,工作流自动处理预处理
predictions <- predict(xgboost_fit, new_data = test_data)

# 查看预测结果
predictions

关键提示

  • tidymodels的工作流核心是封装全流程,从数据预处理到模型训练、预测的逻辑都被整合在一起,拆分步骤手动处理数据会破坏流程一致性,引发类似的列缺失问题。
  • 如果需要验证预处理后的数据集,可以使用bake(prep(recipe_obj), new_data = test_data)查看,但不要将该预处理结果传入predict函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:21:03