根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释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. JVM 揭秘:一个 class 文件的前世今生

    本文转载自JVM 揭秘:一个 class 文件的前世今生 导语 引子:我们都知道,要运行一个包含 main 方法的 java 文件,首先要将其编译成 class 文件,然后加载 JVM 中,就可以运行 ...

  2. MySQL学习笔记(五)

    倒数第二天!冲冲冲!!! 一.索引 一个表里面可以有多个索引. 1. 索引的作用:约束与加速查找 无索引:从前到后依次查找 有索引:会为索引列创造一个额外文件(以某种格式存储).在使用索引进行查找时, ...

  3. cocos2dx创建工程

    p.p1 { margin: 0; font: 17px "Helvetica Neue"; color: rgba(69, 69, 69, 1) } 官网镇楼: http://w ...

  4. GetQueuedCompletionStatus客户端前端和server之间的通信

    项目中遇到了这个东西,怎么都调试不到.记录下. 一.完成端口IOCP https://www.cnblogs.com/yuanchenhui/p/iocp_windows.html

  5. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  6. c++指针类型的函数

    下面随笔将讲述c++指针类型的函数. 原创链接:https://www.cnblogs.com/iFrank/p/14444379.html 指针类型的函数 若函数的返回值是指针,该函数就是指针类型的 ...

  7. 11. webpack配置Vue

    一. 在webpack中配置vue 了解了webpack的原理和用法以后, 我们来引入Vue webpack原理和用法详解链接: cnblogs.com/ITPower/p/14467745.html ...

  8. js导出execl 兼容ie Chrome Firefox各种主流浏览器(js export execl)

    第一种导出table布局的表格 1 <html> 2 3 <head> 4 <meta charset="utf-8"> 5 <scrip ...

  9. Semaphore实战

    简介 Semaphore信号量计数器.和CountDownLatch,CyclicBarrier类似,是多线程协作的工具类,相对于join,wait,notify方法使用起来简单高效.下面我们主要看看 ...

  10. 番外----python入门----关于pycharm

    江湖上有句话叫 "武林至尊,宝刀屠龙,号令天下,莫敢不从,倚天不出,谁与争锋". 今天,我们就来介绍一下,python编程界的"屠龙刀",pycharm. 一. ...