#机器学习 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计算方法:
假设有如下的二分类结果:
根据上述结果我们可以得到一下结果:
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+Precision12=2Recall+PrecisionRecall×Precision
在多分类问题中,如果要计算模型的F1-score,则有两种计算方式,分别为micro-F1
和macro-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+FN3TP1+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+FP3TP1+TP2+TP3计算总的micro−F1=2Recallm×PrecisionmRecallm+Precisionm计算总的micro-F1= 2\frac{Recall_m×Precision_m}{Recall_m+Precision_m} 计算总的micro−F1=2Recallm+PrecisionmRecallm×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+FN3TP1+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+FP3TP1+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+PrecisionmRecallm×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+PrecisioniRecalli×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+FN1TP1,Precision1=TP1+FP1TP1,F1−score1=2TP1+FP1+FN12TP1对第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+FN2TP2,Precision2=TP2+FP2TP2,F1−score2=2TP2+FP2+FN22TP2对第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类:Recall31=TP3+FN3TP3,Precision3=TP3+FP3TP3,F1−score3=2TP3+FP3+FN32TP3
将上述的值带入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+FN12TP1+2TP2+FP2+FN22TP2+2TP3+FP3+FN32TP3=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详解相关推荐
- kmeans python interation flag_机器学习经典算法-logistic回归代码详解
一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...
- 机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)
文章目录 前言 一.混淆矩阵(confusion matrix) 二.准确率,精准率,召回率,F1分数 1. 准确率(Accuracy) 2. 精确率(Precision) 3. 召回率(Recall ...
- 机器学习最易懂之EM算法详解与python实现
文章目录 0.前言 1.EM算法引入 2.具体的EM算法 3.EM算法推导 3.1 Jensen不等式 3.2 EM推导 3.3 EM算法的收敛性 4.EM算法在高斯混合模型中的应用 4.1 高斯混合 ...
- 【机器学习】集成学习及算法详解
集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...
- 机器学习--支持向量机(五)核函数详解
前面我们曾经引入二维数据的非线性的情况,但是那种非线性(并不是真正意义上的非线性)是通过松弛因子进行优化的,如果数据比之前还复杂怎么办呢? 复杂到即使你怎么调节C你都无法进行分类,这个时候怎么办?如下 ...
- 机器学习(六)树模型详解
树模型详解 决策树 决策树模型 ① 树模型不用做scaling ② 树模型不太需要做离散化 ③ 用Xgboost等工具库,是不需要做缺失值填充 ④ 树模型是非线性模型,有非线性的表达能力 决策树基于& ...
- 分类模型评估体系:混淆矩阵、PR曲线、F1、Weighted F1、Micro F1、Macro F1、ROCAUC、KS曲线、Lift曲线、GAIN曲线
目录 混淆矩阵 一类错误+二类错误 查准率(precision)和查全率(recall) PR曲线 调和参数F1
- 计算机开机按f1,电脑开机按f1怎么办 电脑开机按f1解决方法【详解】
我们有时候开机会遇到一大串英文,大致意思就是让你按F1才能继续启动计入系统.那么如何解决电脑开机进入系统要按f1的解决方法呢? 开机按f1的解决方法 其英文应该是:Hareware Monitor f ...
- 机器学习分类算法(附图文详解)
说起分类算法,相信学过机器学习的同学都能侃上一二. 可是,你能够如数家珍地说出所有常用的分类算法,以及他们的特征.优缺点吗?比如说,你可以快速地回答下面的问题么: KNN算法的优缺点是什么? Naiv ...
- python机器学习学习通第一章答案详解
目 录 第一讲 人工智能概述 一.单选题 二.判断题 第一讲 人工智能概述 一.单选题 1.假设你正在做天气预报,并使用算法预测明天气温(摄氏度/华氏度),你会把这当作一个分类问题还是一个回归问题? ...
最新文章
- c#中string字符串转为json与json转对象
- js 实现2的n次方计算函数_密码杂凑函数的基本性质探讨
- 7_linux下PHP、Apache、Mysql服务的安装
- bootstrap 获取表格修改的结果_bootstrap-table前端修改后台传来的数据重新进行渲染...
- php中接口验证失败,php短信验证失败的原因
- 静态注册BroadcastReceiver内部类
- Myeclipse2014在线安装SVN插件
- 获取打印机状态,判断打印机状态,获取打印机驱动信息
- HTMLTestRunner测试报告定制
- 如何在markdown中打出上标、下标和一些特殊符号 from jianshuer 这是朕的江山
- java多线程厨师做饼,Java多线程之厨师与食客问题
- 乐乐课堂_leleketang.com
- 光伏发电并网matlab/simulink仿真,带PLL锁相环,逆变器控制,最大功率控制MPPT,BOOST升压电路
- java心得!--很好的java学习历程(转自张国宝)
- android跨应用调用方法是,Android如何实现不同应用之间的调用
- 【区块链实战】什么是DAPP,区块链开发如何进行技术选型
- python中幂运算_python中幂运算
- 欧拉公式ejwt_欧拉公式
- 任正非在2012实验室的讲话
- 2021-07-18 2021年美容师(初级)考试内容及美容师(初级)考试总结
热门文章
- 苹果手机怎么编辑word文档_Word文档编辑转换安卓版下载_Word文档编辑转换app下载...
- java/php/net/python西石大快递代取系统设计
- 大二课设,采用 bootstrap + express + mysql 实现电影售票系统(附带源码)
- ue4 材质始终面向摄像机
- 贪心算法 背包问题代码 c语言,用贪心算法求解普通背包问题的C++代码
- 计算机英语过级考试开挂,四六级口语:开挂攻略+考试黄金模板!
- Android——一个简单的智能家居系统
- java后台 学习顺序
- 苹果电脑ntfs如何打开硬盘?苹果电脑读写ntfs
- 大数据量下水晶报表的实现及显示过程中的进度条显示讨论