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

CatBoost多输出回归报错:All train targets are equal 求助

CatBoost多输出回归报错「All train targets are equal」解决办法

问题场景

你的数据集尺寸:

x_train=(60,20)
y_train=(60,17657)
x_test=(15,20)
y_test=(15,17657)

训练代码:

cat_model=CatBoostRegressor(loss_function="MultiRMSE",n_estimators=5,max_depth=4,
eval_metric="MultiRMSE").fit(x_train,y_train,                                                                                         
eval_set=(x_test,y_test)
)

运行后触发错误:All train targets are equal

错误原因

这个错误说明y_train中存在至少一个输出维度的所有样本值完全相同,CatBoost无法对这种无波动的目标进行回归拟合——没有差异就没有可学习的信息。

解决步骤

  • 第一步:定位方差为0的输出维度
    用numpy计算每个输出维度的方差,找出所有值完全相同的列:
    import numpy as np
    variances = np.var(y_train, axis=0)
    zero_var_cols = np.where(variances == 0)[0]
    print(f"发现{len(zero_var_cols)}个方差为0的输出维度")
    print(f"部分维度索引示例:{zero_var_cols[:10]}")
    
  • 第二步:处理无效维度
    • 直接删除:如果这些维度本身就是无意义的常数输出,直接从训练集和测试集中移除:
      # 筛选出方差不为0的维度
      valid_cols = np.where(variances != 0)[0]
      y_train_clean = y_train[:, valid_cols]
      y_test_clean = y_test[:, valid_cols]
      
    • 检查数据源头:如果这些维度理论上应该有波动,那大概率是数据采集或预处理时出错了(比如批量填充了同一个值),需要回溯修正数据。
  • 第三步:重新训练模型
    用清理后的目标变量重新运行训练代码:
    cat_model=CatBoostRegressor(loss_function="MultiRMSE",n_estimators=5,max_depth=4,
    eval_metric="MultiRMSE").fit(x_train,y_train_clean,                                                                                         
    eval_set=(x_test,y_test_clean)
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:26:27