分类器模型:是否可以将-1的标签分配给一个类?

时间:2020-04-29 12:39:14

标签: python classification lightgbm

我正在尝试训练光梯度增强机分类算法(LGBMClassifier)。我的数据中有三个类,我给它们分配了-1、0和1。这些标签具有特定的含义,因此我不想将它们更改为其他标签(例如0、1和2)。

当我尝试训练模型时,出现以下错误消息:

Label must be in [0, 3), but found -1 in label

如果我有三个标签,必须将它们分别指定为0,1和2?

更新#1

感谢JST99,这是正确的方法。我定义如下,它可以正常工作。请注意,运行预测时,输出是长度为n_classes的概率向量,如果使用np.argmax将其转换为概率最高的类,则将具有从0到n的类(即,必须请注意将其转换回您的原始类,在我的情况下为[-1,0,1]。

hyperparameter_dictionary = {'task': 'train',
                            'boosting_type': 'gbdt',
                            'objective': 'multiclass',
                            'metric': 'multi_logloss',
                            'num_leaves': 100,
                            'learning_rate': 0.05,
                            'feature_fraction': 0.9,
                            'bagging_fraction': 0.9,
                            'bagging_freq': 0,
                            'verbose': -1,
                            'num_class': 3,
                            'classes': [-1, 0, 1]
                            }
model = lgb.LGBMClassifier(**hyperparameter_dictionary)
model.fit(X,y)

1 个答案:

答案 0 :(得分:1)

根据docs,您可以在初始化分类器时指定其他kwarg自变量classes。具体来说,classes

类型:形状数组= [n_classes]

因此,我们可以尝试

clf = lightgbm.LGBMClassifier(..., classes=[-1, 0, 1])