首页 > 其他分享 >ROC 曲线:医学研究中的得力助手

ROC 曲线:医学研究中的得力助手

时间:2024-10-30 20:52:09浏览次数:5  
标签:plt fpr ROC train 得力助手 曲线 test

在医学研究中,我们常常需要评估诊断试验或预测模型的性能。而 ROC 曲线(Receiver Operating Characteristic curve)就是一种非常有用的工具,它可以帮助我们直观地了解模型的准确性和可靠性。

一、ROC 曲线的含义

ROC 曲线是一种以假阳性率(False Positive Rate, FPR)为横轴,真阳性率(True Positive Rate, TPR)为纵轴的曲线。它通过改变分类器的阈值,计算出不同阈值下的 FPR 和 TPR,从而绘制出一条曲线。

FPR 表示在所有实际为阴性的样本中,被错误地判断为阳性的比例。TPR 表示在所有实际为阳性的样本中,被正确地判断为阳性的比例。

ROC 曲线的主要作用是评估分类器的性能。一个理想的分类器应该在 ROC 曲线上尽可能地靠近左上角,即 TPR 高而 FPR 低。而一个随机分类器的 ROC 曲线则是一条从原点到(1,1)的对角线。

二、绘制 ROC 曲线的方法

下面我们将使用 Python 语言中的 scikit-learn 库来绘制 ROC 曲线。首先,我们需要导入一些必要的库和模块:

import numpy as np
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, auc
import matplotlib.pyplot as plt

接下来,我们将生成一个模拟的数据集,并将其划分为训练集和测试集:

# 生成模拟数据
# n_samples:样本数量
# n_features:特征数量
# random_state:随机种子
X, y = make_classification(n_samples=1000, n_features=4, random_state=0)

# 将数据集划分为训练集和测试集
# test_size:测试集的比例
# random_state:随机种子
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

然后,我们将使用逻辑回归模型对训练集进行训练,并对测试集进行预测:

# 训练分类器
# LogisticRegression:逻辑回归模型
clf = LogisticRegression()

# 拟合训练数据
clf.fit(X_train, y_train)

# 计算测试集的预测概率
# predict_proba:返回预测概率
y_test_pred_prob = clf.predict_proba(X_test)[:, 1]

最后,我们将使用 roc_curve 函数计算测试集的 ROC 曲线,并使用 auc 函数计算曲线下的面积(AUC):

# 计算测试集的 ROC 曲线
fpr_test, tpr_test, thresholds_test = roc_curve(y_test, y_test_pred_prob)

# 计算测试集的 AUC 值
roc_auc_test = auc(fpr_test, tpr_test)

现在,我们已经得到了测试集的 ROC 曲线和 AUC 值。接下来,我们将使用 matplotlib 库来绘制 ROC 曲线:

