机器学习--Micro Average,Macro Average, Weighted Average
根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释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+PrecesionB + PrecesionC + PrecesionD )/4 = 0.675
对于Macro Recall采用同样的计算方法,RecallA = 2/(2+2) = 0.5, RecallB = 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, F1D = 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的更多相关文章
- F1 score,micro F1score,macro F1score 的定义
F1 score,micro F1score,macro F1score 的定义 2018年09月28日 19:30:08 wanglei_1996 阅读数 976 本篇博客可能会继续更新 最近在 ...
- Micro和Macro性能学习【转载】
转自:https://datascience.stackexchange.com/questions/15989/micro-average-vs-macro-average-performance- ...
- 多分类评测标准(micro 和 macro)
- sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix)
1 accuracy_score:分类准确率分数是指所有分类正确的百分比.分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型.常常误导初学 ...
- python实现多分类评价指标
1.什么是多分类? 参考:https://www.jianshu.com/p/9332fcfbd197 针对多类问题的分类中,具体讲有两种,即multiclass classification和mul ...
- Android 下的EXIF
一.什么是Exif Exif(Exchangeable Image File 可交换图像文件)是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了 ...
- Average Cost (AVCO) Method
http://accountingexplained.com/financial/inventories/avco-method Average Cost (AVCO) Method Aver ...
- signals function|KNN|SVM|average linkage|Complete linkage|single linkage
生物医疗大数据 存在系统误差使得估计量有偏,如下图红色和蓝色图形,存在随机误差使得估计量并不是同一个值,如图中除去期望之外的曲线值,为了控制随机抽样造成的误差,可以使用p-value决定是否服从假设检 ...
- Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)
在Linq中有一些这样的操作,根据集合计算某一单一值,比如集合的最大值,最小值,平均值等等.Linq中包含7种操作,这7种操作被称作聚合操作. 1.Count操作,计算序列中元素的个数,或者计算满足一 ...
随机推荐
- 直播预告 | 全面的审计分析和权限管控——CloudQuery年终发布!
2020年9月,CloudQuery 发布. 针对开发.运维人员面临的如何高效便捷访问.操作管理数据的问题,我们设计并研发了云原生安全数据操作平台,CloudQuery 就此诞生! 2020年结束之际 ...
- Python算法_整数反转(02)
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321 示例 3: 输入: 120 输出: 2 ...
- Yarn框架的一般过程
基本过程图: Clinet向ResouceManager发送Job请求 ResouceManager接受到请求后在自身开启一个Container 来运行的ApplicationManager组件,Ap ...
- Vue学习笔记-VSCode安装与配置
一 使用环境: windows 7 64位操作系统 二 VSCode安装与配置 1.下载: https://code.visualstudio.com 直接点击即可. 2. 点击按装程序,默认安 ...
- 小公举comm,快速比较两个排序文件
前言 我们经常会有需求比较一个文件里的内容是否在另一个文件存在.假如我有一份监控列表的IP写入在了file1,我所有的机器IP写入在了file2,我要找出还有哪些机器没有在监控列表.以前的做法是写个两 ...
- 如何理解JavaScript中的函数
转: 如何理解JavaScript中的函数 JS中的函数简介 JS中的函数是一种通过调用来完成具体业务的一段代码块.最核心的目的是将可重复执行的操作进行封装,然后供调用方无限制的调用. JS中的函数的 ...
- 剑指 Offer 59 - II. 队列的最大值--滑动窗口的建模+Deque的基本使用(常用方法)
剑指 Offer 59 - II. 队列的最大值 题目链接 package com.walegarrett; /** * @Author WaleGarrett * @Date 2020/12/3 1 ...
- FreeBSD NGINX TCP转发
前几天搞转发,研究了下TCP转发,现在记录下来 首先加载模块 注意:这是FreeBSD的位置.并且需要NGINX支持 load_module /usr/local/libexec/nginx/ngx_ ...
- C语言入门-ide的概念介绍及codeblocks编辑器安装汉化
大家好,本章教程就ide(集成开发环境)来说一说. ide就是编译器+编辑器,原理就是在编辑器写代码,然后编辑器会让编译器来编译成二进制可执行文件. 常见的c/c++编译器有mingw64,msvc, ...
- renren-fast部署发布教程(tomcat)
renren-fast部署发布教程(tomcat) 说明:renren的开发文档需要付费,官方的生产部署介绍相对比较简单,因此记录自己的部署过程 为了方便,前后端我都部署在同一台linux服务器上,其 ...