机器学习 | 准确率、召回率、精准率、特异度傻傻分不清?ROC曲线怎么看?一篇文章帮你搞定

一、真正类、假负类、假正类与真负类 

二、准确率、召回率、精准率、特异度与假正率

1. 准确率 (Accuracy)

准确率表明成功预测(预测为负或为正)的结果占总样本的百分比。

准确率 = \frac{TP+TN}{TP+TN+FP+FN}

2. 召回率/查全率/灵敏度/真正率(Recall)

召回率(查全率),又叫灵敏度,真正率,表明所有原本为正的样本中被预测正确的结果的百分比。

召回率(查全率) =  \frac{TP}{TP + FN} = 灵敏度 = 真正率

帮助记忆:所有被感染(阳性)的患者都被检测出来,召回治疗。

提升召回率是为了不漏报。(如果自身为阳性的患者没有被检测出来及时治疗,就可能会将病毒传染给更多的人,很危险。)

3. 精准率(Precision)

精准率表示在所有预测为正的样本中预测正确的有多少。

精准率 = \frac{TP}{TP + FP},

帮助记忆:检验当前检测使用的标准(能够使检测呈现阳性的标准)有多少能精准地表示被检测者的确是小阳人。

提高精准率是为了不错报。(如果检验为阳性,其实没有感染的人很多,就会造成治疗成本和心理负担增加。)

4. 特异度(Specificity)

特异度表示在所有原本为负的样本中被预测正确的有多少。

特异度 = 真负率 = \frac{TN}{TN + FP} ,

帮助记忆:特异性越高,说明没有感染的病人不容易被误报,检测只针对特定(specific)情况才有阳性反应,即筛选能力强,或者说针对性强。 

5. 假正率(FPR)

假正率表示所有原本为负的情况中有多少是被预测错的。

假正率 = 1- 特异率 =  \frac{FP}{FP + TN}

假正率反映了虚报响应度,如明明没被感染却被检测为阴性。

三、ROC曲线

ROC曲线反映了在不同的阈值下的真正率(预测击中响应度)和假正率(虚报响应度)。

纵轴:真正率;横轴:假正率

ROC曲线如下图所示:

ROC由无数个点组成,每个点都代表着一个分类器,表示在当前阈值下TPR与FPR的值。

可以看到,ROC曲线过(1,1)(0,0),这两点分别代表着阈值为01的情况。

当阈值为0时,所有样本都不加以识别地被判断为正(一般假设高于阈值的样本为正,低于阈值的为负),因此TPR为1(TPR反映的是所有正样本被检测为正的有多少,在当前阈值下所有样本都为1,漏报的样本数FN为0,所以TPR = 1),FPR也为1(FPR反映了虚报响应度,既然所有样本,包括本来为负的那些都被标注为1,那么就不存在负的样本被预测对的情况,因此FN = 0,FPR = 1)。

当阈值为1,所有样本都不加以识别地被判断为负。因此不存在被判别对的正样本,TP = 0,TPR = 0。同样也不存在被误判为正的负样本(所有样本都被判别为负),FP = 0, FPR = 0。

如何判断ROC曲线的好快呢?可以从下面几个方面分析:

  1. 形状和凸度:ROC曲线应该是向左上方弯曲的,即靠近(0,1),这表示模型在保持高的真正率(TPR)的同时,尽量保持低的假正率(FPR)。曲线越靠近左上角,表示模型性能越好。

  2. 曲线下面积(AUC值):ROC曲线下的面积(AUC,Area Under the Curve)是评价分类器性能的重要指标之一。AUC的取值范围是0到1,值越大表示模型性能越好。AUC为1表示模型完美分类,AUC为0.5表示模型等同于随机猜测。

  3. 与对角线的关系:ROC曲线越远离对角线(45度直线),说明模型的性能越好。对角线上的点表示随机分类器的性能。

  4. 预测性能的可调性:ROC曲线上的每个点对应于分类器在不同阈值下的性能。一个好的ROC曲线应该展示出在不同阈值下模型的稳健性和预测性能。

  5. 业务应用背景:最终评判一条好的ROC曲线还需考虑具体业务场景。例如,某些场景对于高召回率(TPR)更为敏感,如在生命危险环境下,如火灾或自然灾害预警系统中,高TPR可以及时发现危险情况,保护生命安全。而在另一些场景中,则可能需要平衡召回率和假警报率,如欺诈检测系统来说,降低FPR尤为关键。高FPR可能会导致过多的正常交易被错误地标记为欺诈,从而影响客户体验和业务效率

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenTK:安装和说明

OpenTK介绍 OpenTK是一个开源、跨平台的游戏开发库,由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口,以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架,让开发者能够专注于…

联想小新PRO16 ARM-7换固态硬盘和装双系统win11和ubuntu2022.04

