机器学习——ROC曲线、PR曲线

news2025/4/18 12:05:40

一、ROC曲线简介

1.1  ROC曲线的构成

1.横轴(假正率,FPR)

FPR=FP/(FP+TN)

表示负样本被错误分类为正的比例(越小越好)

2.纵轴(真正率,TPR,即召回率)

TPR=TP/(TP+FN)

表示正样本被正确识别的比例(越大越好)

3.曲线绘制:通过调整分类阈值(如逻辑回归的概率阈值),计算不同阈值下的(FPR, TPR)点,连接这些点形成曲线

1.2  关键指标:AUC

1.AUC:ROC曲线下的面积,范围在0.5(随机猜测)到1(完美模型)之间

  • AUC = 0.9:模型有90%的概率将随机正样本排在负样本之前
  • AUC对类别分布不敏感,适合不平衡数据评估

1.3  ROC曲线的核心作用

1.模型性能比较:AUC越高,模型整体区分能力越强

2.阈值选择:通过曲线形状选择最佳分类阈值(如平衡误诊与漏诊的医疗场景)

3.可视化权衡:曲线越靠近左上角,模型在TPR和FPR间的权衡越好

1.4  ROC vs. 精确率-召回率曲线(PR Curve)

1.ROC:关注整体排序能力,适合类别相对均衡的场景

2.PR Curve:聚焦正类的识别质量(精确率 vs. 召回率),更适合极端类别不平衡(如欺诈检测)

1.5  实例应用

1.医学诊断:调整阈值以降低漏诊(提高TPR)或减少误诊(降低FPR)

2.信用评分:通过AUC评估模型区分高风险/低风险客户的能力

二、PR曲线简介

2.1 PR曲线的构成

1.横轴(召回率,即TPR)

Recall=TP/(TP+FN)

表示正样本被正确识别的比例(关注“漏检”问题)

2.纵轴(精确率)

Precision= TP/(TP+FP)

表示预测为正的样本中实际为正的比例(关注“误检”问题)

3.曲线绘制:通过调整分类阈值(如概率阈值),计算不同阈值下的(Recall, Precision)点,连接这些点形成曲线

2.2 关键指标:AUC-PR

1.AUC-PR:PR曲线下的面积,范围在0(最差)到1(完美模型)之间

  • 类别越不平衡,AUC-PR的评估越敏感。例如,在欺诈检测中,正样本占比仅1%时,AUC-PR比AUC-ROC更有参考价值

2.3 PR曲线的核心作用

1.聚焦正类性能:直接反映模型对正类的识别能力,避免负类数量主导评估结果

2.高不平衡场景:当正样本极少时(如罕见病诊断、欺诈检测),PR曲线比ROC曲线更可靠

3.阈值选择:通过曲线形状选择平衡精确率和召回率的最佳阈值(例如,医疗场景需高召回率,推荐系统需高精确率)

2.4 PR曲线 vs ROC曲线

对比维度PR曲线ROC曲线
核心关注点正类的识别质量(Precision vs. Recall)整体排序能力(TPR vs. FPR)
使用场景正样本极少(极端不平衡)类别相对均衡或关注整体性能
对类别不平衡敏感度高度敏感不敏感(因FPR受负类数量影响较小)
AUC解释AUC-PR越低,模型漏检或误检越严重AUC-ROC反映整体排序能力

2.5 实例应用

1.罕见病筛查:需高召回率(减少漏诊),允许一定误诊(低精确率)

2.垃圾邮件检测:需高精确率(避免正常邮件被误判为垃圾),可容忍少量漏检(低召回率)

3.推荐系统:平衡精确率(推荐内容相关性)和召回率(覆盖用户兴趣范围)

2.6 注意事项

1.负样本主导时慎用:若负样本占比过高(如99%),PR曲线可能波动较大,需结合其他指标(如F1分数)

2.随机基线的差异:ROC曲线的随机基线是AUC=0.5,而PR曲线的随机基线为:

随机模型AUC-PR = 正样本比例 / (正样本比例 + 负样本比例)

例如正样本占1%,随机模型的AUC-PR ≈ 0.01

三、代码实现

1.导入所需要的包

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score

2.加载数据集,进行训练

 随机生成数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用随机森林分类器进行训练
clf = RandomForestClassifier(random_state=42)
clf.fit(X_train, y_train)

