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计算方法:

  假设有如下的二分类结果:

  根据上述结果我们可以得到一下结果:
Precision=aa+cRecall=aa+b\ \ \ Precision= \frac{a}{a+c} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Recall= \frac{a}{a+b}    Precision=a+ca​                  Recall=a+ba​二分类F1−score:F1=21Recall+1Precision=2Recall×PrecisionRecall+Precision二分类F1-score:F1= \frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}= 2\frac{Recall×Precision}{Recall+Precision} 二分类F1−score:F1=Recall1​+Precision1​2​=2Recall+PrecisionRecall×Precision​


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

micro-F1:

取值范围:(0, 1);
权重倾向:每一个样本的权重都相同;
适用环境:多分类不平衡,若数据极度不平衡会影响结果;
计算方式:
计算总的Recallm=TP1+TP2+TP3TP1+TP2+TP3+FN1+FN2+FN3计算总的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​+FN3​TP1​+TP2​+TP3​​计算总的Precisionm=TP1+TP2+TP3TP1+TP2+TP3+FP1+FP2+FP3计算总的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​+FP3​TP1​+TP2​+TP3​​计算总的micro−F1=2Recallm×PrecisionmRecallm+Precisionm计算总的micro-F1= 2\frac{Recall_m×Precision_m}{Recall_m+Precision_m} 计算总的micro−F1=2Recallm​+Precisionm​Recallm​×Precisionm​​
  TPi 是指第 i 类的 True Positive   正类判定为正类;
  FPi 是指第 i 类的 False Positive  负类判定为正类;
  FNi 是指第 i 类的 FalseNegative  正类判定为负类;
  TNi 是指第 i 类的 True Negative  负类判定为负类。

  假设现在有一下的三分类结果:

  由此表我们可以得出:
对第1类:FP1=d+g;TP1=a;FN1=b+c;TN1=e+f+h+i;对第1类:FP_1=d+g;TP_1=a;FN_1=b+c;TN_1=e+f+h+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;对第2类:FP_2=b+h;TP_2=e;FN_2=d+f; TN_2=a+c+g+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;对第3类:FP_3=c+f; TP_3=i; FN_3=g+h;TN_3=a+b+d+e; 对第3类:FP3​=c+f;TP3​=i;FN3​=g+h;TN3​=a+b+d+e;

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

  对于micro-Recall:micro−Recall=TP1+TP2+TP3TP1+TP2+TP3+FN1+FN2+FN3micro-Recall=\frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FN_1+FN_2+FN_3}micro−Recall=TP1​+TP2​+TP3​+FN1​+FN2​+FN3​TP1​+TP2​+TP3​​  即三个类别的TP和FN相加为分母,TP为分子。由上式分析可知,TP1+TP2+TP3=a+e+iTP_1+TP_2+TP_3 =a+e+iTP1​+TP2​+TP3​=a+e+iFN1+FN2+FN3=b+c+d+f+g+hFN_1+FN_2+FN_3 =b+c+d+f+g+hFN1​+FN2​+FN3​=b+c+d+f+g+h  (即除了TP之外的所有格),所以得到
Recallm=a+e+ia+e+i+b+c+d+f+g+hRecall_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
micro−Precision=TP1+TP2+TP3TP1+TP2+TP3+FP1+FP2+FP3micro-Precision=\frac{TP_1+TP_2+TP_3}{TP_1+TP_2+TP_3+FP_1+FP_2+FP_3}micro−Precision=TP1​+TP2​+TP3​+FP1​+FP2​+FP3​TP1​+TP2​+TP3​​  同理可得,TP1+TP2+TP3=a+e+iTP_1+TP_2+TP_3 =a+e+iTP1​+TP2​+TP3​=a+e+iFP1+FP2+FP3=d+g+b+h+c+fFP_1+FP_2+FP_3 =d+g+b+h+c+fFP1​+FP2​+FP3​=d+g+b+h+c+f  (即除了TP之外的所有格),得到
Precisionm=a+e+ia+e+i+d+g+b+h+c+f=RecallmPrecision_m=\frac{a+e+i}{a+e+i+d+g+b+h+c+f}=Recall_mPrecisionm​=a+e+i+d+g+b+h+c+fa+e+i​=Recallm​

  然后,根据micro F1-score的计算方式可得:micro−F1=2Recallm×PrecisionmRecallm+Precisionm=Recallm=Precisionmmicro-F1= 2\frac{Recall_m×Precision_m}{Recall_m+Precision_m}=Recall_m=Precision_mmicro−F1=2Recallm​+Precisionm​Recallm​×Precisionm​​=Recallm​=Precisionm​
  而且,对于模型准确性Accuracy,定义为正确分类的样本在所有样本中的比例。所以准确性的公式
