#机器学习 Micro-F1和Macro-F1详解

micro-F1和macro-F1详解

    • 摘要
    • micro-F1:
    • macro-F1:
    • weighted-F1
    • 调参


  2022.04.06 修改了二分类F1的表述错误,增加了macro和micro的权重倾向


  2021.12.21 修改了图像,并将部分公式由图片转换为公式,修改了部分表述方式


摘要

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

  一般来说,对于二分类问题我们通常只计算正类的样本的F1-score,即将正类的F1当成整体F1,而不会去分别计算正类和负类。当然如果实验要求也可以分别计算两类的F1之后再使用micro或macro的方式得到整体的F1。我们多在多分类问题中才考虑计算不同类别的样本F1。

  这里先简要介绍一下二分类的F1计算方法:

  假设有如下的二分类结果:
#机器学习 Micro-F1和Macro-F1详解_第1张图片
  根据上述结果我们可以得到一下结果:
    P r e c i s i o n = a a + c                    R e c a l l = a a + b \ \ \ Precision= \frac{a}{a+c} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Recall= \frac{a}{a+b}    Precision=a+ca                  Recall=a+ba 二 分 类 F 1 − s c o r e : F 1 = 2 1 R e c a l l + 1 P r e c i s i o n = 2 R e c a l l × P r e c i s i o n R e c a l l + P r e c i s i o n 二分类F1-score:F1= \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}= 2\frac{Recall×Precision}{Recall+Precision} F1scoreF1=Recall1+Precision12=2Recall+PrecisionRecall×Precision


  在多分类问题中,如果要计算模型的F1-score,则有两种计算方式,分别为micro-F1macro-F1。下面分别介绍两种计算方式的不同。

micro-F1:

取值范围:(0, 1);
权重倾向:每一个样本的权重都相同;
适用环境:多分类不平衡,若数据极度不平衡会影响结果;
计算方式:
计 算 总 的 R e c a l l m = T P 1 + T P 2 + T P 3 T P 1 + T P 2 + T P 3 + F N 1 + F N 2 + F N 3 计算总的Recall_m= \frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FN_1+FN_2+FN_3} Recallm=TP1+TP2+TP3+FN1+FN2+FN3TP1+TP2+TP3 计 算 总 的 P r e c i s i o n m = T P 1 + T P 2 + T P 3 T P 1 + T P 2 + T P 3 + F P 1 + F P 2 + F P 3 计算总的Precision_m= \frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FP_1+FP_2+FP_3} Precisionm=TP1+TP2+TP3+FP1+FP2+FP3TP1+TP2+TP3 计 算 总 的 m i c r o − F 1 = 2 R e c a l l m × P r e c i s i o n m R e c a l l m + P r e c i s i o n m 计算总的micro-F1= 2\frac{Recall_m×Precision_m}{Recall_m+Precision_m} microF1=2Recallm+PrecisionmRecallm×Precisionm
  TPi 是指第 i 类的 True Positive   正类判定为正类;
  FPi 是指第 i 类的 False Positive  负类判定为正类;
  FNi 是指第 i 类的 FalseNegative  正类判定为负类;
  TNi 是指第 i 类的 True Negative  负类判定为负类。

  假设现在有一下的三分类结果:
#机器学习 Micro-F1和Macro-F1详解_第2张图片
  由此表我们可以得出:
