micro-F1和macro-F1详解

 

摘要

F1-score:是统计学中用来衡量二分类模型精确度的一种指标,用于测量不均衡数据的精度。它同时兼顾了分类模型的精确率和召回率。F1-score可以看作是模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0。

在多分类问题中,如果要计算模型的F1-score,则有两种计算方式,分别为micro-F1和macro-F1,这两种计算方式在二分类中与F1-score的计算方式一样,所以在二分类问题中,计算micro-F1=macro-F1=F1-score,micro-F1和macro-F1都是多分类F1-score的两种计算方式;

假设有如下的三分类结果:
在这里插入图片描述
根据上述结果我们可以得到一下结果(多分类中每一类都有Precision、Recall和F1-score):
类别1:〖Precision〗_1=a/(a+d+g) ,〖Recall〗_1=a/(a+b+c)类别2:〖Precision〗_2=e/(b+e+h) ,〖Recall〗_2=e/(d+e+f)类别3:〖Precision〗_3=i/(c+f+i) ,〖Recall〗_3=i/(g+h+i)二分类F1-score的计算公式为:F_1=2/(1/Recall  + 1/Precision)=2 (Recall×Precision)/(Recall+Precision)
两种多分类F1-score的计算方法:

micro-F1:

取值范围:(0, 1);
适用环境:多分类不平衡,若数据极度不平衡会影响结果;
计算方式:
计算总的〖Recall〗_mi=(TP_1+TP_2+TP_3)/(TP_1+TP_2+TP_3+FN_1+FN_2+FN_3 );计算总的〖Precision〗_mi=(TP_1+TP_2+TP_3)/(TP_1+TP_2+TP_3+FP_1+FP_2+FP_3 )计算micro F1score=2 (〖Recall〗_mi  × 〖Precision〗_mi)/(〖Recall〗_mi  + 〖Precision〗_mi )
TPi 是指第 i 类的 True Positive 正类判定为正类;
FPi 是指第 i 类的 False Positive 负类判定为正类;
TNi 是指第 i 类的 True Negative 正类判定为负类;
FNi 是指第 i 类的 False Negative 负类判定为负类。

假设现在有一下的三分类结果:
Confusion Matrix Real1 2 3Predict 1 a d g2 b e h3 c f i
由此表我们可以得出:
对第1类:FP1=d+g;TP1=a;FN1=b+c;TN1=e+f+h+i;
对第2类:FP2=b+h;TP2=e;FN2=d+f; TN2=a+c+g+i;
对第3类:FP3=c+f; TP3=i; FN3=g+h;TN3=a+b+d+e;

对micro-F1来说,mirco的计算方式使将recall和precision合起来算,所以:

对于micro-Recall:召回率为(TP1+TP2+TP3)/(TP1+TP2+TP3+FN1+FN2+FN3 ),即三个类别的TP和FN相加为分母,TP为分子。由上式分析可知,TP1+TP2+TP3 =a+e+i;FN1+FN2+FN3 =b+c+d+f+g+h(即除了TP之外的所有格),所以得到〖Recall〗_mi=(a+e+i)/(a+e+i+b+c+d+f+g+h)
对于micro-Precision:精确度为(TP1+TP2+TP3)/(TP1+TP2+TP3+FP1+FP2+FP3 ),同理可得,TP1+TP2+TP3 =a+e+i;FP1+FP2+FP3 =d+g+b+h+c+f(即除了TP之外的所有格),得到
在这里插入图片描述
然后,根据micro F1-score的计算方式可得:
在这里插入图片描述
而且,对于模型准确性Accuracy,定义为正确分类的样本在所有样本中的比例。所以准确性的公式
Acc=(a+e+i)/(a+b+c+d+e+f+g+h+i)
即:
在这里插入图片描述
据此我们可以得出结论:若micro-F1=0.5,则模型准确率Acc=0.5,Precision和Recall均为0.5,但是我们不能得出模型基本是靠猜的结论,因为若是三分类结果如下:
在这里插入图片描述Acc=(a+e+i)/(a+b+c+d+e+f+g+h+i)=micro-F1=Precision_mi=Recall_mi=0.5

macro-F1:

取值范围:(0, 1);
适用环境:多分类问题,不受数据不平衡影响,容易受到识别性高(高recall、高precision)的类别影响;
计算方法
计算每个类别的〖F1-score〗_i=2 (〖Recall〗_i×〖Precision〗_i)/(〖Recall〗_i+〖Precision〗_i );计算macro F1score=(〖F1-score〗_1+ 〖F1-score〗_2+〖F1-score〗_3)/3

macro-F1有两种计算方式

1、先求macro-Recall和macro-Pecision,之后由这两个和求macro-F1;
2、对三个类别的F1-score直接求平均。

在sklearn的包中,使用的是第二种方式,两种方式的使用争议一直存在,但在“Training algorithms for linear text classifiers( Lewis, David D., et al. “Training algorithms for linear text classifiers.” SIGIR. Vol. 96. 1996.)”中,作者指出,macro-F1是所有类中F1-score的平均值,即第二种方式才是macro-F1的计算方式。

