我有以下分类报告的输出:
precision recall f1-score support
0 0.6772 0.5214 0.5892 491
1 0.8688 0.9273 0.8971 1678
avg / total 0.8254 0.8354 0.8274 2169
数据集中的真实标签为s
和p
。
问题:我如何知道哪个标签为“0”且哪个为“1”?或者:如何以正确的顺序通过labels=
或target_names=
分配标签?
答案 0 :(得分:2)
如果没有另外说明,它将按字母顺序排列。所以最有可能的是:
0 - > 'P'
1 - > 'S'
无论如何,如果您传递实际标签,它们应该按原样显示。例如:
y_true = ['p', 's', 'p', 's', 'p']
y_pred = ['p', 'p', 's', 's', 'p']
print(classification_report(y_true, y_pred))
Output:
precision recall f1-score support
p 0.67 0.67 0.67 3
s 0.50 0.50 0.50 2
avg / total 0.60 0.60 0.60 5
所以不需要做任何事情。但是,如果您更改了标签,则可以在target_names
参数中传递它们以显示在报告中。
假设您已将'p'转换为0并将's'转换为1,那么您的代码将变为:
y_true = [0, 1, 0, 1, 0]
y_pred = [0, 0, 1, 1, 0]
# Without the target_names
print(classification_report(y_true, y_pred))
0 0.67 0.67 0.67 3
1 0.50 0.50 0.50 2
avg / total 0.60 0.60 0.60 5
#With target_names
print(classification_report(y_true, y_pred, target_names=['p', 's']))
p 0.67 0.67 0.67 3
s 0.50 0.50 0.50 2
avg / total 0.60 0.60 0.60 5
答案 1 :(得分:1)
您可以使用分类器的classes_
属性来获取标签列表,并对它们进行数组索引。
classes_:shape = [n_classes]的数组或此类数组的列表
类标签(单输出问题)或数组列表 类标签(多输出问题)。
答案 2 :(得分:1)
如果您使用sklearn.preprocess.LabelEncoder编码原始标签,则可以使用inverse_transform
来获取原始标签
target_strings = label_encoder.inverse_transform(np.arange(num_classes))
metrics.classification_report(dev_gold, dev_predicted, target_names=target_strings)