根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释Micro Average,Macro Average,Weighted Average.这三者常用于多分类任务,他们的计算方法有细微的差别,因此在各自表示的含义和适用场景上也有细微的差别

Micro Average

Micro Average会考虑到所有类别的贡献.举个例子, 假设我们有四个类A,B,C,D. 通过模型预测得到了预测值:

真实值:A, A, A, A, B, B, B, B, B, C, C, C, C, D, D, D,

预测值:A, A, C, B, B, B, B, A, D, C, C, A, D, D, D, C

根据预测值和真实值,对每个类计算出(TPi),假正例(FPi), 假反例(FNi),  i表示第i个类.不了解真正例假反例的可以看我这篇博客机器学习--如何理解Accuracy, Precision, Recall, F1 score

  Class A Class B Class C Class D
TP 2 3 2 2
FP 2 1 2 2
FN 2 2 2 1

首先计算MIcro Precesion, 计算公式如下

对于我们的例子,真正例就是被预测正确的样本有2+3+2+3 = 10, 接下来计算假反例.采用one vs rest 方法,对于类i (i = A,B,C,D),属于i的样本被标记为正,不属于i的样本被标记为负.那么对于类i来说一个假正例意味着一个属于类 j (j≠i)的样本被错误的预测为i. 比如说样本属于类A但被错误的预测为类B,那么对于类B而言,这个预测就是一个假正例.所以一个假反例就意味着一个错误的预测值,总的假反例就是总的错误的预测值.在我们的例子中FP = 2+2+0+2 = 6, 所以Micro Precesion = 10/(10+6)=0.625.

下面计算Micro Recall, 真正例依旧有10例,接下来计算假正例,同样采用one vs rest 方法,对于类i (i = A,B,C,D),一个假反例意味着一个属于类i的样本被错误的预测为类j (j≠i).  比如说样本属于类A但被错误的预测为类B,那么对于类A而言,这个预测就是一个假反例.更为一般的,一个错误的预测值(A被错误的预测为B),对于B而言是一个假正例,对于A而言是一个假反例.因此总的假反例也就是总的错误的预测值,所以Micro Recall = 10/(10+6)=0.625.

由上我们知道Micro Recall = Micro Precesion , 而 Micro F1 = (2* Micro Precesion*Micro Recall)/(Micro Precesion + Micro Recall),不难得出Micro Recall = Micro Precesion = Micro F1.

而且我们也能看出,上边求得的值也表示了分类器的精确度(Accuracy), 即被正确分类的样本占总的样本的比例.因此对于Micro F1而言右边的等式恒成立,Micro F1 = Micro Recall = Micro Precesion  = Accuracy

Macro Average

Macro Average会首先针对每个类计算评估指标如查准率Precesion,查全率 Recall , F1 Score,然后对他们取平均得到Macro Precesion, Macro Recall, Macro F1. 具体计算方式如下:

首先计算Macro Precesion,先计算每个类的查准率,再取平均: PrecesionA=2/(2+2) = 0.5, PrecesionB=3/(3+2) = 0.6, PrecesionC=2/(2+0) = 1, PrecesionD=3/(3+2) = 0.6,  Macro Precesion = (PrecesionA+Precesion+ Precesion+ Precesion)/4  = 0.675

对于Macro Recall采用同样的计算方法,RecallA = 2/(2+2) = 0.5, Recall= 3/(3+2) = 0.6, RecallC = 2/(2+2)=0.5 , RecallD =2/(2+0) = 1, Macro Recall = (RecallA+RecallB+RecallC+RecallD)/4 = 0.65

最后计算 Macro F1,  F1A = 0.5, F1B = 0.6, F1C = 0.67, F1= 0.75, Macro F1 = (F1A+F1B+F1C+F1D)/4 = 0.63.

Weighted Average

从计算的角度讲,先对每个类求值,再取平均得到Macro Average会比较容易.但是当数据集中存在严重类别不平衡的问题时,就不适宜单纯使用Macro Average.此时可以采取weighted average. 具体来说当我们计算Macro Average时候我们给每个类赋予相同的权重,但是当样本不平衡时,不适宜给每个类赋予同样的权重,我们可以根据每个类的样本量,给每个类赋予不同的权重,这就是weighted average的计算方法.在我们的例子中一共有16个样本,其中A类有4个,B类有5个,C类有4个,D类有3个,那么

weighted-F1 = (4*0.5+5*0.6+4*0.67+3*0.75)/16 = 0.618

weighted-Precesion = (4*0.5+5*0.6+4*1+3*0.6)/16 = 0.675

weighted-Recall = (4*0.5+5*0.6+4*0.5+3*1)/16 = 0.625

注意事项

