在二分类条件下,我们可以很轻易的在混淆矩阵的基础上定义出各种指标(例如Accurarcy, precision, F1F_1F1​, recall),其定义方法如下:

true positive: TP,真实情况为True,预测也为正的样本数。
false positive:FP,真实情况为False,预测为正的样本数。
false negative:FN,真实情况为True,预测为负的样本数。
true negative: TN,真实情况为False,预测为负的样本数。
对于这四个指标,在英文的取名是是两个形容词【A1A_1A1​,A2A_2A2​】,其中第二个形容词是主体,表示预测的结果(预测目标的是正样本,还是负样本),它其实对应着一个命题:预测该样本为正或负样本。第一个形容词是对这个命题的判断结果,表示这个命题的正确与否。
例如: false negative: negative表示"分类器预测该样本为负样本"这个命题。 false则表示这个命题(“分类器预测该样本为负样本”)是错误的,既然命题是错误的,说明这个样本的实际情况是正样本。
在这些指标下,acc,recall,precision的值定义如下:
Accuracy=TP+TNTP+FP+FN+TNAccuracy=\frac{TP+TN}{TP+FP+FN+TN}Accuracy=TP+FP+FN+TNTP+TN​
Recall=TPTP+FNRecall=\frac{TP}{TP+FN}Recall=TP+FNTP​
Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}Precision=TP+FPTP​

那么对于多分类,如何定义混淆矩阵的TP,FP,FN,TN?
一般的做法是,对于多分类里面的每个类别,将自身类作为正类,其他所有类作为反类,然后定义出各自的TPi,FPi,FNi,TNiTP_i,FP_i,FN_i,TN_iTPi​,FPi​,FNi​,TNi​,然后再去计算各个类别的accuracyiaccuracy_iaccuracyi​,recallirecall_irecalli​和F1iF_{1i}F1i​,其中iii 表示第i个类别。
如果要计算出分类器对于所有类别的acc和recall,需要把所有类别的结果都汇聚起来,而Macro-average,Micro-average和Weighted-average就是三种汇聚所有类的指标的方式。
具体来说:
Macro-average下的accuracy的计算方式是:
Accuracymacro_avg=∑i=1N1N×accuracyi=∑i=1N1N×TPi+TNiTPi+TNi+FPi+FNiAccuracy_{macro\_avg}=\sum^{N}_{i=1}\frac{1}{N} \times accuracy_i=\sum^{N}_{i=1}\frac{1}{N}\times \frac{TP_i+TN_i}{TP_i+TN_i+FP_i+FN_i}Accuracymacro_avg​=i=1∑N​N1​×accuracyi​=i=1∑N​N1​×TPi​+TNi​+FPi​+FNi​TPi​+TNi​​
这相当于把所有类别的权重都是设置为一致,这种方式在测试样本的类别在数量上极端不均衡的时候极端的不合理。
因此,为了考虑到不同类别的样本不均衡,就有所谓的Weighted-average计算方式:
Accuracyweight_avg=∑i=1NTPi+FNi∑j=1NTPi+FNi×accuracyiAccuracy_{weight\_avg}=\sum^{N}_{i=1}\frac{TP_i+FN_i}{\sum^{N}_{j=1} TP_i+FN_i}\times accuracy_iAccuracyweight_avg​=i=1∑N​∑j=1N​TPi​+FNi​TPi​+FNi​​×accuracyi​
这是把第i个类别的权重设置为了第i类样本占所有类别样本的比例了。

而Micro-average下的Precision和recall的计算方式和accuracy的计算方式还不太一样:
Recall=∑i=1NTPi∑j=1NTPj+FNjRecall=\frac{\sum_{i=1}^{N}TPi}{\sum_{j=1}^N TP_j+FN_j}Recall=∑j=1N​TPj​+FNj​∑i=1N​TPi​
Precision=∑i=1NTPi∑j=1NTPj+FPjPrecision=\frac{\sum_{i=1}^{N}TPi}{\sum_{j=1}^N TP_j+FP_j}Precision=∑j=1N​TPj​+FPj​∑i=1N​TPi​
而Accuracy是说,所有这些样本里面,有多少个样本是识别正确的,因此它的计算方式为:
Accuracy=∑i=1NTPi总样本数Accuracy=\frac{\sum_{i=1}^{N}TPi}{总样本数}Accuracy=总样本数∑i=1N​TPi​

