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

使用tidymodels搭建CatBoost分类模型时出现标签类型错误如何解决

报错原因

CatBoost的R引擎不直接接收因子型分类标签,要求分类任务的标签必须为integer或double数值类型,你当前的二分类标签为因子格式,传入后触发类型不匹配报错。

排查步骤

  • 运行代码确认标签类型:class(cb_train$covid_vaccination),返回结果为factor即可确认是类型不匹配问题。
  • 确认预处理流程未修改标签属性:你当前的recipe仅处理预测变量,未对标签列做类型转换,因此标签保持原始因子格式传入模型。

解决方法

二选一即可,推荐第二种方案不修改原始数据集,符合tidymodels工作流规范:

  1. 提前转换原始训练集标签:
cb_train <- cb_train %>% 
  mutate(covid_vaccination = as.integer(covid_vaccination) - 1)

减1操作是因为R中因子转整数默认从1开始,CatBoost的Logloss损失函数要求二分类标签取值为0/1。

  1. 在预处理recipe中新增标签转换步骤:
cb_rec <- recipe(covid_vaccination ~ ., data = cb_train) %>% 
  step_mutate(covid_vaccination = as.integer(covid_vaccination) - 1) %>%
  step_unknown(all_nominal_predictors()) %>%
  step_impute_median(all_numeric_predictors()) %>% 
  step_nzv(all_predictors())

注意事项

  • 你注释掉的step_dummy不需要打开,CatBoost原生支持类别特征输入,独热编码反而会降低模型效果。
  • 后续若需要输出分类报告、混淆矩阵等结果,可将预测的0/1结果转回对应因子水平,和原始标签格式对齐即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:45:04