当前位置: 首页 > article >正文

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

在医学研究中,我们常常需要评估诊断试验或预测模型的性能。而 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 曲线的含义和绘制方法,从而在医学研究中更加准确地评估诊断试验和预测模型的性能。

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

 

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


http://www.kler.cn/a/372083.html

相关文章:

  • Pytorch学习--神经网络--线性层及其他层
  • ReactNative Fabric渲染器和组件(5)
  • Mac程序坞窗口预览的方法来了
  • java-数据结构
  • 信息安全工程师(72)网络安全风险评估概述
  • C语言(一维数组)
  • 操作系统学习笔记-2.3哲学家和管程问题
  • MaxKB: 一款基于大语言模型的知识库问答系统
  • WPF拖拽交互全攻略及实现自定义拖拽控件及数据交换技巧解析
  • 【SSM详细教程】-15-Spring Restful风格【无敌详细】
  • OpenCV基本操作(python开发)——(7)实现图像校正
  • ios 快捷指令扩展(Intents Extension)简单使用 swift语言
  • 北航软件工程考研难度分析!
  • 依托微信小程序,畅享校园二手交易
  • 面试宝典(五):用三个线程按顺序循环打印123三个数字,比如123123123
  • 推荐一款优秀的pdf编辑器:Ashampoo PDF Pro
  • Mac OS 搭建MySQL开发环境
  • [蓝桥杯 2015 省 A] 饮料换购
  • java装饰器设计模式
  • 【测试平台】打包 jenkins配置和jenkinsfile文件
  • 2023IKCEST第五届“一带一路”国际大数据竞赛--社交网络中多模态虚假 媒体内容核查top11
  • 在绑定 Google 邮箱的手机设备上,未收到二步验证码通知是什么原因?
  • Scala练习50题(基础入门)
  • 前端八股文第一篇
  • 法律智能助手:开源NLP系统助力法律文件高效审查与检索
  • MATLAB语音信号处理系统