当我们在使用F1的时候要注意,它对Precesion 和Recall赋予相同的权重.但在实际应用中我们需要从给定的问题出发,考虑Precesion 和Recall的哪一个更重要.比如把一个患病的人误诊为健康人所带来的后果远比把一个健康人误诊为患病造成的后果要严重.这个事实就应该反映在权重和代价损失函数上,进而帮助我们选出最佳分类器.二分类问题是这样,多分类问题就更为复杂.在多分类情况下,不同的预测误差可能具有不同的含义,比如说将X预测为Y比将W预测为R产生更高的代价.而标准的F1是不会考虑这些事情,因此我们需要针对特定的问题选择合适的模型性能衡量指标.

reference  Multi-Class Metrics Made Simple, Part II: the F1-score--Boaz Shmueli

机器学习--Micro Average,Macro Average, Weighted Average的更多相关文章

  1. F1 score,micro F1score,macro F1score 的定义

    F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976   本篇博客可能会继续更新 最近在 ...

  2. Micro和Macro性能学习【转载】

    转自:https://datascience.stackexchange.com/questions/15989/micro-average-vs-macro-average-performance- ...

  3. 多分类评测标准(micro 和 macro)

  4. sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix)

    1 accuracy_score:分类准确率分数是指所有分类正确的百分比.分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型.常常误导初学 ...

  5. python实现多分类评价指标

    1.什么是多分类? 参考:https://www.jianshu.com/p/9332fcfbd197 针对多类问题的分类中,具体讲有两种,即multiclass classification和mul ...

  6. Android 下的EXIF

    一.什么是Exif Exif(Exchangeable Image File 可交换图像文件)是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了 ...

  7. Average Cost (AVCO) Method

    http://accountingexplained.com/financial/inventories/avco-method   Average Cost (AVCO) Method   Aver ...

  8. signals function|KNN|SVM|average linkage|Complete linkage|single linkage

    生物医疗大数据 存在系统误差使得估计量有偏,如下图红色和蓝色图形,存在随机误差使得估计量并不是同一个值,如图中除去期望之外的曲线值,为了控制随机抽样造成的误差,可以使用p-value决定是否服从假设检 ...

  9. Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)

    在Linq中有一些这样的操作,根据集合计算某一单一值,比如集合的最大值,最小值,平均值等等.Linq中包含7种操作,这7种操作被称作聚合操作. 1.Count操作,计算序列中元素的个数,或者计算满足一 ...

随机推荐

  1. jetty的jndi

    jetty的jndi和tomcat的用法 tomcat的jndi是内置的,在web.xml文件里直接默认支持的,所有web项目可以直接使用 <resources> <!-- < ...

  2. django学习-21.优化表数据的标题展示

    目录结构 1.前言 2.表数据的标题默认展示的数据格式是[模型类名 object(主键名)]的相关信息 3.优化表数据的标题展示的数据格式是[改成我们想要展示的数据格式]的相关完整操作步骤 3.1.第 ...

  3. C++算法代码——选举学生会

    题目来自:https://www.luogu.com.cn/problem/P1271 题目描述 学校正在选举学生会成员,有 n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 ...

  4. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  5. Redis 日志篇:系统高可用的杀手锏

    特立独行是对的,融入圈子也是对的,重点是要想清楚自己向往怎样的生活,为此愿意付出怎样的代价. 我们通常将 Redis 作为缓存使用,提高读取响应性能,一旦 Redis 宕机,内存中的数据全部丢失,假如 ...

  6. MarkDown简单语法回顾

    写在前面: 本文是我的第一篇博客文章,希望与大家共同交流.分享我们热爱的技术,努力成为一名优秀的软件工程师! 进入正文 使用MarkDown记笔记已经有些时候了,编辑器是使用的sublime text ...

  7. Python基础语法函数

    函数是什么 Python中的函数与数学中的函数不同,它不再只是公式,而是实实在在有着自己特定功能的代码.其实在潜移默化中我们已经有所接触了. 比如print()函数,range()函数,type()函 ...

  8. HDOJ-2222(AC自动机+求有多少个模板串出现在文本串中)

    Keywords Search HDOJ-2222 本文是AC自动机的模板题,主要是利用自动机求有多少个模板出现在文本串中 由于有多组输入,所以每组开始的时候需要正确的初始化,为了不出错 由于题目的要 ...

  9. 太上老君的炼丹炉之分布式 Quorum NWR

    分布式系列文章: 1.用三国杀讲分布式算法,舒适了吧? 2.用太极拳讲分布式理论,真舒服! 3.诸葛亮 VS 庞统,拿下 Paxos 共识算法 4.用动图讲解分布式 Raft 5.韩信大招:一致性哈希 ...

  10. Reactive Spring实战 -- WebFlux使用教程

    WebFlux是Spring 5提供的响应式Web应用框架. 它是完全非阻塞的,可以在Netty,Undertow和Servlet 3.1+等非阻塞服务器上运行. 本文主要介绍WebFlux的使用. ...