ROC曲线绘制和AUC计算

ROC曲线绘制和AUC计算

文章目录

  • ROC曲线绘制和AUC计算
    • 1.什么是ROC曲线?
    • 2.ROC曲线怎么看?
    • 3.怎么计算AUC?
    • 4.AUC的数值有什么含义?
    • 5.为什么要采用TPR和FPR来做ROC曲线
    • 6.TPR、FPR与灵敏度、特异性的关系是什么?
    • 7.ROC曲线在医学诊断中的应用
    • 8.在医学诊断应用中,如何权衡灵敏度和特异性
    • 9.一个简单的例子
    • 10.怎么用python实现

1.什么是ROC曲线?

ROC曲线(Receiver Operating Characteristic curve)是一种用于评估二分类模型性能的工具。它以假正例率(False Positive Rate,FPR)为横轴,真正例率(True Positive Rate,TPR)为纵轴绘制曲线。如下图。
在这里插入图片描述

2.ROC曲线怎么看?

在ROC曲线中,曲线下方的面积(Area Under the Curve,AUC)越大,表示模型性能越好。
理想情况下,ROC曲线应该靠近左上角,表明模型在保持较低的假正例率的同时实现较高的真正例率。当ROC曲线与对角线重合时,说明模型性能等同于随机猜测。

3.怎么计算AUC?

计算AUC的方法通常涉及到对ROC曲线下的面积进行数值积分。具体步骤如下:

  • 绘制ROC曲线: 通过改变分类阈值,计算不同阈值下的TPR和FPR,然后绘制曲线。 计算AUC:
  • 对ROC曲线下的面积进行数值积分。在离散数据的情况下,可以使用梯形法则或其他数值积分方法。

梯形法则计算AUC的简单方法是将ROC曲线分成多个小梯形,然后计算每个梯形的面积并求和。具体计算公式为:
在这里插入图片描述

其中,n 是ROC曲线上的点数,FPRi 和TPRi 分别是第 i个点的假正例率和真正例率。

4.AUC的数值有什么含义?

AUC的取值范围在0到1之间,见下图:
在这里插入图片描述

  • AUC = 0.5: 表示模型的性能等同于随机猜测。ROC曲线是一条对角线,说明模型无法区分正例和负例,其预测能力没有优势。
  • AUC < 0.5: 表示模型性能差于随机猜测。这可能是因为模型在正例和负例之间混淆,甚至错误地更倾向于预测反方向。
  • AUC > 0.5: 表示模型性能优于随机猜测。AUC越接近1,模型性能越好。当AUC接近1时,说明模型在正例和负例之间的区分能力更强。
  • AUC = 1: 表示模型在所有情况下都完美地区分了正例和负例,没有产生任何错误。尽管在实际应用中极少见,但AUC等于1表示模型的性能是理想的。

5.为什么要采用TPR和FPR来做ROC曲线

这两个指标的定义为:
在这里插入图片描述

在理解这两个指标时,可以考虑以下关系:

  • TPR提高: 意味着模型更能捕获实际为正例的样本,降低了漏诊的风险。
  • FPR提高: 意味着模型在实际为负例的样本中更容易出现误报,将其错误地预测为正例。

在实际应用中,医学领域可能更关心提高灵敏度(降低漏诊率),金融领域可能更关心降低误报率(提高特异性),而具体的权衡取决于问题的特性和业务需求。

6.TPR、FPR与灵敏度、特异性的关系是什么?

灵敏度 = TPR
特异性 = 1 - FPR

7.ROC曲线在医学诊断中的应用

  • 疾病检测: ROC曲线用于评估医学测试在疾病检测中的性能,例如癌症筛查或感染病毒的检测。
  • 医学影像诊断: 在医学影像学中,ROC曲线用于评估医学图像解读的性能,例如X射线、CT扫描、MRI等。
  • 生物标志物研究: 在生物医学研究中,ROC曲线用于评估生物标志物(如蛋白质、基因或其他分子标志物)在区分疾病和健康状态方面的效力。
  • 治疗效果评估: 在评估治疗效果时,ROC曲线可用于确定疗效指标的有效性。例如,用于评估某种治疗方法是否降低患者患某种疾病的风险。

在这些应用中,ROC曲线提供了一个直观的方式来比较不同测试或模型的性能,同时考虑了灵敏度和特异性之间的权衡。这对于医学诊断中对高准确性和低误报率的要求非常重要。

8.在医学诊断应用中,如何权衡灵敏度和特异性