举例说明

我们举个三分类的例子加以说明。
如下图所示的混淆矩阵:

对猫,鱼,鸡,我们可以分别求出各自的TP,TN,FP,FN:
TP猫=4TP_{猫}=4TP猫​=4,TP鱼=2TP_{鱼}=2TP鱼​=2,TP鸡=6TP_{鸡}=6TP鸡​=6
TN猫=2+2+0+6=10TN_{猫}=2+2+0+6=10TN猫​=2+2+0+6=10,TN鱼=4+3+1+6=14TN_{鱼}=4+3+1+6=14TN鱼​=4+3+1+6=14,TN鸡=4+6+1+2=13TN_{鸡}=4+6+1+2=13TN鸡​=4+6+1+2=13
FP猫=6+3=9,FP鱼=1+0=1,FP鸡=1+2=3FP_{猫}=6+3=9,FP_{鱼}=1+0=1,FP_{鸡}=1+2=3FP猫​=6+3=9,FP鱼​=1+0=1,FP鸡​=1+2=3
FN猫=1+1=2,FN鱼=6+2=8,FN鸡=3+0=3FN_{猫}=1+1=2,FN_{鱼}=6+2=8,FN_{鸡}=3+0=3FN猫​=1+1=2,FN鱼​=6+2=8,FN鸡​=3+0=3
于是对于猫来说:
Accuracy猫=4+104+10+9+2=0.56Accuracy_{猫}=\frac{4+10}{4+10+9+2}=0.56Accuracy猫​=4+10+9+24+10​=0.56
recall猫=46=0.66recall_{猫}=\frac{4}{6}=0.66recall猫​=64​=0.66
precision猫=TP猫TP猫+FP猫=44+9=0.3076precision_{猫}=\frac{TP_{猫}}{TP_{猫}+FP_{猫}}=\frac{4}{4+9}=0.3076precision猫​=TP猫​+FP猫​TP猫​​=4+94​=0.3076

对于鱼来说:
Accuracy鱼=2+142+14+1+8=0.64Accuracy_{鱼}=\frac{2+14}{2+14+1+8}=0.64Accuracy鱼​=2+14+1+82+14​=0.64
recall鱼=22+8=0.20recall_{鱼}=\frac{2}{2+8}=0.20recall鱼​=2+82​=0.20
precision鱼=TP鱼TP鱼+FP鱼=22+1=0.66precision_{鱼}=\frac{TP_{鱼}}{TP_{鱼}+FP_{鱼}}=\frac{2}{2+1}=0.66precision鱼​=TP鱼​+FP鱼​TP鱼​​=2+12​=0.66

对于鸡来说:
Accuracy鸡=6+136+13+3+3=0.76Accuracy_{鸡}=\frac{6+13}{6+13+3+3}=0.76Accuracy鸡​=6+13+3+36+13​=0.76
recall鸡=66+3=0.66recall_{鸡}=\frac{6}{6+3}=0.66recall鸡​=6+36​=0.66
precision鸡=TP鸡TP鸡+FP鸡=66+3=0.66precision_{鸡}=\frac{TP_{鸡}}{TP_{鸡}+FP_{鸡}}=\frac{6}{6+3}=0.66precision鸡​=TP鸡​+FP鸡​TP鸡​​=6+36​=0.66


接下来,我们分别计算Macro-average,Micro-average和Weighted-average下的三种指标:
Macro-average 情况下 :
acc=0.56+0.64+0.763acc=\frac{0.56+0.64+0.76}{3}acc=30.56+0.64+0.76​

recall=0.66+0.66+0.203recall=\frac{0.66+0.66+0.20}{3}recall=30.66+0.66+0.20​