联想小新PRO16 ARM-7换固态硬盘和装双系统win11和ubuntu2022.04 前言 记录一下其中的好几个坑。耗时4天,新旧硬盘拆拆卸卸的不止二十次。希望能给各位一点帮助。 步骤 1. 买硬盘 查看电脑后壳的S\N号,在联想官网上查找自己电脑的相关信息:…

【无标题】场外个股期权多少钱才能做?个人能做吗?

场外个股期权的交易门槛相对较高,主要面向符合特定条件的机构投资者。一般来说,法人或合伙企业等组织参与的,需要满足最近1年末净资产不低于5000万元人民币、金融资产不低于2000万元人民币的条件,并具备3年以上证券、基金、期货、…

@mixins混用样式:示例:修改el-select里面的滚动条样式

项目场景: 使用混入样式修改el-select下拉菜单里面的滚动条样式 解决方案: // 混入-滚动条样式 mixin scroll-css {&::-webkit-scrollbar-track-piece {background: red;}&::-webkit-scrollbar {width: 6px;}&::-webkit-scrollbar-thumb {b…

供应链投毒预警:恶意Py包伪装HTTP组件开展CStealer窃密后门攻击

概述 近日(2024年4月25号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起CStealer窃密后门投毒事件,投毒者连续发布6个不同版本的恶意Py包multiplerequests,目标针对windo…

一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)

💡💡💡本文摘要:一种基于YOLOv8改进的高精度小目标检测算法, 在红外小目标检测任务中实现暴力涨点; 💡💡💡创新点: 1)SPD-Conv特别是在处理低分…

Spring中实现策略模式的几种方式

Spring中实现策略模式的几种方式 一.背景 在写业务代码的时候,难免会遇到很多if-else,这个时候如果if-else不是很多可以用if-else。如果此时场景过多,太多的if-else会导致代码比较臃肿,所以这个时候就需要抽象化,将每…

Git分支策略与工作流

Git分支策略与工作流 - GitFlow工作流介绍 GitFlow工作流是一种在软件开发中广泛使用的Git分支策略和工作流。它在2010年由Vincent Driessen提出,并在开源社区中广泛接受和采用。 GitFlow工作流使用两个主要分支——master和develop。master分支用于发布稳定的版…

WebGL开发框架对比

WebGL开发框架提供了一套丰富的工具和API,使得在Web浏览器中创建和操作3D图形变得更加容易。以下是一些流行的WebGL开发框架及其各自的优缺点,选择哪个框架取决于项目的具体需求、团队的技术背景以及对特定特性的偏好。例如,如果你需要一个强…

04.17_111期_C++_继承多态_虚表

如果想实现不同的类的对象调用不同的虚函数 可以通过 协变 这种形式 在父类Person中的虚函数的返回值 的数据类型是一个 父类(任意一个父类σ就行) 在子类Student中的虚函数的返回值 的数据类型是一个 继承了σ的子类 class Student : public …

Maven基础使用

第一章> 1、配置阿里云 2、搭建私服 **************************************************************************************************************************************************************************** 1、Maven仓库指向阿里云 #(1&…

公文写作笔记

标题 最后一行的日期,后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容: ①开头:缘由 ②主题:对策(别人做得好,就借鉴) ③结尾:简单的总结(字…

Qt :浅谈在大型项目中使用信号管理器

一、引言 在大型的Qt项目中,我们往往涉及到很多不同类型的对象之间通信交互,这时候,仍旧采用小项目使用的哪里使用,哪里关联的方法,在复杂的场景下将是无穷无尽的折磨。 下面我们给出一种苦难的场景。 class A: public QObject {Q_OBJECT public:A(QObject *parent = nu…

Go 语言(三)【面向对象编程】

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗 在ADS中进行稳定性分析(以避免K稳定性因子的局限性)-理论部分中介绍了奈奎斯特图的基本原理和判定方法,并在ADS中举例稳定和不稳定的例子。 在在ADS中进行稳定性分析的多种理论方法…

基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线BLOG网”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…

mysql binlog入门

binlog 什么是binlog binlg记录了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…),以事件形式记录,还包含语句所执行的消耗的时间。 简单的说就是,只要对…

call 和 apply

call() 和 apply() 方法在功能上是类似的,它们都用于调用函数并指定函数执行时的上下文(即 this 的值),但它们的参数传递方式略有不同: call() 方法:接受一个参数列表,第一个参数是要绑定给函数…

Java Spring 中的声明式事务管理

Spring框架中的声明式事务管理是一种非编程式的事务管理方式,它允许开发者通过配置而非编程的方式来管理事务。这种方式使得事务管理与业务逻辑解耦,提高了代码的可读性和可维护性。 在Spring中,声明式事务管理主要依赖于AOP(面向…

Grafana 添加一台管理服务器

1、修改prometheus.yml 添加新服务器信息 2、重启pro 3、导入node文件 4、启动node 5、检验数据