在医学诊断中,通过调整分类阈值来权衡灵敏度和特异性是通过观察 ROC 曲线实现的。通过调整分类阈值,可以在灵敏度和特异性之间找到平衡。在 ROC 曲线上,可以选择合适的工作点,该工作点对应于某个具体的阈值。选择不同的工作点可以实现不同的权衡,例如在更高灵敏度下,可能伴随着较低的特异性,反之亦然。
在实际应用中,医学专业人员可能根据具体的临床需求和病情特征来选择适当的工作点。例如,在癌症筛查中,可能更注重提高灵敏度以确保尽可能多地捕获患病者,而在某些特定的诊断测试中,可能更注重提高特异性以减少误报率。

9.一个简单的例子

**场景:**乳腺癌检测,该模型使用乳腺影像数据,对乳腺肿块进行二分类:恶性(癌症)和良性(非癌症)。
数据集: 使用了包含乳腺影像的数据集,其中每个样本都有相应的标签,指示是否为乳腺癌。
模型训练: 通过机器学习模型,训练了一个二分类器,该分类器可以预测肿块是良性还是恶性。
ROC 曲线: 使用测试集进行模型评估。通过调整分类阈值,得到不同的 FPR 和 TPR,绘制了 ROC 曲线。AUC反映了模型在不同阈值下的综合性能。
灵敏度和特异性: ROC 曲线上的不同点对应于不同的灵敏度和特异性。例如,某个点可能表示在较低的假阳性率(FPR)下达到较高的真阳性率(TPR),这可能是医学诊断中希望实现的平衡。
选择工作点: 医生或决策者可以根据具体情境选择适当的工作点。如果更关心尽量减少漏诊(将恶性病例错过),则可能选择一个更高的灵敏度。如果更关心减少误报(将良性病例错误地判定为癌症),则可能选择一个更高的特异性。通过观察 ROC 曲线,医生可以根据具体情境和患者需求调整阈值,以获得最符合实际应用需求的模型性能。

10.怎么用python实现

代码和输出如下:

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.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score, auc

# 生成虚构的医学诊断数据集
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.2, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测概率
y_probs = model.predict_proba(X_test)[:, 1]

# 计算 ROC 曲线的 FPR 和 TPR
fpr, tpr, thresholds = roc_curve(y_test, y_probs)

# 计算 AUC
roc_auc = auc(fpr, tpr)

# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = {:.2f})'.format(roc_auc))
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--', label='Random Guess')
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows 查看mysql的错误日志

查找错误日志文件存储路径 用到的软件&#xff1a;everything 官网 voidtools 下载路径 https://www.voidtools.com/Everything-1.4.1.1024.x64-Setup.exe 直接点击下载即可 运行效果如下 我们知道mysql有个配置文件是my.ini&#xff0c;里面配置了相关信息 我们需要先…

正反转马达驱动芯片D6287F,内置马达停止时省电电路及热保护电路 。最大驱动电流 达1.0A 。广泛用于VCRs及音频设备等 电机中

D6287F 是 一 块 正 反 转 马 达 驱 动 电 路 &#xff0c;两 种 逻 辑 输 入 方 式 可 控 制 马 达 的 正 转 、 反 转 、 停 止 、 中 断 等 。 内 置 马 达 停 止 时 省 电 电 路 及 热 保 护 电 路 。 最 大 驱 动 电 流 达 1.0A 。 广 泛 用 于 VCRs及 音 频 设 备 等 电…

阿里云新版公共实例从注册账号到创建设备生成参数教程

1 注册阿里云 打开阿里云官网&#xff0c;点击右上角的登录/注册 打开的界面按照图片输入手机号注册 注册成功后&#xff0c;登录返回第一次打开的界面&#xff0c;点击控制台 点击控制台后界面如下 点击左上角的菜单&#xff0c;弹出新窗口&#xff0c;搜索物联网平台 开通物…

Linux常用命令——pwd命令

文章目录 简介pwd命令的参数常见用法及实例1. 基本用法2. 使用 -P 参数3. 使用 -L 参数注意事项 结论 简介 pwd&#xff08;Print Working Directory&#xff09;是Linux和Unix系统中的一个常用命令&#xff0c;用于显示当前工作目录的完整路径。这个命令对于定位用户当前所在…

