f1_score/precision_score/recall_score中micro和macro的区别

一.概念

  1. ‘micro’:通过先计算总体的TP,FN和FP的数量,再计算F1,Precision(tp / (tp + fp)) = Recall(tp / (tp + fn)) = F1_score(2 * (precision * recall) / (precision + recall)) = Accuracy(T / (T + F)计算micro时,四者相等(如果没有出现预测错误的情况,如下面的例子预测为0,否则tp=T,fp=fn=F)
  2. ‘macro’:分布计算每个类别的F1,然后做平均(各类别F1的权重相同)
  • 真正例(True Positive,TP):真实类别为正例,预测类别为正例。
  • 假正例(False Positive,FP):真实类别为负例,预测类别为正例。
  • 假负例(False Negative,FN):真实类别为正例,预测类别为负例。
  • 真负例(True Negative,TN):真实类别为负例,预测类别为负例。

二.例子

y_true = [1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4]
y_pred = [1, 1, 1, 0, 0, 2, 2, 3, 3, 3, 4, 3, 4, 3](0为出现的错误)

1类 2类 3类 4类 总数
TP 3 2 2 1 8
FP 0 0 3 1 4
FN 2 2 1 1 6
  • micro的精确度 P 为 TP/(TP+FP)=8/(8+4)=0.666,召回率 R 为 TP/(TP+FN)=8/(8+6)=0.571 ,所以F1-micro的值为:0.6153
  • macro先要计算每一个类的F1,有了上面那个表,计算各个类的F1就很容易了,比如1类,它的精确率P=3/(3+0)=1  召回率R=3/(3+2)=0.6  F1=2*(1*0.5)/1.5=0.75

三.Refs

2+