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

一、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.mzph.cn/pingmian/75936.shtml

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

相关文章

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__上

前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…

昂贵的DOM操作:一次DOM导致的性能问题排查记录

公司来了一个前端实习生,踏实,勤快,很快得到老大的认可,分配给她一个需求,大概如下:构建一个公司产品的评论展示页面,页面可以滚动加载新的内容,同时如果已经加载的内容发生变化&…

前端服务配置详解:从入门到实战

前端服务配置详解:从入门到实战 一、环境配置文件(.env) 1.1 基础结构 在项目根目录创建 .env 文件: # 开发环境 VUE_APP_API_BASE_URL http://localhost:3000/api VUE_APP_VERSION 1.0.0# 生产环境(.env.produc…

【学习笔记】计算机网络(七)—— 网络安全

第7章 网络安全 文章目录 第7章 网络安全7.1 网络安全问题概述7.1.1 计算机网络面临的安全性威胁7.1.2 安全的计算机网络7.1.3 数据加密模型 7.2 两类密码体制7.2.1 对称密钥密码体制7.2.2 公钥密码体制 7.3 鉴别7.3.1 报文鉴别7.3.2 实体鉴别 7.4 密钥分配7.4.1 对称密钥的分配…

我用Cursor + DeepSeek + Claude-3.7-Sonnet + DevBox,10分钟开发了一个系统

大家好,我是袁庭新。Cursor最近可谓是火的一塌糊涂,于是我深度体验了一波。我用的环境是Cursor Claude-3.7-Sonnet DevBox,整个过程我一行代码都没有写,10分钟帮我开发了一个系统,且前后端联调一把通过。惊出一身冷汗…

SpringBoot企业级开发之【用户模块-登录】

开发之前我们先看一下接口文档的要求: 开发思路: 开发实操: 因为我们之前开发注册的时候,就有了一些相关的操作,所以在这里我们只需要定义登录的controller即可: //用户登录PostMapping("/login"…

mysql 8.0.27-docker

安装 可以略过本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 镜像查询与安装 先查询: docker search mysql 明显会报错 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…

Pgvector的安装

Pgvector的安装 向量化数据的存储,可以为 PostgreSQL 安装 vector 扩展来存储向量化数据 注意:在安装vector扩展之前,请先安装Postgres数据库 vector 扩展的步骤 1、下载vs_BuildTools 下载地址: https://visualstudio.microso…

Python高阶函数-sorted(深度解析从原理到实战)

一、sorted()函数概述 sorted()是Python内置的高阶函数,用于对可迭代对象进行排序操作。与列表的sort()方法不同,sorted()会返回一个新的已排序列表,而不改变原数据。 基本语法 sorted(iterable, *, keyNone, reverseFalse)二、核心参数详…

ArcGIS Pro/GeoScene Pro AI 助手 2.1

引言 面对ArcGIS Pro/GeoScene Pro复杂的操作界面和脚本开发需求,你是否还在为功能定位、代码调试和效率优化而烦恼?今天,推出自制的Pro AI助手2.0版本,七大核心功能将革新你的GIS工作方式!无论是界面操作指引、一键生…

如何将本地更改的README文件同步到自己的GitHub项目仓库

如何将本地更改的 README 文件同步到 GitHub 仓库 在你 git clone 下来的工程目录下: 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 将你的更改Copy到你git下来的工程中(上面的命令会自动处理,例如只会C…

PostIn V1.0.8版本发布,IDEA 插件支持一键扫描上报,让接口定义不再繁琐

PostIn是一款国产开源免费的接口管理工具,包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块,支持常见的HTTP协议、websocket协议等,支持免登陆本地接口调试,同时可以对项目进行灵活的成员权限、消息通知管理等。本周Pos…

UE5学习笔记 FPS游戏制作36 UI动画

文章目录 目的效果创建动画UI准备制作动画 播放动画目的效果创建动画UI准备制作动画 播放动画注册播放事件 目的效果 我们要创建一个提示动画,文字先渐显,然后向上移动,同时渐隐 创建动画 UI准备 创建一个UI控件,然后创建一个…

HTTP 响应头 Strict-Transport-Security 缺失漏洞

HTTP 响应头 Strict-Transport-Security 缺失漏洞 这个漏洞就是说明网站的HTTP响应头中没有设置Strict-Transport-Security,没有设置则可以通过将https自己手动改成htttp的方式进行访问。不安全 解决方法 1.nginx配置 nginx中增加如下配置: location / …

代理模式的优缺点是什么?

什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对原始对象的访问。 这种模式在前端开发中广泛应用,特别是在需要控制对象访问、添加额外逻辑或优化性能的场景中。 ​​核心…

【嵌入式学习3】UDP发送端、接收端

目录 1、发送端 2、接收端 3、UDP广播 1、发送端 from socket import *udp_socket socket(AF_INET,SOCK_DGRAM) udp_socket.bind(("127.0.0.1",3333))data_str "UDP发送端数据" data_bytes data_str.encode("utf-8") udp_socket.sendto(d…

AI重构SEO关键词精准布局

内容概要 在传统SEO策略面临搜索场景碎片化、用户意图复杂化的挑战下,AI技术通过多维数据分析与算法建模,正在重构关键词布局的逻辑框架。基于自然语言处理(NLP)的语义分析能力,AI可精准识别搜索词背后的需求层级&…

谷歌发布网络安全AI新模型Sec-Gemini v1

谷歌近日宣布推出实验性AI模型Sec-Gemini v1,旨在通过人工智能技术革新网络安全防御体系。该模型由Sec-Gemini团队成员Elie Burzstein和Marianna Tishchenko共同研发,旨在帮助网络安全人员应对日益复杂的网络威胁。 攻防不对称的破局之道 Sec-Gemini团队…

IntelliJ IDEA下开发FPGA——FPGA开发体验提升__下

前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…

Python语言的需求分析

Python语言的需求分析 引言 在信息技术快速发展的今天,编程语言的选择对于软件开发的成功与否起着至关重要的作用。Python作为一种高级编程语言,以其简洁易读的语法和强大的功能受到越来越多开发者的青睐。通过对Python语言的需求分析,我们…