使用CatBoost进行多目标回归时出现维度错误问题求助
CatBoost多目标回归报错解决:Attempt to use multi-dimensional target as one-dimensional
问题场景
使用CatBoost进行多目标回归时,执行model.fit()触发如下错误:
Attempt to use multi-dimensional target as one-dimensional
原实现代码:
target_col = ['SISU_LP', 'SISU_AM', 'SISU_EP', 'SISU_HR', 'SISU_HS', 'SISU_HO'] text_cols=['surrender','feelings'] X = data.drop(columns=target_col) y = data[target_col] params = {'learning_rate': 0.1, 'depth': 6, 'loss_function': 'MultiRMSE', 'eval_metric': 'MultiRMSE'} model = CatBoostRegressor(**params) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1) pool_train = Pool(data=X_train, label=y_train,text_features = text_cols) pool_test = Pool(data=X_test, label=y_test, text_features = text_cols) model.fit(pool_train, eval_set=pool_test, use_best_model=True)
报错原因
CatBoost的Pool对象在处理多目标变量时,若传入的label是pandas DataFrame格式,部分版本会无法正确识别其多维结构,误判为一维目标。
解决方法
1. 将目标变量转为numpy数组
创建Pool时,把y_train和y_test转换为numpy数组格式,替换原label参数:
pool_train = Pool(data=X_train, label=y_train.to_numpy(), text_features=text_cols) pool_test = Pool(data=X_test, label=y_test.to_numpy(), text_features=text_cols)
2. 升级CatBoost版本
若上述方法无效,可能是旧版本对多目标DataFrame支持不足,执行升级命令:
pip install --upgrade catboost
修改后完整代码
target_col = ['SISU_LP', 'SISU_AM', 'SISU_EP', 'SISU_HR', 'SISU_HS', 'SISU_HO'] text_cols=['surrender','feelings'] X = data.drop(columns=target_col) y = data[target_col] params = {'learning_rate': 0.1, 'depth': 6, 'loss_function': 'MultiRMSE', 'eval_metric': 'MultiRMSE'} model = CatBoostRegressor(**params) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1) # 转换目标为numpy数组 pool_train = Pool(data=X_train, label=y_train.to_numpy(), text_features = text_cols) pool_test = Pool(data=X_test, label=y_test.to_numpy(), text_features = text_cols) model.fit(pool_train, eval_set=pool_test, use_best_model=True)
内容的提问来源于stack exchange,提问作者user3719749
相关产品推荐
相关产品推荐

