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
相关产品推荐
相关产品推荐