precision=0.3076+0.66+0.663precision=\frac{0.3076+0.66+0.66}{3}precision=30.3076+0.66+0.66​


Micro-average 情况下:
acc=4+2+66+4+9=1225=0.48acc=\frac{4+2+6}{6+4+9}=\frac{12}{25}=0.48acc=6+4+94+2+6​=2512​=0.48

recall=4+2+64+2+6+2+8+3=1225=0.48recall=\frac{4+2+6}{4+2+6+2+8+3}=\frac{12}{25}=0.48recall=4+2+6+2+8+34+2+6​=2512​=0.48

precision=4+2+64+2+6+9+1+3=1225=0.48precision=\frac{4+2+6}{4+2+6+9+1+3}=\frac{12}{25}=0.48precision=4+2+6+9+1+34+2+6​=2512​=0.48


以及Weighted情况下:
我们首先计算出三个类别的样本比例:
样本总数目:TP猫+FN猫+TP鱼+FN鱼+TP鸡+FN鸡TP_{猫}+FN_{猫}+TP_{鱼}+FN_{鱼}+TP_{鸡}+FN_{鸡}TP猫​+FN猫​+TP鱼​+FN鱼​+TP鸡​+FN鸡​=4+2+2+8+6+3=25

猫占比 r猫r_猫r猫​:TP猫+FN猫TP猫+FN猫+TP鱼+FN鱼+TP鸡+FN鸡=625=0.24\frac{TP_{猫}+FN_{猫}}{TP_{猫}+FN_{猫}+TP_{鱼}+FN_{鱼}+TP_{鸡}+FN_{鸡}}=\frac{6}{25}=0.24TP猫​+FN猫​+TP鱼​+FN鱼​+TP鸡​+FN鸡​TP猫​+FN猫​​=256​=0.24

鱼占比 r鱼r_鱼r鱼​:TP鱼+FN鱼TP猫+FN猫+TP鱼+FN鱼+TP鸡+FN鸡=1025=0.4\frac{TP_{鱼}+FN_{鱼}}{TP_{猫}+FN_{猫}+TP_{鱼}+FN_{鱼}+TP_{鸡}+FN_{鸡}}=\frac{10}{25}=0.4TP猫​+FN猫​+TP鱼​+FN鱼​+TP鸡​+FN鸡​TP鱼​+FN鱼​​=2510​=0.4

鸡占比 r鸡r_鸡r鸡​:TP鸡+FN鸡TP猫+FN猫+TP鱼+FN鱼+TP鸡+FN鸡=925=0.36\frac{TP_{鸡}+FN_{鸡}}{TP_{猫}+FN_{猫}+TP_{鱼}+FN_{鱼}+TP_{鸡}+FN_{鸡}}=\frac{9}{25}=0.36TP猫​+FN猫​+TP鱼​+FN鱼​+TP鸡​+FN鸡​TP鸡​+FN鸡​​=259​=0.36
于是各个指标就是加权求和了:
acc=acc猫×r猫+acc鱼×r鱼+acc鸡×r鸡acc=acc_猫\times r_猫+ acc_鱼 \times r_鱼+ acc_鸡 \times r_鸡acc=acc猫​×r猫​+acc鱼​×r鱼​+acc鸡​×r鸡​=0.560.24+0.640.4+0.76*0.36=0.664

recall=recall猫×r猫+recall鱼×r鱼+recall鸡×r鸡recall=recall_猫\times r_猫+recall_鱼 \times r_鱼+ recall_鸡 \times r_鸡recall=recall猫​×r猫​+recall鱼​×r鱼​+recall鸡​×r鸡​=0.660.24+0.200.4+0.66*0.36=0.476

precision=precision猫×r猫+precision鱼×r鱼+precision鸡×r鸡precision=precision_猫\times r_猫+ precision_鱼 \times r_鱼+ precision_鸡 \times r_鸡precision=precision猫​×r猫​+precision鱼​×r鱼​+precision鸡​×r鸡​=0.30760.24+0.660.4+0.66*0.36=0.5754

其它