对 第 1 类 : F P 1 = d + g ; T P 1 = a ; F N 1 = b + c ; T N 1 = e + f + h + i ; 对第1类:FP_1=d+g;TP_1=a;FN_1=b+c;TN_1=e+f+h+i; 1FP1=d+gTP1=aFN1=b+cTN1=e+f+h+i 对 第 2 类 : F P 2 = b + h ; T P 2 = e ; F N 2 = d + f ; T N 2 = a + c + g + i ; 对第2类:FP_2=b+h;TP_2=e;FN_2=d+f; TN_2=a+c+g+i; 2FP2=b+hTP2=eFN2=d+fTN2=a+c+g+i 对 第 3 类 : F P 3 = c + f ; T P 3 = i ; F N 3 = g + h ; T N 3 = a + b + d + e ; 对第3类:FP_3=c+f; TP_3=i; FN_3=g+h;TN_3=a+b+d+e; 3FP3=c+fTP3=iFN3=g+hTN3=a+b+d+e

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


  对于micro-Recall m i c r o − R e c a l l = T P 1 + T P 2 + T P 3 T P 1 + T P 2 + T P 3 + F N 1 + F N 2 + F N 3 micro-Recall=\frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FN_1+FN_2+FN_3} microRecall=TP1+TP2+TP3+FN1+FN2+FN3TP1+TP2+TP3  即三个类别的TP和FN相加为分母,TP为分子。由上式分析可知, T P 1 + T P 2 + T P 3 = a + e + i TP_1+TP_2+TP_3 =a+e+i TP1+TP2+TP3=a+e+i F N 1 + F N 2 + F N 3 = b + c + d + f + g + h FN_1+FN_2+FN_3 =b+c+d+f+g+h FN1+FN2+FN3=b+c+d+f+g+h  (即除了TP之外的所有格),所以得到
R e c a l l m = a + e + i a + e + i + b + c + d + f + g + h Recall_m=\frac{a+e+i}{a+e+i+b+c+d+f+g+h} Recallm=a+e+i+b+c+d+f+g+ha+e+i

  对于micro-Precision
m i c r o − P r e c i s i o n = T P 1 + T P 2 + T P 3 T P 1 + T P 2 + T P 3 + F P 1 + F P 2 + F P 3 micro-Precision=\frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FP_1+FP_2+FP_3} microPrecision=TP1+TP2+TP3+FP1+FP2+FP3TP1+TP2+TP3  同理可得, T P 1 + T P 2 + T P 3 = a + e + i TP_1+TP_2+TP_3 =a+e+i TP1+TP2+TP3=a+e+i F P 1 + F P 2 + F P 3 = d + g + b + h + c + f FP_1+FP_2+FP_3 =d+g+b+h+c+f FP1+FP2+FP3=d+g+b+h+c+f  (即除了TP之外的所有格),得到
P r e c i s i o n m = a + e + i a + e + i + d + g + b + h + c + f = R e c a l l m Precision_m=\frac{a+e+i}{a+e+i+d+g+b+h+c+f}=Recall_m Precisionm=a+e+i+d+g+b+h+c+fa+e+i=Recallm

  然后,根据micro F1-score的计算方式可得: m i c r o − F 1 = 2 R e c a l l m × P r e c i s i o n m R e c a l l m + P r e c i s i o n m = R e c a l l m = P r e c i s i o n m micro-F1= 2\frac{Recall_m×Precision_m}{Recall_m+Precision_m}=Recall_m=Precision_m microF1=2Recallm+PrecisionmRecallm×Precisionm=Recallm=Precisionm
  而且,对于模型准确性Accuracy,定义为正确分类的样本在所有样本中的比例。所以准确性的公式
A c c = a + e + i a + b + c + d + e + f + g + h + i = m i c r o − F 1 = R e c a l l m = P r e c i s i o n m Acc= \frac{a+e+i}{a+b+c+d+e+f+g+h+i}=micro-F1=Recall_m=Precision_m Acc=a+b+c+d+e+f+g+h+ia+e+i=microF1=Recallm=Precisionm
  据此我们可以得出结论:若micro-F1=0.5,则模型准确率Acc=0.5,Precision和Recall均为0.5,但是!我们不能得出模型基本是靠猜的结论,因为若是三分类结果如下:
#机器学习 Micro-F1和Macro-F1详解_第3张图片 A c c = a + e + i a + b + c + d + e + f + g + h + i = m i c r o − F 1 = R e c a l l m = P r e c i s i o n m = 0.5 Acc= \frac{a+e+i}{a+b+c+d+e+f+g+h+i}=micro-F1=Recall_m=Precision_m=0.5 Acc=a+b+c+d+e+f+g+h+ia+e+i=microF1=Recallm=Precisionm=0.5


macro-F1:

取值范围:(0, 1);
取值范围:每一类别的权重都相同;
适用环境:多分类问题,不受数据不平衡影响,容易受到识别性高(高recall、高precision)的类别影响;
计算方法:(以三分类来计算) ( 1 ) .   计 算 每 个 类 别 的 F 1 − s c o r e i = 2 R e c a l l i × P r e c i s i o n i R e c a l l i + P r e c i s i o n i (1).\ 计算每个类别的F1-score_i=2\frac{Recall_i×Precision_i}{Recall_i+Precision_i} (1). F1scorei=2Recalli+PrecisioniRecalli×Precisioni ( 2 ) .   计 算 m a c r o − F 1 = F 1 − s c o r e 1 + F 1 − s c o r e 2 + F 1 − s c o r e 3 3 (2).\ 计算macro-F1=\frac{F1-score_1+F1-score_2+F1-score_3}{3} (2). macroF1=3F1score1+F1score2+F1score3

  其实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的计算方式,因此我们使用第二种计算方式进行说明。

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

  同样,我们对每一类的指标都进行分析:
对 第 1 类 : F P 1 = d + g ; T P 1 = a ; F N 1 = b + c ; T N 1 = e + f + h + i ; 对第1类:FP_1=d+g;TP_1=a;FN_1=b+c;TN_1=e+f+h+i; 1FP1=d+gTP1=aFN1=b+cTN1=e+f+h+i 对 第 2 类 : F P 2 = b + h ; T P 2 = e ; F N 2 = d + f ; T N 2 = a + c + g + i ; 对第2类:FP_2=b+h;TP_2=e;FN_2=d+f; TN_2=a+c+g+i; 2FP2=b+hTP2=eFN2=d+fTN2=a+c+g+i 对 第 3 类 : F P 3 = c + f ; T P 3 = i ; F N 3 = g + h ; T N 3 = a + b + d + e ; 对第3类:FP_3=c+f; TP_3=i; FN_3=g+h;TN_3=a+b+d+e; 3FP3=c+fTP3=iFN3=g+hTN3=a+b+d+e
对 第 1 类 : R e c a l l 1 = T P 1 T P 1 + F N 1 , P r e c i s i o n 1 = T P 1 T P 1 + F P 1 , F 1 − s c o r e 1 = 2 T P 1 2 T P 1 + F P 1 + F N 1 对第1类:Recall_1=\frac{TP_1}{TP_1+FN_1},Precision_1=\frac{TP_1}{TP_1+FP_1},F1-score_1=\frac{2TP_1}{2TP_1+FP_1+FN_1} 1:Recall1=TP1+FN1TP1,Precision1=TP1+FP1TP1,F1score1=2TP1+FP1+FN12TP1 对 第 2 类 : R e c a l l 2 = T P 2 T P 2 + F N 2 , P r e c i s i o n 2 = T P 2 T P 2 + F P 2 , F 1 − s c o r e 2 = 2 T P 2 2 T P 2 + F P 2 + F N 2 对第2类:Recall_2=\frac{TP_2}{TP_2+FN_2},Precision_2=\frac{TP_2}{TP_2+FP_2},F1-score_2=\frac{2TP_2}{2TP_2+FP_2+FN_2} 2:Recall2=TP2+FN2TP2,Precision2=TP2+FP2TP2,F1score2=2TP2+FP2+FN22TP2 对 第 3 类 : R e c a l l 3 1 = T P 3 T P 3 + F N 3 , P r e c i s i o n 3 = T P 3 T P 3 + F P 3 , F 1 − s c o r e 3 = 2 T P 3 2 T P 3 + F P 3 + F N 3 对第3类:Recall_31=\frac{TP_3}{TP_3+FN_3},Precision_3=\frac{TP_3}{TP_3+FP_3},F1-score_3=\frac{2TP_3}{2TP_3+FP_3+FN_3} 3:Recall31=TP3+FN3TP3,Precision3=TP3+FP3TP3,F1score3=2TP3+FP3+FN32TP3
  将上述的值带入macro-F1中,得到:
