模型评估:Accuracy、Precision、Recall、F1、ROC曲线、AUC、PR曲线

在这里插入图片描述

Accuracy & Precision & Recall & F1

准确率 Accuracy

A c c u r a c y = T T + T F A L L Accuracy = \frac{TT + TF}{ALL} Accuracy=ALLTT+TF

1.分类器到底分对了多少?
在这里插入图片描述

精确率 Precision

2.返回的图片中正确的有多少?
在这里插入图片描述

召回率 / 查全率 Recall

3.有多少张应该返回的图片没有找到?
这个问题可以通过Recall值来体现(因为Recall值 = 1 - 有多少张应该返回的图片没有找到 / 应该返回的图片总数,该公式中除了"有多少张应该返回的图片没有找到"的值是变量以外,其它均为常数)

召回率代表“本应返回的照片中,实际返回了多少”

Recall为返回的图片中汉堡的图片的数目 / 测试集样本中所有汉堡的图片的数目。
在这里插入图片描述

F1值

在这里插入图片描述
由上图可以看出(召回率100%的情况下精确率非常低):不能一味地要求召回率高,也不能一味地要求精确率高。否则会导致另一个值相对较低。因此此时我们就提出了一个新的值——F1值
在这里插入图片描述

总结

二分类:
在这里插入图片描述

多分类

在这里插入图片描述

  • 准确率 A c c u r a c y = 所有的绿色求和 A L L Accuracy = \frac{所有的绿色求和}{ALL} Accuracy=ALL所有的绿色求和
  • 精确率往往单独看每一类,比如C6, P r e c i s i o n = C 6 的这个绿色 C 6 整一行样本总数 Precision = \frac{C6的这个绿色}{C6整一行样本总数} Precision=C6整一行样本总数C6的这个绿色
  • 召回率同上, R e c a l l = C 6 的这个绿色 C 6 整一列样本总数 Recall = \frac{C6的这个绿色}{C6整一列样本总数} Recall=C6整一列样本总数C6的这个绿色
  • F1值是精确率和召回率的调和平均

如上,可以求出每一类的Precision、Recall、F1
如果想知道整体的Precision、Recall、F1,可以直接求平均或者求加权平均
实际上刚才求的是宏观macro的Precision、Recall、F1,相应地,我们也可以求微观micro的Precision、Recall、F1:
针对每一类,都有TP、FP、TN、FN。若要求整个模型的TP,可以把每一类的TP都加起来。这样就得到了针对整个模型的TP、FP、TN、FN。再套入公式,就可以得到微观micro的Precision、Recall、F1
注意如果模型针对一个输入只返回一个label,也就是说一个输入只能对应一个类别的话,这样求出的微观micro的Precision、Recall、F1都会是相等的,且都等于Accuracy

ROC曲线 & AUC值

这个视频里举的例子基于 逻辑回归,但RPC & AUC应用范围不止如此
在这里插入图片描述
y轴表示老鼠是否肥胖,x轴表示老鼠的体重
使用逻辑回归曲线对数据进行拟合的结果如上图

当我们进行逻辑回归时,y轴被转换为老鼠肥胖的概率。如下图:
在这里插入图片描述
如果现在有一只很重的老鼠,那么曲线会告诉我们这只老鼠肥胖的概率很高,如下图:
在这里插入图片描述
所以这个逻辑回归告诉我们:基于老鼠的重量,它们肥胖的概率。如下图
在这里插入图片描述
然而,如果我们想把老鼠归类为肥胖或者不肥胖,那么我们需要一种方法将概率转化为分类

对小鼠进行分类的一种方法是将阈值设置为0.5,把所有肥胖概率大于0.5的老鼠归类为肥胖,并将所有肥胖概率小于等于0.5的老鼠归类为非肥胖

为了来评估这个分类阈值为0.5的逻辑回归模型的效果,我们可以用已知肥胖或非肥胖的老鼠做测试:如下图:
这是四只已知非肥胖的新老鼠的重量,以及这是四只已知肥胖的新老鼠的重量
在这里插入图片描述
现在我们创建一个混淆矩阵confusion matrix来总结分类的结果,如下图
在这里插入图片描述
如下图,完成了混淆矩阵之后,我们可以计算敏感性和特异性,来评估这个肥胖阈值为0.5的逻辑回归模型
在这里插入图片描述
现在,当我们使用不同的阈值来决定样本是否肥胖时会发生什么?

比方说,正确分类每个真正肥胖的样本非常重要,我们可以将阈值设置为0.1:
这将导致四只肥胖老鼠都被正确分类,但是这也会增加假阳性的数量。较低的阈值,也会减少假阴性的数量

