分类器模型:是否可以将 -1 的标签分配给 class?
Classifier model: is it possible to assign a label of -1 to a class?
我正在尝试训练光梯度增强机 class化算法 (LGBMClassifier)。我的数据中有三个 class,我给它们分配了 -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
将其转换为概率最高的 class ,您将classes 的范围从 0 到 n(即你必须注意将其转换回原来的 classes,在我的例子中是 [-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)
根据docs,您可以在初始化分类器时指定额外的kwarg
参数classes
。具体来说,classes
属于
Type: array of shape = [n_classes]
因此,我们可以尝试
clf = lightgbm.LGBMClassifier(..., classes=[-1, 0, 1])
我正在尝试训练光梯度增强机 class化算法 (LGBMClassifier)。我的数据中有三个 class,我给它们分配了 -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
将其转换为概率最高的 class ,您将classes 的范围从 0 到 n(即你必须注意将其转换回原来的 classes,在我的例子中是 [-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)
根据docs,您可以在初始化分类器时指定额外的kwarg
参数classes
。具体来说,classes
属于
Type: array of shape = [n_classes]
因此,我们可以尝试
clf = lightgbm.LGBMClassifier(..., classes=[-1, 0, 1])