ROC曲线和AUC值
ROC曲线(Receiver Operating Characteristic,受试者工作特征)
评价分类模型的可视化工具,是一条横纵坐标都限制在0-1范围内的曲线
横坐标是假正率FPR,错误地判断为正例的概率
纵坐标是真正率TPR,正确地判断为正例的概率(也是召回率recall)

一个混淆矩阵就对应ROC曲线中的一个坐标点

TPR和FPR的分母,对于同一个测试集是固定不变的,因为P和N分别表示测试集中正负样本的数目,所以TPR和FPR仅与TP(希望尽可能大)和FP(希望尽可能小)相关
故而在左边的ROC空间内,曲线越靠近左上角,效果越好,故B好于A

对角线相当于随机猜测,ROC曲线越接近这条对角线,模型的准确率越低
曲线凸起程度越高,模型性能越好
(一)两组概念
预测概率和阈值(共同决定模型输出结果)
分类模型的输出结果中包含一个0-1的概率值,该概率代表着对应的样本被预测为某类别的可能性
再通过阈值来进行划分:概率≥阈值的为正,反之为负

TPR和FPR
ROC曲线的横坐标为FPR(False Positive Rate,错误的预测为正的概率),纵坐标为TPR(True Positive Rate,正确的预测为正的概率)

(二)ROC曲线绘制步骤
将全部样本按概率递减排序
阈值从1至0变更,计算各阈值下对应的 (FPR, TPR) 数值对
将数值对绘于直角坐标系中


阈值为1时





(三)ROC曲线解读
可以将横轴理解为代价,纵轴理解为收获
例子:某商家最近推出一款产品,找出最有可能接受该产品的客户,以推销该产品。根据历史数据训练出一个模型,对应ROC曲线如下图,假设某一个阈值对应坐标(0.2, 0.8)
即在该阈值下,模型的FPR=0.2(全部不会购买该产品的客户数量的20%),TPR=0.8(全部会购买该产品的客户数量的80%)
假设该商家客户有1000人,其中400人购买,600人不购买,则在该模型的该阈值下,商家根据预测名单进行推销,能够推销成功的有 400*0.8=320人,推销不成功的有 600*0.2=120人

(四)sklearn实现
绘制ROC曲线主要基于sklearn库中的两个函数:roc_curve和auc
roc_curve函数
roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True)
(1)输入值
y_true :一个和样本数量一致的一维向量,数据是正确的二元标签。如果标签不是{- 1,1}或{0,1},则可以显式指定pos_label
y_score : 一个和样本数量一致的一维向量,目标分数可以是阳性类的概率估计、置信度值或决策的非阈值度量(在某些分类器上由“decision_function”返回,比如SVM)。简单的理解就是对测试集进行分类后得到的一个用于衡量该类是阳性还是阴性的分数度量,分类器也是根据这个分数来判断测试集是阳性样本还是阴性样本,因此通常都可以在分类器的中间过程拿到这个分数
pos_label:样本标签,如果y_true不满足 {0,1}, {-1,1} 标签,则需要通过该参数指定哪些是阳性样本,其余的则为阴性样本,默认不输入
sample_weight:一个和样本数量一致的一维向量,指定每个样本的权重,默认不输入
drop_intermediate:为true时(默认= True)会删除一些不会出现在ROC曲线上的次优阈值
(2)返回值
fpr: 假阳性率序列,数量与thresholds一致的一维向量
tpr: 真阳性率序列,数量与thresholds一致的一维向量
thresholds: 该序列是一个递减序列,在每一个阈值下对y_score进行划分,大于的视为阳性,小于的视为阴性,从而计算出该阈值下的fpr
auc函数
auc(fpr, tpr) # 输出是一个float类型的数值
代码
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as pltdef plot_roc(y_true, y_pred):# 计算ROC曲线和AUC值fpr, tpr, thresholds = roc_curve(y_true, y_pred, pos_label=1) # 假正例率FPR、真正例率TPR、阈值roc_auc = auc(fpr, tpr)plt.clf() # 清除当前figure的所有axes,但是不关闭这个window,所以能继续复用于其他的plot# 绘制ROC曲线plt.plot(fpr, tpr, color='darkorange', label='ROC curve (AUC = %0.2f)' % roc_auc) # label为图例里的文字plt.plot([0, 1], [0, 1], color='navy', linestyle='--') # 直线plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic (ROC) Curve')plt.legend(loc="lower right")plt.savefig('ROC_Curve.png',dpi=300) # dpi是分辨率
运行效果如下:

AUC(Area under the Curve of ROC)
(一)二分类
AUC表示ROC曲线下方面积,是一个数值,大小在0-1之间,AUC越大则分类器越好

AUC=1,完美分类器,该模型至少存在一个阈值,可以将正负样本完美划分开
0.5 < AUC < 1,优于随机猜测,数值越大,分类器越好
AUC=0.5,相当于随机猜测,模型没有预测价值
AUC < 0.5,比随机猜测要差,然而若反向预测,该模型也可优于随机猜测
(二)N分类
宏观macro-AUC
针对每一个类别都可以画一个ROC曲线,求出对应的AUC值
最后对所有AUC值求某种平均,作为整个模型所有类别的宏观AUC
微观micro-AUC

根据下面的表,来得到一个新的针对整个模型的ROC曲线,以及对应的AUC值
相关文章:

ROC曲线和AUC值
ROC曲线(Receiver Operating Characteristic,受试者工作特征)评价分类模型的可视化工具,是一条横纵坐标都限制在0-1范围内的曲线横坐标是假正率FPR,错误地判断为正例的概率纵坐标是真正率TPR,正确地判断为正…...

