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

R语言CatBoost处理不平衡样本时设置样本权重报错求助

问题解决:CatBoost R版设置样本权重报错

错误原因

你调用catboost.train时的参数传递方式错误:catboost.train不接受单独的data、label、weight参数,这些信息需要提前封装到catboost.Pool对象中,再将该对象传入catboost.train的train_pool参数。

另外你创建Pool时只传入了前两个数值特征,遗漏了类别特征x_categorical_1,这会导致模型无法利用该特征,同时设置的分组权重逻辑也失去对应依据。

修正后的代码

library(catboost)

# X data (predictors)
x_train <- data.frame(
  x_numeric_1 = c(1,2,3,4,5,6,7),
  x_numeric_2 = c(1,3,5,1,3,5,1),
  x_categorical_1 = c("a","a","a","a","b","b","b")
)

# w data (observation weights)
w_train <- c(0.6,0.6,0.6,0.6,0.4,0.4,0.4)

# y data (target)
y_train <- c(1,3,1,4,1,5,1)

# 创建包含特征、标签、权重的Pool对象,同时指定类别特征
x_train_learn_pool <- catboost.load_pool(
  data = x_train,
  label = y_train,
  weight = w_train,
  cat_features = "x_categorical_1"  # 也可以用列索引3,对应第三列
)

# 训练模型,传入封装好的Pool对象
model.f <- catboost.train(
  train_pool = x_train_learn_pool
)

# 执行预测
test_predictions <- catboost.predict(model.f, x_train_learn_pool)
test_predictions

关键说明

  • Pool对象封装:CatBoost在R中要求将训练数据的特征、标签、权重、类别特征等信息统一封装到catboost.Pool中,这是模型训练的标准输入格式。
  • 类别特征指定:必须通过cat_features参数明确告诉CatBoost哪些是类别特征,否则模型会将其当作数值特征处理,影响最终效果。
  • 参数对应逻辑:catboost.train的核心输入是train_pool,而非分散的data/label/weight参数,这是触发报错的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:34