m a c r o − F 1 = F 1 − s c o r e 1 + F 1 − s c o r e 2 + F 1 − s c o r e 3 3 macro-F1=\frac{F1-score_1+F1-score_2+F1-score_3}{3} macroF1=3F1score1+F1score2+F1score3                              = 2 T P 1 2 T P 1 + F P 1 + F N 1 + 2 T P 2 2 T P 2 + F P 2 + F N 2 + 2 T P 3 2 T P 3 + F P 3 + F N 3 3 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac{\frac{2TP_1}{2TP_1+FP_1+FN_1}+\frac{2TP_2}{2TP_2+FP_2+FN_2}+\frac{2TP_3}{2TP_3+FP_3+FN_3}}{3}                             =32TP1+FP1+FN12TP1+2TP2+FP2+FN22TP2+2TP3+FP3+FN32TP3              = 2 a 2 a + b + c + d + g + 2 e 2 e + b + d + f + h + 2 i 2 i + c + f + g + h 3 \ \ \ \ \ \ \ \ \ \ \ \ =\frac{\frac{2a}{2a+b+c+d+g}+\frac{2e}{2e+b+d+f+h}+\frac{2i}{2i+c+f+g+h}}{3}             =32a+b+c+d+g2a+2e+b+d+f+h2e+2i+c+f+g+h2i
  上式即为macro-F1的公式(算到这里我就没有继续化简了感觉没东西)

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


weighted-F1

  除了micro-F1和macro-F1,还有weighted-F1,是一个将F1-score乘以该类的比例之后相加的结果,也可以看做是macro-F1的变体吧。例如:#机器学习 Micro-F1和Macro-F1详解_第4张图片

  对上述表格,我们可得出每一类的precision、recall和F1-score:

#机器学习 Micro-F1和Macro-F1详解_第5张图片
  所以,计算weighted-F1:
w e i g h t e d − F 1 = 6 × 42.10 % + 10 × 30.80 % + 9 × 66.70 % 4 + 6 + 3 + 1 + 2 + 0 + 1 + 2 + 6 = 46.40 % weighted-F1=\frac{6×42.10\%+10×30.80\%+9×66.70\%}{4+6+3+1+2+0+1+2+6}=46.40\% weightedF1=4+6+3+1+2+0+1+2+66×42.10%+10×30.80%+9×66.70%=46.40%

  同样,我们也可以算weighted-Precision和weighted-Recall:
w e i g h t e d − P r e c i s i o n = 6 × 30.80 % + 10 × 66.70 % + 9 × 66.70 % 25 = 58.10 % weighted-Precision=\frac{6×30.80\%+10×66.70\%+9×66.70\%}{25}=58.10\% weightedPrecision=256×30.80%+10×66.70%+9×66.70%=58.10% w e i g h t e d − R e c a l l = 6 × 66.70 % + 10 × 20.00 % + 9 × 66.70 % 25 = 48.00 % weighted-Recall=\frac{6×66.70\%+10×20.00\%+9×66.70\%}{25}=48.00\% weightedRecall=256×66.70%+10×20.00%+9×66.70%=48.00%

  其实从上面我们也可以看出来,
w e i g h t e d − F 1 ≠ 2 w e i g h t e d − P r e c i s i o n × w e i g h t e d − R e c a l l w e i g h t e d − P r e c i s i o n + w e i g h t e d − R e c a l l ≈ 52.57 % weighted-F1≠2\frac{weighted-Precision×weighted-Recall}{weighted-Precision+weighted-Recall}≈52.57\% weightedF1=2weightedPrecision+weightedRecallweightedPrecision×weightedRecall52.57%
  同理,参考macro的两种计算方式,一般以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)

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

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

  如果错误请及时联系我,以免产生误会。



参考
https://towardsdatascience.com/multi-class-metrics-made-simple-part-i-precision-and-recall-9250280bddc2
https://towardsdatascience.com/multi-class-metrics-made-simple-part-ii-the-f1-score-ebe8b2c2ca1

你可能感兴趣的:(机器学习,Python,机器学习,数据分析)