问题描述
在多分类的时候,用sklearn的classification_report会发现有的会打印出micro avg,有的则是accuracy。-
例子展示
- 例子1
y_pred = [1, 1, 2]
y_true = [1, 1, 1]
print(classification_report(y_true, y_pred, labels=[1, 2]))
precision recall f1-score support
1 1.00 0.67 0.80 3
2 0.00 0.00 0.00 0
accuracy 0.67 3
macro avg 0.50 0.33 0.40 3
weighted avg 1.00 0.67 0.80 3
- 例子2
y_pred = [1, 1, 2]
y_true = [1, 1, 1]
print(classification_report(y_true, y_pred, labels=[1, 2, 3]))
precision recall f1-score support
1 1.00 0.67 0.80 3
2 0.00 0.00 0.00 0
3 0.00 0.00 0.00 0
micro avg 0.67 0.67 0.67 3
macro avg 0.33 0.22 0.27 3
weighted avg 1.00 0.67 0.80 3
- 例子3
y_pred = [1, 1, 2]
y_true = [1, 1, 1]
print(classification_report(y_true, y_pred, labels=[1, 0]))
precision recall f1-score support
1 1.00 0.67 0.80 3
0 0.00 0.00 0.00 0
micro avg 1.00 0.67 0.80 3
macro avg 0.50 0.33 0.40 3
weighted avg 1.00 0.67 0.80 3
- 解决方法和分析
例子1:labels里面的值和y_pred的值一样,打印出accuracy
例子2:labels里面有的值没有在y_pred出现
例子3:y_pred的值没有在labels里面出现
labels里面的值是我们最后想要打印出precision和recall的类别名字。如果labels和y_pred的取值范围一样,就会打印accuracy,如果不一样,就会打印micro avg。