西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)
前言
在学习到这部分时,对 ℓ-rank 以及AUC的关系难以理解透彻,在网上看到其他博主也并未弄明白,大家大多写自己的理解,我希望您在看完这篇文章时能够深刻理解这二者的关系,如果我的理解有误,希望您在评论区指正,给出您的见解。
首先理解什么是AUC?
首先理解什么是ROC曲线,ROC曲线如何绘制?
ROC曲线,即接收者操作特征曲线(Receiver Operating Characteristic Curve),反映了在不同分类阈值下真正类率(TPR)和假正类率(FPR)的变化情况。
绘制ROC曲线的过程如下:
- 给定m+个正例和m-个反例,首先将分类的阈值设置到最大,此时所有的例子预测结果都是反例,此时真正例率和假正例率均为0,在坐标原点(0,0)处标记一个点。
- 然后,逐步降低阈值,每次降低都将导致更多的样例被划分为正例。对于每个降低的阈值,计算当前的真正例率和假正例率,并在ROC图上标记相应的点。
- 最后,用线段连接这些点,即得ROC曲线。
通俗地说,分类阈值就像一个“门槛”,数据样本需要通过这个“门槛”才能被归类到某个类别中。在二分类问题中,模型通常会为每个样本输出一个概率值,表示该样本属于正例(比如:某种疾病的患者)的概率。这时,我们就需要选择一个阈值,来决定当这个概率达到多少时,我们就认为这个样本是正例。
例如,如果我们设定阈值为0.5,那么当模型输出的概率(概率就是模型对一个例子的判断,比如说10%可能是正例,90%是反例)大于或等于0.5时,我们就认为这个样本是正例(那么刚才认为10%为正例就不被认为是正例);如果小于0.5,则认为是负例(比如:非疾病患者)。
我们所做的就是逐渐把开始设定的正例阈值从100%逐渐降低到0。然后看模型的结果被划分为真正例与假正例的结果。(比如,有个正例,机器给的判断是50%概率是正例,那么他就会在之后我们把阈值降到50%时被纳入正例,此时,这是一个正例,模型判断也为正例,那么就被纳入真正例,如果是这是一个反例,模型给出50%概率的正例,那么此时应该别纳入假正例)。
在绘制ROC曲线时,我们会使用多个不同的阈值来计算真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)。TPR表示实际为正例的样本中被预测为正例的比例,而FPR表示实际为负例的样本中被错误地预测为正例的比例。通过改变阈值,我们可以得到不同的TPR和FPR组合,从而绘制出ROC曲线。
具体来说,从(0,0)开始,对于给定的m1个正例和m2个反例,根据预测结果进行排序,依次将这些样例划分为正例。若为**真正例,则y值增加1/m1,否则x值增加1/m2。**最后,将这些点连线,所得到的面积就是AUC。
什么是AUC
AUC(Area Under the Curve)曲线则是基于ROC曲线计算得到的。AUC值表示ROC曲线下的面积,用于量化评估模型的性能。AUC值越接近1,表示模型的性能越好。
ℓ-rank
先看这个表达式,我们需要理解一些东西
m+与m -, D +与D-,II
m +与m -分别对应正例与反例的个数。
D+与D-分别对应正例集与反例集。
II(罗马数字2),如果在II后括号中的为正确表达式,那么返回1,否则返回0。
f函数
f函数可以认为是被判断出来的先后,如果例子被先判断出来,那么函数的值大,反之就小
ℓ-rank被称为排序损失,为什么要叫排序损失呢?
我们不妨看看刚才的ROC曲线
如果是正例,那点就在上边,如果是反例,就在上一个点的右边,所以咱们最好的情况就是上来把所有的正例全部找出来,就是ROC曲线一直向上,最后才开始向右走。
AUC表明的其实是一种顺序关系,即是在增大分类阈值(也就是让模型判断出来多少正例)时,正例会比反例被早判断出来的概率,也就是对正例的辨别能力,那这是如何在ROC曲线上体现出来的呢?我们以这个图的第二个点 为例子(假设它的坐标为(0.1)),我们可以发现在这个点的右侧,每一格(m,1)在ROC图线上都有对应的点,每个对应的点都是反例,这些反例就是在之后被发现的,因为从左下到右上,是分类阈值逐渐变大的过程,也就是相对偏后,那么,以我们这张图为例,在点(0,1)的右边的(20 - 0)* 1的矩阵(总共有20格)就是在指定阈值下正例比反例早被发现的概率(概率 需要归一化)。欸,那把所有的点的右侧部分的面积加起来归一化,不就是AOC,不就是正例比反例早发现的概率?
同理可得,在上边我们可以知道,一个点垂直向上形成的单位宽度的矩阵就是对于一个反例来说,它比部分正例早发现的概率(需要归一化)。
于是,AUC曲线的另一种表示形式应为
AUC = 1 - ℓ-rank
那么我们可以很轻易发现AUC与ℓ-rank的关系了,对于我们画的图AUC是右下侧,ℓ-rank是左上侧。
但是书上的还写了一个1/2 的等于项,这是为什么呢?
1/2项的来历
我们说到,ROC图线是不断增加阈值画点连线做成的图,那么他不一定是一个个例子来的,有可能阈值从1% -> 2%增加了两个例子,这两个例子得到的结果是,一个真正例,一个假正例,这导致真正例,假正例都增加了,这就形成了一个斜着的线,在左上,右下就形成了一个三角形,这就是1/2项的来历,此时,AUC也要加一个1/2的等于项。
证明
相关文章:

