根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释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. CodeMirror动态修改代码(关键: editor.getDoc().setValue(data); editor.refresh();)

    在使用codemirror时,其原理是根据form中的textarea标签,自动加载其内容,获得代码行的显示.(具体使用方式参见 codemirror官网使用手册 http://codemirror. ...

  2. 27_MySQL数字函数(重点)

    /* SALES部门中工龄超过20年的,底薪增加10% SALES部门中工龄不满20年的,底薪增加5% ACCOUNTING部门,底薪增加300元 RESEARCH部门里低于部门平均底薪的,底薪增加2 ...

  3. SQL EXPLAIN解析

    本文转载自MySQL性能优化最佳实践 - 08 SQL EXPLAIN解析 什么是归并排序? 如果需要排序的数据超过了sort_buffer_size的大小,说明无法在内存中完成排序,就需要写到临时文 ...

  4. JS语法-ES6

    1.介绍 ECMAScript 6简称ES6,是JavaScript语言的下一代标准. 2.常用属性及方法 2.1常量与变量的定义 在JavaScript中,我们一般使用var来定义变量,实际上它是有 ...

  5. 基于【腾讯云函数】/【GitHub Actions】/【Docker】的每日签到脚本(支持多账号使用)

    每日签到集合 基于[腾讯云函数]/[GitHub Actions]/[Docker]的每日签到脚本 支持多账号使用 特别声明: 本仓库发布的脚本及其中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究 ...

  6. jar下载慢,maven配置国内仓库

    使用 maven 下载 jar 包速度会很慢,原因是 maven 默认的仓库地址是国外的,所以速度很慢,解决这个问题我们只需要修改 maven 仓库地址即可 maven 下载 jar 包时会优先去 ~ ...

  7. Vuex理解与使用

    1.Vuex是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,用于管理页面的数据状态.提供统一数据操作的生态系统.在组件中可以任意获取仓库中的数据.和Vuex类似的还有redux ...

  8. uniapp封装uni.request请求

    封装一个uniapp请求 新建一个http.js文件封装uni.request const BASE_URL = process.env.NODE_ENV === 'development' ? '' ...

  9. POJ-3159(差分约束+Dijikstra算法+Vector优化+向前星优化+java快速输入输出)

    Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include< ...

  10. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...