# 获取预测结果
y_pred_proba = clf.predict_proba(X_test)[:, 1] 

3.计算ROC曲线和PR曲线

# 计算ROC曲线
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)

# 计算PR曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred_proba)
average_precision = average_precision_score(y_test, y_pred_proba)

4.绘制ROC曲线和PR曲线

# 绘制ROC曲线
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, 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")

# 绘制PR曲线
plt.subplot(1, 2, 2)
plt.plot(recall, precision, color='blue', lw=2, label=f'PR curve (AP = {average_precision:.2f})')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall (PR) Curve')
plt.legend(loc="best")

# 显示图像
plt.tight_layout()
plt.show()

四、曲线可视化展示

4.1 曲线截图

4.2 图像分析

1.ROC曲线分析

  •  ROC曲线:展示了分类模型在不同阈值下的真阳性率(TPR)与假阳性率(FPR)之间的关系。
  •  曲线下的面积(AUC):图中显示AUC为0.92,表示模型具有很高的区分能力。AUC值越接近1,模型性能越好。
  •  对角线:图中的虚线表示随机猜测的模型性能,曲线越远离这条线,模型性能越好。  

2.PR曲线分析

  • PR曲线:展示了分类模型在不同阈值下的精确率(Precision)与召回率(Recall)之间的关系。
  • 平均精确率(AP):图中显示AP为0.94,表示模型在不同召回率下的精确率平均值很高,说明模型在处理不平衡数据集时表现良好。  
  • 曲线形状:曲线越靠近左上角,模型性能越好。图中曲线在大部分区域都保持较高的精确率,说明模型在不同召回率下都能保持较高的精确度。

3.总结

  • 这两个图表明该模型在分类任务中表现优异,具有很高的区分能力和精确度。
  • ROC曲线适合评估模型的整体性能,而PR曲线更适合评估模型在不平衡数据集上的表现

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

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

相关文章

我为女儿开发了一个游戏网站

大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…

【Spring Cloud Netflix】GateWay服务网关

1.基本概述 GateWay用于在微服务架构中提供统一的入口点,对请求进行路由,过滤和处理。它就像是整个微服务系统的大门,所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…

Docker部署Jenkins服务

文章目录 1.下载Jenkins服务2.部署Java21(可选)2.1 安装Java21 3.Maven3.9.9安装4.启动Jenkins5.初始化Jenkins5.1 入门5.2 安装推荐的插件5.3 创建第一个管理员用户5.4 实例配置5.5 Jenkins已就绪5.6 开始使用Jenkins5.7 重启Jenkins 6.配置Jenkins6.1 …

[ctfshow web入门] web40

信息收集 怎么一下子多这么多过滤啊,我以为跳过了好几题 这又能eval了,但是连$也不能用了 不能用. * ?,所以打不出fla*或者fla?????了 不能用/,构造不出日志注入和伪协议包含 仔细观察,禁的是中文的括号&#x…

蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)

蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S12345…

Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼

1. 问题 使用Qt进行研发时&#xff0c;遇到一个问题&#xff0c;当在系统默认输入法中文&#xff08;英文输入法或者搜狗就不会触发闪退&#xff09;的情况下&#xff0c;选中QTableWidget控件&#xff08;QTableWidgetItem有焦点&#xff0c;但是不双击&#xff09;&#xff…

AlDente Pro for Mac电脑 充电限制保护工具

AlDente Pro for Mac电脑 充电限制保护工具 一、介绍 AlDente Pro for Mac&#xff0c;是一款充电限制保护工具&#xff0c;是可以限制最大充电百分比来保护电池的工具。锂离子和聚合物电池&#xff08;如 MacBook 中的电池&#xff09;在40&#xff05; 至 80&#xff05; 之…

算法训练之动态规划(一)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Navicat连接远程PostGreSQL失败

问题描述 使用本地Navicat连接Windows远程服务器上部署的PostGreSQL数据库时,出现以下错误: 解决方案 出现以上报错信息,是因为PostGreSQL数据库服务尚未设置允许客户端建立远程连接。可做如下配置, 1. 找到PostGreSQL数据库安装目录下的data子文件夹,重点关注:postgres…

新一代达梦官方管理工具SQLark:可视化建表操作指南