XUbuntu22.04之安装OBS30.0强大录屏工具(一百九十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

使用 JDBC 连接 Neo4j(头歌)

文章目录 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09;任务描述相关知识完成 JDBC 环境设置连接 Neo4j 对数据进行查询 编程要求测试说明答案测试前准备代码文件 第1关&#xff1a;连接 Neo4j &#xff08;JDBC&#xff09; 任务描述 本关任务&#xff1a;使用…

分布式仿真SNN的思考

我之前实现的仿真完全基于如下图设计的 将整体的网络构成见一个邻接表&#xff0c;突触和神经元作为类分别存储&#xff0c;所以当一个神经元发射脉冲时&#xff0c;很容易的将脉冲传输到突触指向的后神经元。但是在分布式方丈中&#xff0c;由多个进程仿真整体的网络&#xff…

浅谈智能配电房电力运维平台的开发与应用

安科瑞 华楠 摘 要&#xff1a;近年来&#xff0c;我国对电能的需求不断增加&#xff0c;智能电网建设越来越多。为实现对智能配电房设备运行状态的实时监测、态势觉察和态势可视化集中显示&#xff0c;基于智能配电房传感器和配电自动化站所终端单元&#xff08;DTU&#xf…

vue3 + mark.js | 实现文字标注功能

页面效果 具体实现 新增 1、监听鼠标抬起事件&#xff0c;通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位置。2、通过 选中的文字长度是否大于0或window.getSelection().isCollapsed (返回一个布尔值用于描述选区的起始点和终止点是否位于一个位置&…

STM32之定时器

目录 1、定时器介绍 1.定时器工作原理 2.定时器的分类 3.通用定时器主要功能介绍 4.定时器计数模式 5.定时器时钟源 6.定时器溢出时间计算公式 2、定时器中断的实验 codeMX的配置 代码编写 1.使用到的HAL库函数 1.中断回调函数需要我们重写 2. 在中断模式下启动TIM…

Echarts 设置数据条颜色 宽度

设置数据条颜色&#xff08;推荐&#xff09; let yData [{value: 500,time: 2012-11-12,itemStyle: //设置数据条颜色{normal: { color: red }}},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}]…

css 字体倾斜

css 字体倾斜 //左右倾斜 transform: skew(40deg, 0deg);//上下倾斜 transform: skew(0deg, 16deg);

SNAT / DNAT 自定义链

目录 linux 系统本身是没有转发功能&#xff0c;只有路由发送数据 NAT NAT的实现分为两类 SNAT SNAT 应用环境 SNAT 原理 SNAT 转换前提条件 例图参考 开启 SNAT 命令 临时开启 永久开启 修改 iptables 网卡 DNAT DNAT 应用环境 DNAT 原理 DNAT 转换前提条件 …

最新Midjourney绘画提示词Prompt

最新Midjourney绘画提示词Prompt 一、AI绘画工具 SparkAi【无需魔法使用】&#xff1a; SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&am…

java_springboot企业人事考勤请假管理信息系统rsglxx+jsp

&#xff08;1&#xff09;熟练掌握Java开发的原理和方法 &#xff08;2&#xff09;熟练学习掌握SSM框架 &#xff08;3&#xff09;熟悉软件开发的流程 &#xff08;4&#xff09;了解中内外互联网中所主流的技术 &#xff08;5&#xff09;深层次的了解计算机学科领域的知识…

深入了解Java8新特性-日期时间API之ChronoUnit、ChronoField

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概3000多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

基于AT89C51单片机的秒表设计

1&#xff0e;设计任务 利用单片机AT89C51设计秒表&#xff0c;设计计时长度为9:59:59&#xff0c;超过该长度&#xff0c;报警。创新&#xff1a;设置重启&#xff1b;暂停&#xff1b;清零等按钮。最后10s时播放音乐提示。 本设计是采用AT89C51单片机为中心&#xff0c;利用其…

Java arthas分析接口性能

一、环境准备 1、arthas文档&#xff1a; 简介 | arthas 2、下载arthas-boot.jar https://arthas.aliyun.com/arthas-boot.jar 二、启动arthas java -jar arthas-boot.jar 输入对应pid&#xff0c;进入对应服务 三、排查 1、执行命令&#xff1a; trac 类路径 方法名 tr…

万宾科技监测设备,可燃气体监测仪特点一览

万宾科技的监测设备种类繁多&#xff0c;包括可燃气体监测仪、管网水位监测仪、内涝积水监测仪等。其中可燃气体监测仪是万宾科技的核心产品之一&#xff0c;用于监测环境中可燃气体的浓度&#xff0c;适用于对甲烷气体浓度进行实时监测&#xff0c;应用于燃气管网、排水管网、…

【快速见刊|投稿优惠】2024年机电一体与自动化技术国际学术会议(IACMAT 2024)

2024年机电一体与自动化技术国际学术会议(IACMAT 2024) 2024 International Academic Conference on Mechatronics and Automation Technology(IACMAT 2024) 一【会议简介】 2024年机电一体与自动化技术国际学术会议(IACMAT 2024)即将召开&#xff0c;它以“机电一体&#xff0…
最新文章