# 绘制 ROC 曲线
plt.figure()
lw = 2
plt.plot(fpr_test, tpr_test, color='blue',
         lw=lw, label='Test ROC (AUC = %0.2f)' % roc_auc_test)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([-0.01, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()

运行以上代码,我们将得到一个包含 ROC 曲线和 AUC 值的图形,如下所示:

从图中可以看出,我们绘制的 ROC 曲线位于对角线的上方,说明我们的模型具有一定的预测能力。而 AUC 值为 0.99,表示模型的准确性非常高。

三、多 ROC 曲线的绘制方法

在某些情况下,我们可能希望在一张图中同时显示测试集与训练集的 ROC 曲线,以方便两者的对比,下面我们对上述代码进行修改便可以得到。

import numpy as np
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, auc
import matplotlib.pyplot as plt

# 使用 make_classification 函数生成模拟数据集
# n_samples=1000 表示生成 1000 个样本
# n_features=4 表示每个样本有 4 个特征
# random_state=0 用于设置随机种子,保证结果的可重复性
X, y = make_classification(n_samples=1000, n_features=4, random_state=0)

# 使用 train_test_split 函数将数据集划分为训练集和测试集
# test_size=0.3 表示测试集占总样本数的 30%
# random_state=0 用于设置随机种子,保证结果的可重复性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 创建 LogisticRegression 类的实例 clf,用于构建逻辑回归模型
clf = LogisticRegression()
clf.fit(X_train, y_train)

# 使用训练好的模型对训练集进行预测,得到预测概率
# predict_proba 方法返回一个二维数组,每行表示一个样本的预测概率
# 取第二列(索引为 1),即正类的预测概率
y_train_pred_prob = clf.predict_proba(X_train)[:, 1]

# 使用 roc_curve 函数计算训练集的 ROC 曲线
# y_train 是训练集的真实标签
# y_train_pred_prob 是训练集的正类预测概率
# 返回值 fpr_train 是假阳性率,tpr_train 是真阳性率,thresholds_train 是阈值
fpr_train, tpr_train, thresholds_train = roc_curve(y_train, y_train_pred_prob)

# 使用 auc 函数计算训练集的 AUC 值
# fpr_train 是假阳性率,tpr_train 是真阳性率
# AUC 值是 ROC 曲线下的面积,用于衡量模型的性能
roc_auc_train = auc(fpr_train, tpr_train)

# 使用训练好的模型对测试集进行预测,得到预测概率
# 取第二列(索引为 1),即正类的预测概率
y_test_pred_prob = clf.predict_proba(X_test)[:, 1]

# 使用 roc_curve 函数计算测试集的 ROC 曲线
# y_test 是测试集的真实标签
# y_test_pred_prob 是测试集的正类预测概率
# 返回值 fpr_test 是假阳性率,tpr_test 是真阳性率,thresholds_test 是阈值
fpr_test, tpr_test, thresholds_test = roc_curve(y_test, y_test_pred_prob)

# 使用 auc 函数计算测试集的 AUC 值
# fpr_test 是假阳性率,tpr_test 是真阳性率
# AUC 值是 ROC 曲线下的面积,用于衡量模型的性能
roc_auc_test = auc(fpr_test, tpr_test)

# 创建一个新的图形
plt.figure(figsize=(10, 8))
lw = 2  # 设置线宽为 2
# 绘制训练集的 ROC 曲线
# fpr_train 是假阳性率,tpr_train 是真阳性率
# color='red' 设置曲线颜色为红色
plt.plot(fpr_train, tpr_train, color='red',
         lw=lw, label='Train ROC (AUC = %0.2f)' % roc_auc_train)

# 绘制测试集的 ROC 曲线
# fpr_test 是假阳性率,tpr_test 是真阳性率
# color='blue' 设置曲线颜色为蓝色
plt.plot(fpr_test, tpr_test, color='blue',
         lw=lw, label='Test ROC (AUC = %0.2f)' % roc_auc_test)

# 绘制对角线
# [0, 1] 表示 x 轴和 y 轴的范围
# color='navy' 设置颜色为深蓝色
# linestyle='--' 设置线条样式为虚线
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')

# 设置 x 轴的范围为 -0.01 到 1.0
plt.xlim([-0.01, 1.0])
# 设置 y 轴的范围为 0.0 到 1.05
plt.ylim([0.0, 1.05])

# 设置 x 轴的标签为 False Positive Rate
plt.xlabel('False Positive Rate')
# 设置 y 轴的标签为 True Positive Rate
plt.ylabel('True Positive Rate')

# 设置图形的标题为 Receiver operating characteristic
plt.title('Receiver operating characteristic')
# 设置图例的位置为右下角
plt.legend(loc="lower right")

plt.show()

运行以上代码,我们将得到一个同时包含测试集和训练集 ROC 曲线和 AUC 值的图形,如下所示:

四、总结

ROC 曲线是一种非常有用的工具,它可以帮助我们直观地了解模型的准确性和可靠性。通过绘制 ROC 曲线,我们可以选择一个合适的阈值,以达到最佳的预测效果。同时,AUC 值也可以作为一个衡量模型性能的指标,帮助我们比较不同模型之间的优劣。

希望这篇博客能够帮助大家更好地理解 ROC 曲线的含义和绘制方法,从而在医学研究中更加准确地评估诊断试验和预测模型的性能。

希望这篇文章能够成为您在数据分析和可视化道路上的得力助手。如果您在阅读过程中遇到任何问题,或者对某些主题有更深入探讨的想法,欢迎在评论区留言或者私信,我们会及时回复您。感谢您的阅读,我们下期再见!

 

同时,欢迎关注公众号 “栋研医数”,我们会持续为您更新更多精彩的数据分析内容,帮助您在医学研究领域不断提升自己的技能和知识。

标签:plt,fpr,ROC,train,得力助手,曲线,test
From: https://blog.csdn.net/qq_38844835/article/details/143373527

相关文章

  • 【java应用】jmeter玩法:BeanShell PreProcessor入口及常用方法介绍
    原创方知本知从零做软件测试现在的系统,信息安全性都在加强。因此,利用Jmeter进行接口压测的时候,通常需要实现模拟登录接口的加密功能。本系列文将介绍如何利用BeanShellPreProcessor实现AES、MD5以及RSA三种加密方法。1.1BeanShellPreProcessor入口在请求中添加前置处理......
  • rocket实现文件单/多文件上传
    单文件和多文件html的区别就是multipletoml[dependencies]rocket="0.5.1"[package.metadata.rocket]config="Rocket.toml"Rocket.toml配置文件上传的大小限制#Rocket.toml[default.limits]form="160MB"#设置文件上传的最大大小为16MBdata-form="160......
  • 科普文:软件架构网络系列之【信创:SAN 交换机“卡脖子”,RoCE V2 成破局关键】
    概叙目前,不少企业数据中心使用FC交换机和集中式SAN存储(以下简称“FC-SAN架构”),支持核心业务系统、数据库、AI/ML等高性能业务场景。科普文:软件架构Linux系列之【非信创方案VMAX250F:城商行核心存储系统升级改造和统一存储监控实现实践分享】李军华-CSDN博客而在开展IT......
  • 【RocketMQ】消息的发送过程之 Broker 故障延迟或者容错机制
    1  前言上节我们主要看了下消息生产者的启动以及消息的发送过程,内容比较多,篇幅比较长,有一些细节没看到,比如Broker的故障延迟机制,所以这节我们就单独来看一下这块内容。还有我们要知道的是,这个机制默认是关闭的://ClientConfig/***开启消息发送的客户端容错机制*Ena......
  • 安装配置rocky Linux 9.4的环境
    安装RockyLinux9.4系统:由于centos7已经停止技术支持,作为代替的技术选型探索,选用centos创始人发起的rockylinux作为平替进行测试验证。1.在虚拟机中安装完系统后,首先替换阿里云源,但是出现了SSL的报错。所以正确的配置顺序应该是确保系统的ca-certificates软件包是最新的,这......
  • Process finished with exit code -1 是什么意思
    “Processfinishedwithexitcode-1″是指程序在执行过程中以非正常的退出码(exitcode)结束。在计算机编程中,进程的退出码是一个整数值,通常用于指示程序的执行状态。负数的退出码通常表示程序遇到了错误或异常情况而非正常终止。1.“Processfinishedwithexitcode-1″的......
  • ImportError: DLL load failed while importing _errors: The specified procedure co
    importh5pyImportError:DLLloadfailedwhileimporting_errors:Thespecifiedprocedurecouldnotbefound. ImportError                              Traceback(mostrecentcalllast)CellIn[2],line1---->1importh5pyFile......
  • linux下/proc/meminfo解读
    /proc/meminfo 文件显示了系统的详细内存使用信息。它提供了比 free 命令更深入的视角,帮助你理解内存的使用情况。下面是各个字段的详细解释:内存相关字段解释MemTotal:物理内存总量。这里是 46804kB,约为 46MB。MemFree:未被分配的内存量(空闲内存)。显示 2352kB,即约......
  • HTMP-High Temperature Materials and Processes
    @目录一、征稿简介二、重要信息三、服务简述四、投稿须知一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述HighTemperatureMaterialsandProcesses为科学技术领域与高温材料和工艺相关的新想法、见解和成果提供了一个国际出版论坛。该杂志发表原......
  • AGV电子地图之使用贝塞尔曲线画高级地图
    AGV电子地图之使用贝塞尔曲线画高级地图_哔哩哔哩_bilibili点击关注不迷路,你的关注是我们最大的动力。一个AGV地图的示例二、怎么用贝塞尔曲线画不规则形状三、示例代码 <PathStroke="Black"StrokeThickness="2"Fill="Transparent">   <Path.Data>   ......