在数据库管理工作中&#xff0c;新建表是一项基础且频繁的操作。SQLark 的可视化建表功能为我们提供了一种高效、便捷且丝滑流畅的建表新体验。一起来了解下吧。 SQLark 官方下载链接&#xff1a;www.sqlark.com 新建表作为常见的功能&#xff0c;相比其他管理工具&#xff0c;…

什么是EXR透视贴图 ?

EXR透视贴图是一种基于 OpenEXR 格式的高动态范围&#xff08;HDR&#xff09;图像技术&#xff0c;主要用于3D建模、渲染和视觉特效领域。它通过高精度图像数据和透视映射功能&#xff0c;为场景创建逼真的光影效果和空间深度。 技术原理 高动态范围&#xff08;HDR&#xf…

每日一题(小白)数组娱乐篇21

由于题意可知我们是要将对应的数字转换为英文&#xff0c;我们要考虑两点一个是进制的转换&#xff0c;也就是类似于我们的十进制一到9就多一位&#xff0c;这里的进制就是Z进制也就是27进制一旦到26下一位则进位&#xff1b;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…

LINUX的使用(1)-挂载云硬盘

1.磁盘的挂载&#xff1a; 这个输出是来自 fdisk 或类似的工具&#xff0c;它展示了两块磁盘的分区信息。让我们逐个分析&#xff1a; 第一块磁盘 /dev/sda: 磁盘大小: 53.7 GB (约 53687091200 字节)&#xff0c;总共有 104857600 个扇区。扇区单位: 每个扇区大小为 512 字节…

GPT-4o-image模型:开启AI图片编辑新时代

在生成式AI技术爆发式迭代的今天&#xff0c;智创聚合API率先突破多模态创作边界&#xff0c;正式发布集成GPT-4o-image模型的创作平台&#xff0c;以“文生图-图生图-循环编辑”三位一体的技术矩阵&#xff0c;重新定义数字内容生产流程。生成图像效率较传统工具提升300%&…

使用pip3安装PyTorch与PyG,实现NVIDIA CUDA GPU加速

使用python3的pip3命令安装python依赖库。 # python3 -V Python 3.12.3 # # pip3 -V pip 25.0.1 from /root/.pyenv/versions/3.12.3/lib/python3.12/site-packages/pip (python 3.12)Usage: pip3 install [options] <package> ...pip3 install [options] -r <re…

Rust主流框架性能比拼: Actix vs Axum vs Rocket

本内容是对知名性能评测博主 Anton Putra Actix (Rust) vs Axum (Rust) vs Rocket (Rust): Performance Benchmark in Kubernetes 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在以下中&#xff0c;我们将比较 Rust 生态中最受欢迎的几个框架。我会将三个应用程序…

【QT】QT的消息盒子和对话框(自定义对话框)

QT的消息盒子和对话框&#xff08;自定义对话框&#xff09; 一、消息盒子QMessageBox1、弹出警告盒子示例代码&#xff1a;现象&#xff1a; 2、致命错误盒子示例代码&#xff1a;现象&#xff1a; 3、帮助盒子示例代码&#xff1a;现象&#xff1a; 4、示例代码&#xff1a; …

【结合vue源码,分析vue2及vue3的数据绑定实现原理】

结合vue源码&#xff0c;分析vue2及vue3的数据绑定实现原理 Vue 2 数据绑定实现整体思路详细实现1. Observer 类&#xff1a;数据劫持2. Dep 类&#xff1a;依赖收集3. Watcher 类&#xff1a;订阅者 Vue 3 数据绑定实现整体思路详细实现1. reactive 函数&#xff1a;创建响应式…

如何实现H5端对接钉钉登录并优雅扩展其他平台

如何实现H5端对接钉钉登录并优雅扩展其他平台 钉钉H5登录逻辑后端代码如何实现&#xff1f;本次采用策略模式工厂方式进行定义接口确定会使用的基本鉴权步骤具体逻辑类进行实现采用注册表模式&#xff08;Registry Pattern&#xff09;抽象工厂进行基本逻辑定义具体工厂进行对接…

LabVIEW真空度监测与控制系统

开发了一种基于LabVIEW的真空度信号采集与管理系统&#xff0c;该系统通过图形化编程语言实现了真空度的高精度测量和控制。利用LabVIEW的强大功能&#xff0c;研制了相应的硬件并设计了完整的软件解决方案&#xff0c;以满足工业应用中对真空度监测的精确要求。 项目背景 随着…