代码之家  ›  专栏  ›  技术社区  ›  MasterOfTheHouse

AWS SageMaker XGBoost多分类算法和num_class超参数错误

  •  0
  • MasterOfTheHouse  · 技术社区  · 3 年前

    我有一个.csv文件,其中包含一个我想与XGBoost和SageMaker一起使用的数据集。这个 data.csv文件的结构有7列。L1、L2、L3、L4、L5、L6,类型。“类型”列有5种类型的字符串,我将使用它们来对推断进行分类。 以下是我的数据转换及其结果:

    from sklearn.preprocessing import LabelEncoder
    le = LabelEncoder()
    data_r['Type'] = le.fit_transform(data_r['Type'])
    data_r['Type']
    0      4
    1      4
    2      4
    3      4
    ....
    300    0
    301    0
    ...
    1983   3
    ....
    2300   2
    2600   1
    

    正如您所看到的,分类特征是用值0,1,2,3,4编码的 我现在把它移到第一列:

    data_r = data_r[['Type', 'L1', 'L2', 'L3', 'L4', 'L5', 'L6' ]] 
    data_r.head()
        Type,    L1,     L2,    L3,   L4,   L5,    L6   
    0      4      1      45     32    19    -3     8
    1      4     34      95     -45    9     2     45
    2      4      0       5     -3    27    -2     1     
    3      4     10      15     -13    7     0     38 
    4      4.     78      1      0     43    45    57
    

    然后,我将数据划分为训练、验证和测试,并将其上传到S3。 我还有一个有效的会话和xgb估计器。然后我创建超参数,如下所示:

    xgb.set_hyperparameters(
                            max_depth=5,
                            eta=0.2,
                            gamma=4,
                            min_child_weight=6,
                            subsample=0.8,
                            objective='multi:softmax',
                            num_class=4,
                            early_stopping_rounds=10,
                            num_round=100
    )
    

    但我得到了一个错误:

    SoftMaxMultiClassObj: label must be in [0, num_class).
    

    此代码或数据转换有什么问题?

    0 回复  |  直到 3 年前
        1
  •  1
  •   desertnaut SKZI    3 年前

    中的上限 [0, num_class) 被排除,所以你的超参数应该是 num_class=5 ,所以标签 [0,5) -> 0,1,2,3,4