注意如果使用不是0.5的阈值的想法让你大吃一惊:想象一下现在我们不再将样本分类为肥胖或不肥胖,而是将其归类为感染了埃博拉病毒或没有感染埃博拉病毒。在这种情况下,正确分类每个感染埃博拉病毒的样本是绝对重要的。这样才能将病毒爆发风险降至最低,即使这会导致更多的假阳性

阈值可以设置为0到1之间的任何值,我们如何确定哪个阈值是最好的呢?
首先,我们不需要测试每一个选项:例如,这些阈值会产生完全相同的混淆矩阵
但即使我们对每个重要的阈值都计算一个混淆矩阵,这也将导致令人头疼的大量混淆矩阵
所以与其被混淆矩阵弄得不知所措,

Receiver Operator Characteristic Curve

接收者操作特性receiver operator characteristic(ROC)图graphs 提供了一种简单的方法来总结所有信息
y轴显示真阳性率,也就是敏感性。真阳性率 = 真阳性 / (真阳性 + 假阴性)
因此y轴告诉你被正确归类为肥胖的样本比例
在这里插入图片描述
x轴表示假阳性率,等于1-特异性
假阳性率 = 假阳性 / (假阳性 + 真阴性)
因此x轴告诉你多大比例的非肥胖样本被错误地分类
在这里插入图片描述
为了更好地了解ROC是如何运作的:
我们将从使用将所有样本归类为肥胖的阈值开始,首先得到如下这个混淆矩阵
在这里插入图片描述
现在来提高阈值,使得除了最轻的样本之外,所有的样本都被归为肥胖,得到如下的混淆矩阵
在这里插入图片描述
在这里插入图片描述
继续提高阈值,所以除了俩个最轻的样本之外,所有样本都被称为肥胖
在这里插入图片描述
在这里插入图片描述
如上图,新的点在绿色虚线的左边还要远的地方,这表明新的阈值进一步减少了被错误归类为肥胖的样本比例,也就是说新的阈值是目前为止最好的一个

继续提高阈值,
在这里插入图片描述
并绘制其点,如下图
在这里插入图片描述
继续提高阈值,
在这里插入图片描述
在这里插入图片描述
如上图,新点表示的阈值正确分类75%的肥胖样本和100%非肥胖的样本。
换句话说,这个阈值不会导致假阳性

继续提高阈值,
在这里插入图片描述
最后我们选择一个阈值使得所有样本都被归类为非肥胖

我们可以把这些点联系起来,这给了我们一个ROC图,如下图
ROC图总结了由每个阈值产生的所有的混淆矩阵,且无需盘点每个混淆矩阵就能看出某个阈值比另一个阈值更好
且这个ROC的最佳阈值就在两个点中产生
在这里插入图片描述

Area Under the Curve

接下来谈谈 曲线下面积AUC(Area Under the Curve)
AUC使比较两条ROC曲线变得容易
这里红色的AUC是0.9
红色ROC曲线的AUC大于蓝色ROC曲线的AUC,说明红色曲线更好。所以如果红色ROC曲线代表逻辑回归,蓝色的ROC曲线代表一个随机森林模型,你将使用逻辑回归
在这里插入图片描述
虽然ROC图的绘制使用了真阳性率和假阳性率来总结混淆矩阵,还有其他指标可以做同样的事情
例如,人们经常把真阳性率替换为精确度
精确度 = 真阳性 / (真阳性 + 假阴性)
精确度表示多大比例的阳性样本被正确分类
在这里插入图片描述
如果相对于肥胖样本的数量,有很多非肥胖的样本。那么精确度可能比假阳性率更有用。这是因为精确度在其计算中不包括真阴性的数量,并且不受不平衡数据的影响
在实践中,这种数据不平衡会发生在研究一种罕见疾病时,在这种情况下,这项研究将包含更多没有疾病的人,相比于有疾病的人
在这里插入图片描述
概括地说,
当设置不同阈值时,可以得到不同混淆矩阵,而每个混淆矩阵对应一个TPR值和FPR值。如果把所有的TPR值和FPR值映射到一个二维空间中,然后把这些点连起来,就可以得到ROC曲线
ROC曲线使得用于做决定的最佳阈值变得容易。AUC可以帮你决定哪种分类方法更好

ROC曲线 & AUC值

假设有一个分类器可以判断一张图片是否是汉堡,那么分类器会先计算这张图片是汉堡的概率,进而预测到底是否是汉堡

每个阈值会对应一个混淆矩阵

那么,有没有一种方法能把所有的混淆矩阵表示在同一个二维空间内呢?
——Receiver Operator Characteristic(ROC)曲线

对于一个混淆矩阵,可以求出TPR和FPR两个指标。如果把TPR作为y轴、FPR作为x轴,就可以把每个混淆矩阵和这个二维矩阵中唯一的一个点对应
在这里插入图片描述