Acc=a+e+ia+b+c+d+e+f+g+h+i=micro−F1=Recallm=PrecisionmAcc= \frac{a+e+i}{a+b+c+d+e+f+g+h+i}=micro-F1=Recall_m=Precision_mAcc=a+b+c+d+e+f+g+h+ia+e+i​=micro−F1=Recallm​=Precisionm​
  据此我们可以得出结论:若micro-F1=0.5,则模型准确率Acc=0.5,Precision和Recall均为0.5,但是!我们不能得出模型基本是靠猜的结论,因为若是三分类结果如下:
Acc=a+e+ia+b+c+d+e+f+g+h+i=micro−F1=Recallm=Precisionm=0.5Acc= \frac{a+e+i}{a+b+c+d+e+f+g+h+i}=micro-F1=Recall_m=Precision_m=0.5Acc=a+b+c+d+e+f+g+h+ia+e+i​=micro−F1=Recallm​=Precisionm​=0.5


macro-F1:

取值范围:(0, 1);
取值范围:每一类别的权重都相同;
适用环境:多分类问题,不受数据不平衡影响,容易受到识别性高(高recall、高precision)的类别影响;
计算方法:(以三分类来计算)(1).计算每个类别的F1−scorei=2Recalli×PrecisioniRecalli+Precisioni(1).\ 计算每个类别的F1-score_i=2\frac{Recall_i×Precision_i}{Recall_i+Precision_i}(1). 计算每个类别的F1−scorei​=2Recalli​+Precisioni​Recalli​×Precisioni​​(2).计算macro−F1=F1−score1+F1−score2+F1−score33(2).\ 计算macro-F1=\frac{F1-score_1+F1-score_2+F1-score_3}{3}(2). 计算macro−F1=3F1−score1​+F1−score2​+F1−score3​​

  其实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类:FP1=d+g;TP1=a;FN1=b+c;TN1=e+f+h+i;对第1类:FP_1=d+g;TP_1=a;FN_1=b+c;TN_1=e+f+h+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;对第2类:FP_2=b+h;TP_2=e;FN_2=d+f; TN_2=a+c+g+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;对第3类:FP_3=c+f; TP_3=i; FN_3=g+h;TN_3=a+b+d+e; 对第3类:FP3​=c+f;TP3​=i;FN3​=g+h;TN3​=a+b+d+e;
对第1类:Recall1=TP1TP1+FN1,Precision1=TP1TP1+FP1,F1−score1=2TP12TP1+FP1+FN1对第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​+FN1​TP1​​,Precision1​=TP1​+FP1​TP1​​,F1−score1​=2TP1​+FP1​+FN1​2TP1​​对第2类:Recall2=TP2TP2+FN2,Precision2=TP2TP2+FP2,F1−score2=2TP22TP2+FP2+FN2对第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​+FN2​TP2​​,Precision2​=TP2​+FP2​TP2​​,F1−score2​=2TP2​+FP2​+FN2​2TP2​​对第3类:Recall31=TP3TP3+FN3,Precision3=TP3TP3+FP3,F1−score3=2TP32TP3+FP3+FN3对第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类:Recall3​1=TP3​+FN3​TP3​​,Precision3​=TP3​+FP3​TP3​​,F1−score3​=2TP3​+FP3​+FN3​2TP3​​
  将上述的值带入macro-F1中,得到:
macro−F1=F1−score1+F1−score2+F1−score33macro-F1=\frac{F1-score_1+F1-score_2+F1-score_3}{3} macro−F1=3F1−score1​+F1−score2​+F1−score3​​=2TP12TP1+FP1+FN1+2TP22TP2+FP2+FN2+2TP32TP3+FP3+FN33\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\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​+FN1​2TP1​​+2TP2​+FP2​+FN2​2TP2​​+2TP3​+FP3​+FN3​2TP3​​​=2a2a+b+c+d+g+2e2e+b+d+f+h+2i2i+c+f+g+h3\ \ \ \ \ \ \ \ \ \ \ \ =\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的变体吧。例如:

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


  所以,计算weighted-F1:
weighted−F1=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\% weighted−F1=4+6+3+1+2+0+1+2+66×42.10%+10×30.80%+9×66.70%​=46.40%

  同样,我们也可以算weighted-Precision和weighted-Recall:
weighted−Precision=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\% weighted−Precision=256×30.80%+10×66.70%+9×66.70%​=58.10%weighted−Recall=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\% weighted−Recall=256×66.70%+10×20.00%+9×66.70%​=48.00%

  其实从上面我们也可以看出来,
weighted−F1≠2weighted−Precision×weighted−Recallweighted−Precision+weighted−Recall≈52.57%weighted-F1≠2\frac{weighted-Precision×weighted-Recall}{weighted-Precision+weighted-Recall}≈52.57\%weighted−F1​=2weighted−Precision+weighted−Recallweighted−Precision×weighted−Recall​≈52.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

