文章来自:一个宝藏微信公众号【机器学习炼丹术】

基本概念

首先,要背住的几个概念就是:accuracy,precision,recal, TP,FP,TN,FN

  • TP:true positive。预测是正确的正样本
  • FP:false positive。预测是错误的正样本
  • TN:true negative。预测是正确的负样本
  • FP:false positive。预测是错误的负样本

通常我们会做出这样的一个混淆矩阵:



左边的positive,negative表示样本真实值,表格上边的positive,negative表示样本的预测结果。

现在我们有这样的一个例子:



图中的TP,FP等是一个比例,假设总共有100个样本,有40个是TP,有20个是FP……(不过混淆矩阵一般不用除以总样本数量)

现在我们有了\(TP=0.3,FP=0.1,TN=0.4,FN=0.2\)

准确率Accuracy

准确率是指,对于给定的测试数据集,分类器正确分类的样本书与总样本数之比,也就是预测正确的概率。

对应上面的例子,可以得到Accuracy=0.7。

【准确率Accuracy的弊端】

准确率作为我们最常用的指标,当出现样本不均衡的情况时,并不能合理反映模型的预测能力。例如测试数据集有90%的正样本,10%的负样本,假设模型预测结果全为正样本,这时准确率为90%,然而模型对负样本没有识别能力,此时高准确率不能反映模型的预测能力。

精确率Precision

表示预测为正的样本中,实际的正样本的数量。

对应上面的例子,\(precision=\frac{0.3}{0.3+0.1}=0.75\)。

【个人理解】

Precision是针对预测结果而言的。预测结果中,预测为正的样本中预测正确的概率。类似于一个考生在考卷上写出来的答案中,正确了多少。体现模型的精准度,模型说:我说哪个对哪个就是对的。

召回率Recall

Recall表示实际为正的样本被判断为正样本的比例



对应上述的例子,得到\(Recall=\frac{0.3}{0.3+0.2}=0.6\)

【个人理解】

Recall是针对数据样本而言的。数据样本中,正样本中预测正确的概率。类似于一个考生在考卷上回答了多少题。体现一个模型的全面性,模型说:所有对的我都能找出来。

F1 score

Precision和Recall是一对矛盾的度量,一般来说,Precision高时,Recall值往往偏低;而Precision值低时,Recall值往往偏高。当分类置信度高时,Precision偏高;分类置信度低时,Recall偏高。为了能够综合考虑这两个指标,F-measure被提出(Precision和Recall的加权调和平均),即:

F1的核心思想在于,在尽可能的提高Precision和Recall的同时,也希望两者之间的差异尽可能小。F1-score适用于二分类问题,对于多分类问题,将二分类的F1-score推广,有Micro-F1和Macro-F1两种度量。

【Micro-F1】

统计各个类别的TP、FP、FN、TN,加和构成新的TP、FP、FN、TN,然后计算Micro-Precision和Micro-Recall,得到Micro-F1。具体的说,统计出来各个类别的混淆矩阵,然后把混淆矩阵“相加”起来,得到一个多类别的混淆矩阵,然后再计算F1score

【Macro-F1】

我感觉更常用的是Macro-F1。统计各个类别的TP、FP、FN、TN,分别计算各自的Precision和Recall,得到各自的F1值,然后取平均值得到Macro-F1

【总结】

从上面二者计算方式上可以看出,Macro-F1平等地看待各个类别,它的值会受到稀有类别的影响;而Micro-F1则更容易受到常见类别的影响。

参考:

[1]http://zjmmf.com/2019/08/13/F1-Score计算/

[2]https://zhuanlan.zhihu.com/p/49895905





【评价指标】详解F1-score与多分类MacroF1&MicroF1的更多相关文章

  1. Oracle-归档日志详解(运行模式、分类)

    一.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和            redo log 重做日志(记录数据库的更改 ...

  2. 撩课-Mysql详解第3部分sql分类

    学习地址:[撩课-JavaWeb系列1之基础语法-前端基础][撩课-JavaWeb系列2之XML][撩课-JavaWeb系列3之MySQL][撩课-JavaWeb系列4之JDBC][撩课-JavaWe ...

  3. 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏

    C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...

  4. Java IO详解(二)------流的分类

    一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中      输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内 ...

  5. ZT --- extern "C"用法详解 2010-08-21 19:14:12

    extern "C"用法详解 2010-08-21 19:14:12 分类: C/C++ 1.前言: 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus ...

  6. 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)

    [详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...

  7. linux查看端口及端口详解

    今天现场查看了TCP端口的占用情况,如下图   红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...

  8. linux下压缩与解压(zip、unzip、tar)详解

    linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...

  9. 【转】DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10

    [转]DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10 分类: Linux 由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至 ...

随机推荐

  1. 表达式计算开源组件(NCalc.NetCore)

    首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序.NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数. 官网地址:http://ncalc.codeplex. ...

  2. 初探RabbitMQ消息队列

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  3. 一周学会linux实战笔记

    山篇 思考------实践-------再思考-------再实践 1.高效愉快地学习 2.先建立一个整体框架,然后细节 3.用的什么再学习什么 4.先know how,再know why 5.计算机 ...

  4. 深入了解JVM-方法区

    本文首发于微信公众号[猿灯塔],转载引用请说明出处 今天呢!灯塔君跟大家讲: 深入了解JVM-方法区 当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最 ...

  5. 常见的H5移动端Web页面Bug问题解决方案总汇

    解决jquery ajax调用远程接口的跨域问题 首先,接口必须允许远程调用.这是后端或者运维的事情.你必须保证你得到的一个接口是允许远程调用的.否则,就没啥了. $.ajax({ type:'get ...

  6. [Mybatis]Mybatis常用操作

    Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...

  7. 怎么查看HBase表的创建时间

    前几天HBase出现了RIT告警,忽然发现发出告警的Region所属的表并不是我创建出来的,于是就想看看这些表是怎么来的. 一时也没什么头绪,就先看看这些表是什么时候创建出来的吧,然后再根据时间点看看 ...

  8. java 面向对象(一):类与对象

    1.面向对象学习的三条主线: * 1.Java类及类的成员:属性.方法.构造器:代码块.内部类 * * 2.面向对象的大特征:封装性.继承性.多态性.(抽象性) * * 3.其它关键字:this.su ...

  9. javascript基础(五): jQuery

     jQuery javaScript和jQuery的关系? jQuery库,里面存在大量的JavaScript函数 获取jQuery 公式:$(selector).action() <!DOCT ...

  10. 李航统计学习方法(第二版)(十):决策树CART算法

    1 简介 1.1 介绍 1.2 生成步骤 CART树算法由以下两步组成:(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;(2)决策树剪枝:用验证数据集对己生成的树进行剪枝并选择最优子 ...