【vue.js】在网页中实现一个金属抛光质感的按钮
文章目录前言效果电脑效果手机效果说明完整代码index.html前言 诶?这有一个按钮(~ ̄▽ ̄)~,这是一个在html中实现的具有金属质感并且能镜面反射的按钮~ 效果 电脑效果 手机效果 说明 主要思路是使用 navig…...

android实现评论区功能
效果 activity_detail.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http…...

Java每日一练(20230319)
目录 1. 最大矩形 🌟🌟🌟 2. 回文对 🌟🌟🌟 3. 给表达式添加运算符 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练…...

Redis缓存双写一致性
目录双写一致性Redis与Mysql双写一致性canal配置流程代码案例双写一致性理解缓存操作细分缓存一致性多种更新策略挂牌报错,凌晨升级先更新数据库,在更新缓存先删除缓存,在更新数据库先更新数据库,在删除缓存延迟双删策略总结双写一致性 Redis与Mysql双写一致性 canal 主要是…...

【2023-Pytorch-检测教程】手把手教你使用YOLOV5做交通标志检测
项目下载地址:YOLOV5交通标志识别检测数据集代码模型教学视频-深度学习文档类资源-CSDN文库 交通标志的目标检测算法在计算机视觉领域一直属于热点研究问题,改进的优化算法不断地被提出。国内外许多学者针对现有的目标检测方法中网络结构、目标定位、损…...

Java中的二叉树
文章目录前言一、树形结构(了解)1.1 概念1.2 概念(重要)1.3 树的表示形式(了解)1.4 树的应用二、二叉树(重点)2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.5 二叉树的存储2.5 二…...

基于 gma 绘制古代洛阳 5 大都城遗址空间分布地图
了解 gma gma 是什么? gma 是一个基于 Python 的地理、气象数据快速处理和数据分析函数包(Geographic and Meteorological Analysis,gma)。gma 网站:地理与气象分析库。 gma 的主要功能有哪些? 气候气象&a…...

分析 Spring 的依赖注入模式
一、依赖注入二、Field Injection优点缺点三、Constructor Injection优点1. 容易发现 code smell优点2. 容易厘清依赖关系优点3. 容易写单元测试优点4. Immutable Object缺点:循环依赖四、总结一、依赖注入 依赖注入 (Dependency Injection,…...

IntelliJ IDEA创建Servlet
目录 ——————————————————————————————— 一、创建Java项目 1、创建java项目 2、选择java 3、next 4、给项目命名 5、新创建完java项目的目录结构 二、变java为servlet项目 1、变servlet项目 2、选择Web Application 3、更新完成后的目录…...
Spring Boot如何让自己的bean优先加载
背景介绍 在一些需求中,可能存在某些场景,比如先加载自己的bean,然后自己的bean做一些DB操作,初始化配置问题,然后后面的bean基于这个配置文件,继续做其他的业务逻辑。因此有了本文的这个题目。 实现方法…...

LeetCode分类刷题----动态规划
动态规划509.斐波那契数列70.爬楼梯746.使用最小花费怕楼梯62.不同路径63.不同路径||343.整数拆分96.不同的二叉搜索树01背包问题416.分割等和子集1049.最后一块石头的重量||494.目标和474.一和零完全背包问题518.零钱兑换||377.组合总和IV322.零钱兑换279.完全平方数139.单词拆…...
今年好像没有金三银四了?
大家好,我是记得诚。 金三银四,是换工作的高峰期,新的一年结束了,在年前拿完年终奖,在年后3月和4月换个满意的工作。 单从我公司来看,目前还没有一个人离职,往年离职率是要高一些的。 还有我…...

【C++】入门知识之 函数重载
前言提到重载这个词,我们会想到什么呢?重载有一种一词多义的意思,中华文化博大精深,之前有一个笑话,中国的乒乓球谁都打不过,男足谁都打不过,哈哈哈这也是非常有意思的,但是今天我们…...

文心一言发布,你怎么看?chatGPT
百度全新一代知识增强大语言模型“文心一言”于2021年3月16日正式发布,作为一款自然语言处理技术,它引起了广泛的关注和讨论。 首先,文心一言是一款具有重大意义的自然语言处理技术。在人工智能领域,自然语言处理技术一直是一个难…...

字符函数和字符串函数【上篇】
文章目录🎖️1.函数介绍📬1.1. strlen📬1.2. strcpy📬1.3. strcat📬1.4. strcmp📬1.5. strncpy📬1.6. strncat📬1.7. strncmp🎖️1.函数介绍 📬1.1. strlen …...

list的模拟实现(模仿STL)
目录 一、模拟实现前的准备 1.list结构认识 2.迭代器的实现不同 3.如何实现需要的功能 二.结点类实现 三.迭代器实现 1.实现前的问题 2._list_iterator类的成员变量和构造函数 3.*和->运算符重载 4.前置和后置的实现 5.前置--和后置-- 6.和!运算符重载 四.list类的实现 1.li…...

05-STM32F1 - 串行通信SPI
SPI STM-SPI作为主机,从机 SPI的时钟,最高为Pclk/2,SPI1最高为36Mhz,SPI2最高为18Mhz。 SPI的四种模式 CPOL CPHA,数据帧8~16位,LSB,MSB 全双工,双向单线,单线 物理层 接口标准…...
【Pytorch】Tensor的分块、变形、排序、极值与in-place操作
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 这是目录Tensor的分块Tensor的变形Tensor的排序Tensor的极值Tensor的in-place操作Tensor是PyTorch中用于存储和处理多维数据的基本数据结构,它类似于NumPy中的ndarray&…...

数组栈的实现
个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 目录所有接口函数栈的初始化在栈顶放数据释放数据删除数据取栈顶的数据判断栈取区是否为…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

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…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...