我们对两种求平均的方法也可以分析,第一种方式对错误的分布不太敏感“详见论文(Opitz, Juri, and Sebastian Burst. “Macro F1 and Macro F1.” arXiv preprint arXiv:1911.03347 (2019))”,这一点有点像micro-F1;而第二种方法则被上述论文作者推荐。

同样,我们对每一类的指标都进行分析:
对第1类:FP1=d+g;TP1=a;FN1=b+c;TN1=e+f+h+i;
对第2类:FP2=b+h;TP2=e;FN2=d+f; TN2=a+c+g+i;
对第3类:FP3=c+f; TP3=i; FN3=g+h;TN3=a+b+d+e;
对第1类:〖Recall〗_1=〖TP〗_1/(〖TP〗_1+〖FN〗_1 );〖Precision〗_1=〖TP〗_1/(〖TP〗_1+〖FP〗_1 );〖F1-score〗_1=(2〖TP〗_1)/(〖2TP〗_1+〖FP〗_1+〖FN〗_1 )对第2类:〖Recall〗_2=〖TP〗_2/(〖TP〗_2+〖FN〗_2 );〖Precision〗_2=〖TP〗_2/(〖TP〗_2+〖FP〗_2 );〖F1-score〗_1=(2〖TP〗_1)/(〖2TP〗_1+〖FP〗_1+〖FN〗_1 )对第3类:〖Recall〗_3=〖TP〗_3/(〖TP〗_3+〖FN〗_3 );〖Precision〗_3=〖TP〗_3/(〖TP〗_3+〖FP〗_3 );〖F1-score〗_1=(2〖TP〗_1)/(〖2TP〗_1+〖FP〗_1+〖FN〗_1 )
将上述的值带入macro-F1中,得到:
macro-F1=(〖F1-score〗_1+ 〖F1-score〗_2+〖F1-score〗_3)/3=((2〖TP〗_1)/(〖2TP〗_1+〖FP〗_1+〖FN〗_1 )+ (2〖TP〗_2)/(〖2TP〗_2+〖FP〗_2+〖FN〗_2 )+(2〖TP〗_3)/(〖2TP〗_3+〖FP〗_3+〖FN〗_3 ))/3=(2a/(2a+b+c+d+g)+ 2e/(2e+b+d+f+h)+2i/(2i+c+f+g+h))/3
上式即为macro-F1的公式(算到这里我就没有继续化简了感觉没东西)

若使该值=0.5,也得不到有用的结论。

weighted-F1

除了micro-F1和macro-F1,还有weighted-F1,是一个将F1-score乘以该类的比例之后相加的结果,也可以看做是macro-F1的变体吧。例如:
在这里插入图片描述
对上述表格,我们可得出precision、recall和F1-score:
在这里插入图片描述
所以,对weighted-F1:
weighted-F1=(6×42.1%+10×30.8%+9×66.7%)/(4+6+3+1+2+0+1+2+6)=46.4%

同样,我们也可以算weighted-Precision和weighted-Recall:
在这里插入图片描述
其实从上面我们也可以看出来,weighted-F1并不等于由weighted-Precision和weighted-Recall计算得出的Weighted-F1(这里为了分别用大写表示),同理,参考macro的两种计算方式。一般以第一种为结果。

weighted-F1和macro-F1的区别在于:macro-F1对每一类都赋予了相同的权重,而weighted-F1则根据每一类的比例分别赋予不同的权重。

调参

关于scoring的使用:

进行网格调参时,构建GridSearchCV,一般二分类的评分标准为roc_auc,而多分类并不提供roc曲线面积的评分方式,所以在多分类时,我们可以用

grid_search = GridSearchCV(lg, n_jobs=-1, scoring='f1_weighted', param_grid=param_dist, cv=10, verbose=5)
  • 1

等评分方式来进行调参,不同的评分方式对结果都会有影响。
还有更多的评分方式可以运行这两行代码获得:

import sklearn.metrics as sm
print(sorted(sm.SCORERS.keys()))

 

 

补充

'micro':Calculate metrics globally by counting the total true positives, false negatives and false positives.

'micro':通过先计算总体的TP,FN和FP的数量,再计算F1

'macro':Calculate metrics for each label, and find their unweighted mean. This does not take label imbalance into account.

'macro':分布计算每个类别的F1,然后做平均(各类别F1的权重相同)

 

“微”(micro)平均:计算所有类别中假正例、假反例和真正例的总数,然后利用这些计数来计算准确率、召回率和f1 分数。

“宏”(macro)平均:计算未加权的按类别f1 分数。它对所有类别给出相同的权重,无论类别中的样本量大小。

如果对每个样本等同看待,那么推荐使用“微”平均f1 分数;如果对每个类别等同看待,那么推荐使用“宏”平均f1 分数

 

F-beta score

当beta大于1,更多关注recall;当beta小于1,更多关注precision

除了F1分数之外,F0.5分数和F2分数,在统计学中也得到了大量应用,其中,F2分数中,召回率的权重高于精确率,而F0.5分数中,精确率的权重高于召回率

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