判断哪个分类器效果更好?
TPR和FPR的分母,对于同一个数据集是固定不变的,
由于我们希望TP尽可能大、FP尽可能小,也就是说我们想要TPR尽可能大、FPR尽可能小
因此曲线越靠近左上角,效果越好

那么我们能否通过一个数值来看,而不是单纯通过图片呢?
——曲线与x轴的面积,也就是AUC值
AUC的值在0-1之间,越大越好

在这里插入图片描述

多分类

对于多分类,可以求得宏观macro和微观micro的AUC

求宏观macro AUC:
针对每一个类别都可以画一个ROC曲线,然后求出对应AUC值。然后对每一个类别的AUC求某种平均就得到了整个模型宏观的AUC值

求微观micro的AUC:
假设概率预测结果如下表所示,
例如样本1的真实类别为C1,样本2的真实类别为C3。
每行概率之和为1,因此我们可以得到一个经过转换的预测结果。可以根据这个表得到针对整个模型的ROC曲线,以及它对应的AUC值
在这里插入图片描述

ROC曲线 & PR曲线

现在如果我们用Precision值来代替前面ROC曲线中的TPR值,用Recall值来代替FPR值。并且将这些点连起来得到一个新的曲线,就是PR曲线,也就是Precision-Recall曲线
因为对于每一个混淆矩阵,都有唯一的TPR值-FPR值的数值对,也可以计算出唯一的Precision值-Recall值的数值对,所以可以说:每一个ROC曲线都有唯一的一个PR曲线与之对应,也就是它们之间可以相互转换,且是一一对应的

上一节中提到ROC曲线越靠近左上角效果越好
而对于PR曲线而言,因为是希望Precision和Recall值同时越大越好,所以 PR曲线越靠近右上角效果越好

ROC曲线与PR曲线的关系

ROC曲线与PR曲线有什么关系呢?
在这里插入图片描述
L1曲线 dominates L2 -> L1曲线上所有点都在L2曲线上方

证明上述结论:
在这里插入图片描述
在这里插入图片描述
得到了AB之间Precision、Recall值的关系后,再代入到PR曲线中:
就可以判断出在Precision中L1也dominatesL2
在这里插入图片描述

ROC曲线与PR曲线应用场景

ROC曲线与PR曲线分别在什么情况下使用?
在这里插入图片描述

如上图,根据定义可知, TPR值等于Recall值
因此这两个曲线最大的区别就是FPR值和Precision值
在这里插入图片描述
如上图,假设同一个数据集有两个分类器,因此两个分类器的TP值和FN值都是相同的
可以看出,当FP值不同时,Precision值更能反应两个分类器的差异

因此得出结论:
ROC曲线:对正负两类同样关心;
PR曲线:对正例更加关心

下面来更直观地看一个例子,极度不平衡的数据
从左边的ROC图看起来效果很好,但从右边的PR图看起来效果很差
在这里插入图片描述
(注意这里图片左下角错了,是493个负例)

如果我们更关心正类的预测结果,且数据非常不平衡时,我们应选用PR曲线而不是ROC曲线

AUROC & AUPR

(1)AUROC
AUROC即为area under ROC curve,意为ROC 曲线下面积。在前面有提到曲线越靠左上代表模型表现能力越好,代表着曲线的面积也越大,即AUROC数值越高模型表现能力越好。

(2) AUPR
AUPR 即为area under Precision-Recall curve,意为在横轴为Precision 纵轴为Recall所绘出的曲线,通常会希望Precision 及Recall都是高的,所以曲线越靠近右上代表模型表现能力越好,相同的AUPR数值越高代表模型能力也越好。

结语: 模型的好坏不单单只是看训练的准确率,更应该关注在模型的泛化能力,那以上的评估指标就相当的重要。

Reference

【官方双语】ROC & AUC 详细解释!
【小萌五分钟】机器学习 | 模型评估: 准确率 Accuracy 精确率 Precision 召回率 Recall F1值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

了解光耦合器输入输出关系---腾恩科技

光耦合器,也称为光隔离器,是电子电路中必不可少的元件,主要用于在隔离部分之间传输信号,同时防止电噪声或高压影响敏感元件。其独特的设计使它们能够在没有直接电接触的情况下,弥合不同电压域之间的差距。在本文中&…

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题

readeck 是一个内容中心,目前已支持中文翻译 这是本地化部署后的效果: 原命令为: docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…

LeetCode 热题 100之普通数组

1.最大子数组和 思路分析:这个问题可以通过动态规划来解决,我们可以使用Kadane’s Algorithm(卡登算法)来找到具有最大和的连续子数组。 Kadane’s Algorithm 的核心思想是利用一个变量存储当前的累加和 currentSum,并…

【高中生讲机器学习】22. 信息论基础:信息熵、交叉熵、相对熵

