tidymodels下调优CatBoost模型出现标签类型不支持报错如何解决
报错解决方案
这个报错的核心原因是CatBoost的R接口要求分类任务的标签输入为数值型(0/1的整数或浮点数),parsnip对CatBoost的封装不会自动将因子类型的响应变量转换为符合要求的数值类型。你可以按照以下步骤修复:
- 第一步:在数据预处理recipe中新增响应变量转数值的步骤,注意二分类场景要转为0、1取值:
cb_rec <- recipe(covid_vaccination ~ ., data = cb_train) %>% # 将因子型响应变量转换为0/1数值 step_mutate(covid_vaccination = as.integer(covid_vaccination) - 1) %>% step_unknown(all_nominal_predictors()) %>% step_impute_median(all_numeric_predictors()) %>% step_nzv(all_predictors())
如果需要明确指定正类对应1,可以替换为显式判断逻辑,避免因子顺序问题:
step_mutate(covid_vaccination = ifelse(covid_vaccination == "你的正类标签名", 1, 0))
- 第二步:确认分类指标的事件级别匹配。如果后续评估时出现ROC/AUC计算异常,可以在
metric_set中指定event_level = "second"(对应1为正类),或者手动调整标签转换逻辑。 - 补充说明:你当前注释掉的
step_dummy不需要启用,CatBoost原生支持因子类型的分类特征,独热编码反而会损失特征信息、降低模型效果。
如果修改后仍有问题,可以先使用固定超参数的模型做测试拟合,排除参数设置问题:
# 测试用固定参数模型 test_spec <- boost_tree( mode = "classification", trees = 100, tree_depth = 3, min_n = 10, mtry = 0.8, learn_rate = 0.01 ) %>% set_engine("catboost", loss_function = "Logloss", task_type = "GPU") test_wf <- workflow() %>% add_model(test_spec) %>% add_recipe(cb_rec) # 直接拟合验证是否正常 test_fit <- fit(test_wf, data = cb_train)
内容的提问来源于stack exchange,提问作者tedescr
相关产品推荐
相关产品推荐

