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

使用tidymodels构建XGBoost的Recipe时报unused argument (values)错误

问题根因定位

错误完全来自step_dummy()的参数写法错误:

  • all_nominal()是tidyselect的类型选择器,本身不支持传入列名作为参数,你直接在括号内写values相当于传递了不存在的入参,因此直接抛出unused argument (values)报错。
  • 额外逻辑问题:你的数据集仅包含values(数值型因变量)和dates(日期格式列)两列,没有名义型分类变量,完全不需要调用step_dummy()做独热编码。如果是想把日期转为模型可接受的特征,应该使用时间序列专用的特征衍生步骤。
修复方案

根据你的实际需求二选一即可:

场景1:仅保留基础配方结构,不需要额外特征处理

直接删除错误的step_dummy()行:

basic_rec <- recipe(values ~ ., data = data_train) 
basic_rec %>% prep()

运行后无报错,配方会直接保留日期列作为输入。

场景2:需要衍生时间特征适配XGBoost训练

XGBoost无法直接处理日期格式,需要先拆分出年、月、季度等时间特征,正确写法如下:

basic_rec <- recipe(values ~ ., data = data_train)  %>%
  # 从日期列衍生全量时间特征
  step_timeseries_signature(dates) %>%
  # 清理时间序列场景下无用的冗余特征(可选)
  step_rm(matches("(iso)|(xts)|(hour)|(minute)|(second)|(am.pm)")) %>%
  # 可选:对衍生出的名义型预测特征做独热编码,XGBoost也支持直接输入整数型分类特征,可按需省略该步
  step_dummy(all_nominal_predictors())

basic_rec %>% prep() %>% juice()

运行后输出的特征可直接用于后续XGBoost调优训练。

调优注意事项
  • 拉丁超立方采样搜索超参数时,建议先收敛参数取值范围,避免出现极限值导致训练异常中断。
  • 时间序列交叉验证的切片数量建议根据数据长度调整,避免训练集样本量不足导致模型拟合失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:05