创建时间:2024-10-16 首发时间:2024-10-24 最后编辑时间:2024-10-24 作者:Geeker_LStar FIRST OF ALL!!! 2024.10.24!! 1024 快乐!!! 你好呀~这里是 Geeker_LStar 的人工…

IDEA初探:深入理解 Structure 功能

一、Structure - 类视图 Structure 是 IDEA 中的一个视图工具,它提供了对当前文件中结构元素的快速访问。通过 Structure,我们可以方便地查看和导航到代码中的各个部分,从而提高代码编辑和浏览的效率。 1.1 基本概念 Structure 视图以树形结…

Spring Boot:植物健康监测的智能先锋

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了植物健康系统的开发全过程。通过分析植物健康系统管理的不足,创建了一个计算机管理植物健康系统的方案。文章介绍了植物健康系统的系统分析部分&…

一文带你搞懂RabbitMQ 如何保证消息不丢失

RabbitMQ使用场景: 异步发送(验证码、短信、邮件)MySQL和Redis,ES之间的数据同步分布式事务削峰填谷 什么情况下消息容易丢失: 消息未到达交换机消息未到达队列队列中消息丢失消费者未接收到消息 解决消息丢失的方法…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植,肯定少不了在另一台pc或者服务器上进行环境的搭建,那么首先是要知道在已有的工程的代码中用到了哪些包,此时,如果是用人工去一个一个的代码文件中去查看调用了哪些包,这个工作甚是繁琐。…

js面试问题笔记(一)

一.热门js面试 1.简述同步和异步的区别? 同步: 浏览器访问服务器请求,用户看到页面刷新 ,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作 异步: 浏览器访问服务器请求,用户正常操作,浏览器后端进行请求,等请求完,页面不刷新,新内容也会出现,用户看到…

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中,为了软件使用整体色调看起来统一,一般顶部和底部的颜色需要铺满整个手机屏幕。因此,这篇帖子是介绍设置的方法,也是应用沉浸式效果。如下图:底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…

Grid View 网格视图

GoTo DevExpress Data Grid 数据网格 Grid View 网格视图 GridView 是默认的数据网格视图,它以传统的表格格式显示数据。View 将数据源记录呈现为行,将数据源字段呈现为列。数据值显示在各个单元格中。 以下文档包含有关此表格布局的主要元素的深入信…

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap (1)缩小锁…

vue文件转AST,并恢复成vue文件(适用于antdv版本升级)

vue文件转AST,并恢复成vue文件---antdvV3升级V4 vue文件转AST,重新转回原文件过程如何获取项目路径读取项目文件,判断文件类型分别获取vue文件 template js(vue2和vue3)处理vue 文件template部分处理vue script部分uti…

【线下+线上会议|国内外双会场】2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)-悉尼/郑州双会场

2024年第四届数字化社会与智能系统国际学术会议(DSInS 2024)-悉尼/郑州双会场 2024 4th International Conference on Digital Society and Intelligent Systems 会议官网:www.dsins.org 2024 4th International Conference on Digital Soc…

龙迅#LT89101 适用于 MIPI DSI/CSI摄像头和 LVDS 中继信号延长功能,分辨率可支持 1080P@60HZ!

1. 描述 Lontium LT89101 是一款高性能 MIPI DSI/CSI-2 和 LVDS 中继器,用于汽车系统应用的移动显示或摄像头信号整形。 LT89101采用先进的 CMOS 工艺制造,并采用小外形 7.5mm x 7.5mm QFN64 封装。该封装符合 RoHS 标准,额定工作温度范围为 …

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号,可以选择只下载 2. 进…

element 按钮变形 el-button样式异常

什么都没动,element UI的按钮变形了,莫名其妙,连官网的也变形了,换了其它浏览器又正常, 难道这是element UI的问题?NO,是浏览器的插件影响到了!去扩展插件里面一个个关闭扩展&#x…

MySql中的锁的分类

锁的分类 MySQL锁可以按模式分类为:乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁。按属性可以分为:共享锁、排它锁。按状态分为:意向共享锁、意向排它锁。按算法分为:间隙锁、临键锁、记录锁。 二、全局锁、表…

ClickHouse与各种组件的关系

ClickHouse和其他组件关系如下: Flink支持ClickHouse Sink支持Hive/SparkSQL数据批量导入ClickHouseHetuEngine支持ClickHouse数据源常用第三方工具如DBeaver支持ClickHouse对接ClickHouse依赖ZooKeeper实现了分布式DDL执行以及ReplicatedMergeTree表主备节点之间的…

多线程—— JUC 的常见类

目录 前言 一、Callable 接口 1.Callable 介绍 2.代码示例 3.创建线程的方式 二、ReentrantLock 类 1.ReentrantLock 介绍 2.代码示例 3.与 synchronized 的区别 三、信号量 Semaphore 类 1.Semaphore 介绍 2.代码示例 3.保证线程安全的方式 四、CountDownLatch …