我们会看到上面这个例子里面,Micro-average下,多分类的accuracy,recall和precision会相同。这不是个例,而是多分类任务下,micro-average指标的常态。

这是因为在多分类里面,micro-average情况下,recall和precision的计算公式为:
Recall=∑i=1NTPi∑j=1NTPj+FNjRecall=\frac{\sum_{i=1}^{N}TPi}{\sum_{j=1}^N TP_j+FN_j}Recall=∑j=1N​TPj​+FNj​∑i=1N​TPi​
Precision=∑i=1NTPi∑j=1NTPj+FPjPrecision=\frac{\sum_{i=1}^{N}TPi}{\sum_{j=1}^N TP_j+FP_j}Precision=∑j=1N​TPj​+FPj​∑i=1N​TPi​
其中∑j=1NFNj\sum^N_{j=1}FN_j∑j=1N​FNj​含义为所有类别里面,把【本属于自己类】的样本错误的识别为其他类别的样本数之和;∑j=1NFPj\sum^N_{j=1}FP_j∑j=1N​FPj​含义为所有类别里面,把【不属于自己类】的样本错误的识别为本类的样本数之和。

假设样本xxx的正确类别为yry_ryr​,但是预测的类别为ypy_pyp​,且yr≠ypy_r\neq y_pyr​​=yp​。
毫无疑问,对于类别yry_ryr​来说,它被错误的识别为其他类了,因此这个样本会被统计到∑j=1NFNj\sum^N_{j=1}FN_j∑j=1N​FNj​里面去。
同时对于类别ypy_pyp​来说,这个样本也会一样统计到∑j=1NFPj\sum^N_{j=1}FP_j∑j=1N​FPj​,因为它是属于把本不是ypy_pyp​类的样本错误的识别为ypy_pyp​类了。
因此对所有类别求和以后,即有:∑j=1NFNj\sum^N_{j=1}FN_j∑j=1N​FNj​=∑j=1NFPj\sum^N_{j=1}FP_j∑j=1N​FPj​。

同时注意到,对于每个样本xxx,其预测结果与真实标签之间只存在相等于不相等的关系。如果yr≠ypy_r\neq y_pyr​​=yp​ 那么这个样本会被统计进∑j=1NFPj\sum^N_{j=1}FP_j∑j=1N​FPj​ 或者∑j=1NFNj\sum^N_{j=1}FN_j∑j=1N​FNj​;如果yr=ypy_r=y_pyr​=yp​,那么这个样本会被统计进 ∑j=1NTPj\sum^N_{j=1}TP_j∑j=1N​TPj​,因此统计量∑j=1NTPj+FNj\sum^N_{j=1}TP_j+ FN_j∑j=1N​TPj​+FNj​其实也等于样本总数;

而accuracy=∑i=1NTPi总样本数accuracy=\frac{\sum_{i=1}^{N}TPi}{总样本数}accuracy=总样本数∑i=1N​TPi​。因此,Micro-average平均下,多分类的accuracy,recall和precision其实是一致的。而这也是为什么sklearn里面classification_report在输出的时候,没有micro-average,只有accuracy,macro-average和weighted-average的结果。其实,第一行的accuracy就把micro-average下的三个值都显示出来了,因为precision,recall都是和accuracy相等的。