西瓜书机器学习AUC与ℓ-rank(loss)的联系理解以及证明(通俗易懂)
前言 在学习到这部分时,对 ℓ-rank 以及AUC的关系难以理解透彻,在网上看到其他博主也并未弄明白,大家大多写自己的理解,我希望您在看完这篇文章时能够深刻理解这二者的关系,如果我的理解有误,希望您在评论…...
渔业安全生产综合管理指挥系统-航迹数据优化方案
文章目录 引言I 轨迹数据模型II 轨迹信息索引III 数据同步方案3.1 多服务器多表同步3.2 增量数据同步3.3 执行IV 配置ESV 团队建设5.1 前端(web GIS)5.2 后端(Java)see also引言 背景: 目前系统查询轨迹数据比较慢的原因是没有进行读写分离,轨迹数据的查询和写入都是SQL…...
发现数据之美:探索数据可视化的艺术与技术
摘要: 数据可视化是将抽象的数据转化为图形化表达的过程,它不仅可以让数据更加直观易懂,还能够揭示数据背后的模式、趋势和关联关系。本文将深入探讨数据可视化的重要性,并通过详细的实例演示如何运用常见的数据可视化工具和库,如Matplotlib、Seaborn和Plotly,为读者呈现…...
Flutter项目组件模块化开发的实践与搭建
在Flutter应用程序的开发中,组件模块化是一种非常重要的开发方式,它可以提高代码的可维护性、复用性和扩展性。本文将介绍如何在Flutter项目中搭建组件模块化开发的框架,并给出实际的实践示例。 1. 为什么需要组件模块化开发? 在…...

Flink:使用 Faker 和 DataGen 生成测试数据
博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...
Json格式解析
文章目录 Json格式介绍python中json模块的使用 Json格式介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言…...

Java Day13 多线程
多线程 1、 方式一 Thread2、实现Runnable接口3、实现 Callable接口4、与线程有关的操作方法5、线程安全问题5.1 取钱案例5.2 线程同步5.2.1 同步代码块5.2.2 同步方法5.2.3 Lock锁 6、线程池6.2 创建线程池6.2.1 使用ExecutorService创建新任务策略6.2.2 使用Executors工具类创…...
以太坊的演变:EIP、ERC 概念以及革命性的 ERC20、ERC721 和 ERC115 标准
文章目录 一、EIP——以太坊发展的基石1.1 什么是EIP?1.2 历史背景:前身的 BIP1.3 EIP的重要性1.4 流程:从提案到实施 二、进入 ERC——以太坊内的标准化协议2.1 解读 ERC:以太坊征求意见2.2 ERC 标准的诞生和意义 三、聚焦 ERC20…...

