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

为何我的XGB多分类任务出现multioutput不支持错误?

问题根源

错误的核心原因是:XGBoost的multi:softmax目标函数不支持独热编码格式的标签。它需要的是一维的类别索引数组(比如每个样本对应0到8的整数,对应9个类别),而你传入的y_train是9列的独热编码数组,XGBoost会将其误判为多输出任务,因此抛出"multioutput is not supported"错误。

解决步骤
  1. 转换标签格式
    用numpy的argmax方法,把独热编码的标签转换成一维的类别索引:

    import numpy as np
    y_train = np.argmax(y_train, axis=1)
    

    转换后y_train会变成50000×1的一维数组,每个元素是0-8之间的整数,对应9个类别的索引。

  2. 重新训练模型
    修改后的完整代码如下:

    import xgboost as xgb
    import numpy as np
    
    # 转换独热编码标签为类别索引
    y_train = np.argmax(y_train, axis=1)
    
    params = {
        'objective': 'multi:softmax',
        'num_class': 9,
        'max_depth': 5,
        'learning_rate': 0.1,
        'subsample': 0.8,
        'colsample_bytree': 0.8,
        'seed': 42
    }
    
    dtrain = xgb.DMatrix(X_train, label=y_train)
    
    num_rounds = 100
    xgb_model = xgb.train(params, dtrain, num_rounds)
    
额外提示
  • 如果需要输出每个样本对应所有类别的概率,可以将objective参数改为multi:softprob,此时模型输出结果形状为n_samples×9,对应每个类别的概率值。
  • 独热编码标签多用于神经网络类模型,XGBoost、LightGBM等树模型普遍要求传入类别索引格式的标签,这是这类模型的通用规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:12:13