多分类条件下分类指标:Macro-average和Micro-average,以及Weighted-average相关推荐

  1. 深度孪生自注意力网络:小样本条件下的多维时间序列分类

    深度孪生自注意力网络:小样本条件下的多维时间序列分类 引言 1 相关基础 1.1 孪生神经网络 1.2 自注意力网络 2 深度孪生自注意力网络 2.1 动机 2.2 实现 2.3 验证 3 结论 4 ...

  2. 深度学习分类任务常用评估指标

    摘要:这篇文章主要向大家介绍深度学习分类任务评价指标,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 本文分享自华为云社区<深度学习分类任务常用评估指标>,原文作者: ...

  3. 不平衡多分类问题模型评估指标探讨与sklearn.metrics实践

    我们在用机器学习.深度学习建模.训练模型过程中,需要对我们模型进行评估.评价,并依据评估结果决策下一步工作策略,常用的评估指标有准确率.精准率.召回率.F1分数.ROC.AUC.MAE.MSE等等,本 ...

  4. sklearn多分类准确率评估分类评估分类报告评估指标 案例

    20211101 深思熟虑之后,研究团队确定了两种评估尺度:价格下降查全率(PDR)和预定反悔率(BR).我们曾统计过,某间房间是否在某天被预定出去,以及预定的价格是多少.PDR和BR都能反映出这一点 ...

  5. 二分类最优阈值确定_分类问题的评估指标一览

    前言 最近分类问题搞的有点多,但对一些指标依旧有模糊的地方(虽然做了笔记), 事实证明, 笔记笔记,没有进到脑子里呀. 因此,我想着肯定有跟我一样半生半熟的小伙伴在分类指标这块依旧有迷惑,毕竟常用的几 ...

  6. 分类、推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure) /(F-score)

    分类.推荐系统评测指标-准确率(Precision).召回率(Recall).F值(F-Measure) /(F-score) 1.准确率与召回率(Precision & Recall) 准确 ...

  7. auuc 评估指标_分类之性能评估指标

    本文主要介绍几种常用的用于分类的性能评估指标,同时介绍如何绘制ROC曲线以及计算AUC值的便捷方法.最后再附上一个绘制ROC曲线和计算AUC的Python源码实现. Precision和Recall ...

  8. Python多分类问题下,micro-PR计算以及macro-PR计算

    Python多分类问题下,micro-PR计算以及macro-PR计算 #二分类的Precision和Recall计算公式 在普通的二分类问题中通过混淆矩阵可以轻松地计算出来Precison和Reca ...

  9. 面向6G网络自动化的知识驱动可解释人工智能(XAI);基于汽车事件数据的脉冲神经网络目标检测;对称分类方案下波导阵列中的BIC;PreMovNet:基于运动前脑电的抓取和提举手运动学估计

    可解释的机器学习 中文标题:面向6G网络自动化的知识驱动可解释人工智能(XAI) 英文标题:Knowledge-powered Explainable Artificial Intelligence ...

最新文章

  1. 从源码角度解析Android中APK安装过程
  2. Python编程专属骚技巧6
  3. 记:第一次更新服务器CUDA和GPU驱动
  4. 1.7 编程基础之字符串 25 最长最短单词 python
  5. Char05 Ansible 最佳实践
  6. 验证码的旋转与放缩代码
  7. 自动驾驶1-5: 感知要求Requirements for Perception
  8. 超参数调整——网格搜索
  9. LMC555定时器延时测试
  10. 2023年CFA一级notesbook1+quicksheet(高清)
  11. hex(base16)、base32、base64三种编码方式区别
  12. 前台离岗提示语_酒店前台温馨提示语
  13. volatile修饰变量java_volatile 关键字(修饰变量)
  14. 成熟FOC电机控制代码 可用于电动自行车,滑板 车,电机FOC控制等
  15. Ubuntu高分屏下Matlab工具栏字体过小
  16. 闲话乱侃——26字母软件开发语言命名是否用完了?
  17. Android studio UML建模
  18. 人工智能课程期末总结
  19. nginx服务器的文档根目录,nginx更改根目录
  20. 关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述

热门文章

  1. 亚马逊、速卖通、Lazada、阿里国际站测评自养号教程(卖家篇)
  2. 鼠标的工作原理,鼠标是如何定位的,DPI的作用
  3. Java静态多态和动态多态
  4. 当双十一的广告强行闯入生活
  5. 区块链不是唯一的依靠点,网贷平台将如何自我革新?
  6. C#请写出代码判断一个整数是不是2的幂次方
  7. windows下mysql 自定义函数 之http 实操
  8. 筑智建——重庆发布《房屋建筑和市政基础设施工程竣工联合验收管理办法》
  9. 日语的计算机词汇,常用日语计算机词汇~~
  10. 一键生成 PPT,斯坦福博士生自制PPT生成神器火了