我正在尝试训练光梯度增强机分类算法(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)
答案 0 :(得分:1)
根据docs,您可以在初始化分类器时指定其他kwarg
自变量classes
。具体来说,classes
是
类型:形状数组= [n_classes]
因此,我们可以尝试
clf = lightgbm.LGBMClassifier(..., classes=[-1, 0, 1])