B003-springcloud alibaba 服务治理 nacos discovery ribbon feign
目录 服务治理服务治理介绍什么是服务治理相关方案 nacos实战入门搭建nacos环境安装nacos启动nacos访问nacos 将商品微服务注册进nacos将订单微服务注册进nacos订单服务通过nacos调用商品服务 实现服务调用的负载均衡什么是负载均衡代码实现负载均衡增加一个服务提供者自定义实…...
mac笔记本执行定时任务
1.mac本地设置一个定时任务每小时执行一次,在/Users/xxx/go/src/runing目录下执行命令:./git_push.sh 在macOS中,你可以使用crontab来设置定时任务。打开终端并执行以下步骤: 1.打开当前用户的crontab编辑器: crontab …...

解决linux系统网卡加载慢的问题
手上有块开发板,启动系统后,需要五六分钟后无线wifi网卡才能加载起来,网卡型号是qca9377。 第一步先确认是不是第一时间挂载到PCI总线上了,在ath10k_pci_probe函数中添加调试信息,另外查看/sys/bus/pci/drivers/ath10…...
Linux 命令或者一些工具
locale – 设置和显示程序运行的语言环境 locale -a | grep en_US.UTF-8.sudo locale-gen en_US.UTF-8sudo dpkg-reconfigure localesexpect 常用命令总结 expect命令spawnexpectsendexp_continuesend_userexit chrpath工具 chrpath 是一个用于修改可执行文件或共享库的运行…...

基于python的4s店客户管理系统
技术:pythonmysqlvue 一、背景 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务…...

解决谷歌浏览器最新chrome94版本CORS跨域问题
项目场景: 谷歌浏览器升级到chrome94版本出现CORS跨域问题 问题描述 解决谷歌浏览器最新chrome94版本CORS跨域问题。 CORS跨域问题: 升级谷歌浏览器最新chrome94版本后,提示Access to XMLHttpRequest at ‘http://localhost:xxxx/api’ fro…...

JAVA 线程
目录 一、线程的定义 二、线程的实现 三、线程状态 程序并发执行多个任务 二、线程的实现 1、继承Thread类创建线程:通过继承Java的Thread类并重写其run()方法,可以创建一个新的线程。然后,通过调用线程的start()方法来启动线程…...
Rust 基于 await、async 的异步编程和纤程、协程的实现
一、Rust 的异步编程 Rust 通过 await、async 实现了其他语言中纤程、协程的机制。下面是一个使用async和await的Rust示例代码。这个示例展示了如何异步地读取文件内容。 首先,确保你的Cargo.toml文件包含了tokio库的依赖,如下: [dependen…...

【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)
基于python语言,采用经典差分进化算法(DE)对 需求拆分车辆路径规划问题(SDVRP) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整3. 求解结果4. 代码片段参考 往期优质资源 经过一年多的创作,目前已经成…...

什么是神经网络?
一、什么是神经网络? 神经网络又称人工神经网络,是一种基于人脑功能模型的计算架构,因此称之为“神经”。神经网络由一组称为“节点”的处理单元组成。这些节点相互传递数据,就像大脑中的神经元相互传递电脉冲一样。 神经网络在…...
基于Python的图形用户界面设计及应用
基于Python的图形用户界面设计及应用 摘要:随着信息技术的飞速发展,图形用户界面(GUI)已成为现代软件不可或缺的一部分。Python作为一种简洁、易读且功能强大的编程语言,提供了多种GUI开发工具包,如Tkinte…...

python网络爬虫实战教学——urllib的使用(1)
文章目录 专栏导读1、前言2、urllib的使用3、发送请求3.1 urlopen3.2 request 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...