#机器学习 Micro-F1和Macro-F1详解相关推荐

  1. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  2. 机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)

    文章目录 前言 一.混淆矩阵(confusion matrix) 二.准确率,精准率,召回率,F1分数 1. 准确率(Accuracy) 2. 精确率(Precision) 3. 召回率(Recall ...

  3. 机器学习最易懂之EM算法详解与python实现

    文章目录 0.前言 1.EM算法引入 2.具体的EM算法 3.EM算法推导 3.1 Jensen不等式 3.2 EM推导 3.3 EM算法的收敛性 4.EM算法在高斯混合模型中的应用 4.1 高斯混合 ...

  4. 【机器学习】集成学习及算法详解

    集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...

  5. 机器学习--支持向量机(五)核函数详解

    前面我们曾经引入二维数据的非线性的情况,但是那种非线性(并不是真正意义上的非线性)是通过松弛因子进行优化的,如果数据比之前还复杂怎么办呢? 复杂到即使你怎么调节C你都无法进行分类,这个时候怎么办?如下 ...

  6. 机器学习(六)树模型详解

    树模型详解 决策树 决策树模型 ① 树模型不用做scaling ② 树模型不太需要做离散化 ③ 用Xgboost等工具库,是不需要做缺失值填充 ④ 树模型是非线性模型,有非线性的表达能力 决策树基于& ...

  7. 分类模型评估体系:混淆矩阵、PR曲线、F1、Weighted F1、Micro F1、Macro F1、ROCAUC、KS曲线、Lift曲线、GAIN曲线

    目录 混淆矩阵 一类错误+二类错误 查准率(precision)和查全率(recall) PR曲线 调和参数F1

  8. 计算机开机按f1,电脑开机按f1怎么办 电脑开机按f1解决方法【详解】

    我们有时候开机会遇到一大串英文,大致意思就是让你按F1才能继续启动计入系统.那么如何解决电脑开机进入系统要按f1的解决方法呢? 开机按f1的解决方法 其英文应该是:Hareware Monitor f ...

  9. 机器学习分类算法(附图文详解)

    说起分类算法,相信学过机器学习的同学都能侃上一二. 可是,你能够如数家珍地说出所有常用的分类算法,以及他们的特征.优缺点吗?比如说,你可以快速地回答下面的问题么: KNN算法的优缺点是什么? Naiv ...

  10. python机器学习学习通第一章答案详解

    目 录 第一讲 人工智能概述 一.单选题 二.判断题 第一讲 人工智能概述 一.单选题 1.假设你正在做天气预报,并使用算法预测明天气温(摄氏度/华氏度),你会把这当作一个分类问题还是一个回归问题? ...

最新文章

  1. c#中string字符串转为json与json转对象
  2. js 实现2的n次方计算函数_密码杂凑函数的基本性质探讨
  3. 7_linux下PHP、Apache、Mysql服务的安装
  4. bootstrap 获取表格修改的结果_bootstrap-table前端修改后台传来的数据重新进行渲染...
  5. php中接口验证失败,php短信验证失败的原因
  6. 静态注册BroadcastReceiver内部类
  7. Myeclipse2014在线安装SVN插件
  8. 获取打印机状态,判断打印机状态,获取打印机驱动信息
  9. HTMLTestRunner测试报告定制
  10. 如何在markdown中打出上标、下标和一些特殊符号 from jianshuer 这是朕的江山
  11. java多线程厨师做饼,Java多线程之厨师与食客问题
  12. 乐乐课堂_leleketang.com
  13. 光伏发电并网matlab/simulink仿真,带PLL锁相环,逆变器控制,最大功率控制MPPT,BOOST升压电路
  14. java心得!--很好的java学习历程(转自张国宝)
  15. android跨应用调用方法是,Android如何实现不同应用之间的调用
  16. 【区块链实战】什么是DAPP,区块链开发如何进行技术选型
  17. python中幂运算_python中幂运算
  18. 欧拉公式ejwt_欧拉公式
  19. 任正非在2012实验室的讲话
  20. 2021-07-18 2021年美容师(初级)考试内容及美容师(初级)考试总结

热门文章

  1. 苹果手机怎么编辑word文档_Word文档编辑转换安卓版下载_Word文档编辑转换app下载...
  2. java/php/net/python西石大快递代取系统设计
  3. 大二课设,采用 bootstrap + express + mysql 实现电影售票系统(附带源码)
  4. ue4 材质始终面向摄像机
  5. 贪心算法 背包问题代码 c语言,用贪心算法求解普通背包问题的C++代码
  6. 计算机英语过级考试开挂,四六级口语:开挂攻略+考试黄金模板!
  7. Android——一个简单的智能家居系统
  8. java后台 学习顺序
  9. 苹果电脑ntfs如何打开硬盘?苹果电脑读写ntfs
  10. 大数据量下水晶报表的实现及显示过程中的进度条显示讨论