【详细教程】ROC曲线的计算方式与绘制方法详细介绍

发布于:2025-05-08 ⋅ 阅读:(81) ⋅ 点赞:(0)

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称 项目名称
1.【人脸识别与管理系统开发 2.【车牌识别与自动收费管理系统开发
3.【手势识别系统开发 4.【人脸面部活体检测系统开发
5.【图片风格快速迁移软件开发 6.【人脸表表情识别系统
7.【YOLOv8多目标识别与自动标注软件开发 8.【基于深度学习的行人跌倒检测系统
9.【基于深度学习的PCB板缺陷检测系统 10.【基于深度学习的生活垃圾分类目标检测系统
11.【基于深度学习的安全帽目标检测系统 12.【基于深度学习的120种犬类检测与识别系统
13.【基于深度学习的路面坑洞检测系统 14.【基于深度学习的火焰烟雾检测系统
15.【基于深度学习的钢材表面缺陷检测系统 16.【基于深度学习的舰船目标分类检测系统
17.【基于深度学习的西红柿成熟度检测系统 18.【基于深度学习的血细胞检测与计数系统
19.【基于深度学习的吸烟/抽烟行为检测系统 20.【基于深度学习的水稻害虫检测与识别系统
21.【基于深度学习的高精度车辆行人检测与计数系统 22.【基于深度学习的路面标志线检测与识别系统
23.【基于深度学习的智能小麦害虫检测识别系统 24.【基于深度学习的智能玉米害虫检测识别系统
25.【基于深度学习的200种鸟类智能检测与识别系统 26.【基于深度学习的45种交通标志智能检测与识别系统
27.【基于深度学习的人脸面部表情识别系统 28.【基于深度学习的苹果叶片病害智能诊断系统
29.【基于深度学习的智能肺炎诊断系统 30.【基于深度学习的葡萄簇目标检测系统
31.【基于深度学习的100种中草药智能识别系统 32.【基于深度学习的102种花卉智能识别系统
33.【基于深度学习的100种蝴蝶智能识别系统 34.【基于深度学习的水稻叶片病害智能诊断系统
35.【基于与ByteTrack的车辆行人多目标检测与追踪系统 36.【基于深度学习的智能草莓病害检测与分割系统
37.【基于深度学习的复杂场景下船舶目标检测系统 38.【基于深度学习的农作物幼苗与杂草检测系统
39.【基于深度学习的智能道路裂缝检测与分析系统 40.【基于深度学习的葡萄病害智能诊断与防治系统
41.【基于深度学习的遥感地理空间物体检测系统 42.【基于深度学习的无人机视角地面物体检测系统
43.【基于深度学习的木薯病害智能诊断与防治系统 44.【基于深度学习的野外火焰烟雾检测系统
45.【基于深度学习的脑肿瘤智能检测系统 46.【基于深度学习的玉米叶片病害智能诊断与防治系统
47.【基于深度学习的橙子病害智能诊断与防治系统 48.【基于深度学习的车辆检测追踪与流量计数系统
49.【基于深度学习的行人检测追踪与双向流量计数系统 50.【基于深度学习的反光衣检测与预警系统
51.【基于深度学习的危险区域人员闯入检测与报警系统 52.【基于深度学习的高密度人脸智能检测与统计系统
53.【基于深度学习的CT扫描图像肾结石智能检测系统 54.【基于深度学习的水果智能检测系统
55.【基于深度学习的水果质量好坏智能检测系统 56.【基于深度学习的蔬菜目标检测与识别系统
57.【基于深度学习的非机动车驾驶员头盔检测系统 58.【太基于深度学习的阳能电池板检测与分析系统
59.【基于深度学习的工业螺栓螺母检测 60.【基于深度学习的金属焊缝缺陷检测系统
61.【基于深度学习的链条缺陷检测与识别系统 62.【基于深度学习的交通信号灯检测识别
63.【基于深度学习的草莓成熟度检测与识别系统 64.【基于深度学习的水下海生物检测识别系统
65.【基于深度学习的道路交通事故检测识别系统 66.【基于深度学习的安检X光危险品检测与识别系统
67.【基于深度学习的农作物类别检测与识别系统 68.【基于深度学习的危险驾驶行为检测识别系统
69.【基于深度学习的维修工具检测识别系统 70.【基于深度学习的维修工具检测识别系统
71.【基于深度学习的建筑墙面损伤检测系统 72.【基于深度学习的煤矿传送带异物检测系统
73.【基于深度学习的老鼠智能检测系统 74.【基于深度学习的水面垃圾智能检测识别系统
75.【基于深度学习的遥感视角船只智能检测系统 76.【基于深度学习的胃肠道息肉智能检测分割与诊断系统
77.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统 78.【基于深度学习的心脏超声图像间隔壁检测分割与分析系统
79.【基于深度学习的果园苹果检测与计数系统 80.【基于深度学习的半导体芯片缺陷检测系统
81.【基于深度学习的糖尿病视网膜病变检测与诊断系统 82.【基于深度学习的运动鞋品牌检测与识别系统
83.【基于深度学习的苹果叶片病害检测识别系统 84.【基于深度学习的医学X光骨折检测与语音提示系统
85.【基于深度学习的遥感视角农田检测与分割系统 86.【基于深度学习的运动品牌LOGO检测与识别系统
87.【基于深度学习的电瓶车进电梯检测与语音提示系统 88.【基于深度学习的遥感视角地面房屋建筑检测分割与分析系统
89.【基于深度学习的医学CT图像肺结节智能检测与语音提示系统 90.【基于深度学习的舌苔舌象检测识别与诊断系统
91.【基于深度学习的蛀牙智能检测与语音提示系统 92.【基于深度学习的皮肤癌智能检测与语音提示系统

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

ROC介绍

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的工具,通过绘制不同阈值下的真阳性率(TPR)和假阳性率(FPR)来直观反映模型的分类能力。以下是其基本原理和分步骤示例:


1. 基本原理

在这里插入图片描述

  • 核心指标
    • 真阳性率(TPR) T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP,表示实际为正例的样本中被正确预测的比例。TPR越大意味着TP越大,也就意味着对于测试样本中的所有正例来说,其中大部分都被学习器预测正确。
    • 假阳性率(FPR) F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP,表示实际为负例的样本中被错误预测的比例。FPR越小意味着FP越小、TN越大,也就意味着FPR越小,则对于测试样例中的所有反例来说,其中大部分被学习器预测正确。
  • ROC曲线:以FPR为横轴、TPR为纵轴,通过调整分类阈值生成一系列点并连接成曲线。曲线越靠近左上角,模型性能越好。一个好的模型是TPR大PFR偏小的。

2. 示例

步骤1:准备数据

假设有以下测试集预测结果(二分类):

样本 预测概率(正类) 真实标签
A 0.95 1
B 0.85 1
C 0.70 0
D 0.55 1
E 0.30 0

上述表格中,第一列代表样本名称;第二列代表预测为样本被预测为正例的概率;第三列代表样本的真实标签,1代表正例,0代表负例。
正例数目:P=3
负例数目:N=2

步骤2:排序与阈值选择

将样本按预测概率从高到低排序,依次以每个概率值为阈值计算TPR和FPR:

  1. 阈值=0.95
    • 预测为正例:A(TP=1),其余为负例(FN=2【B,D】, FP=0, TN=2【C,E】)。
    • T P R = 1 / 3 ≈ 0.33 TPR = 1/3 \approx 0.33 TPR=1/30.33, F P R = 0 / 2 = 0 FPR = 0/2 = 0 FPR=0/2=0
  2. 阈值=0.85
    • 预测为正例:A, B(TP=2),其余为负例(FN=1【D】, FP=0, TN=2【C,E】)。
    • T P R = 2 / 3 ≈ 0.67 TPR = 2/3 \approx 0.67 TPR=2/30.67, F P R = 0 / 2 = 0 FPR = 0/2=0 FPR=0/2=0
  3. 阈值=0.70
    • 预测为正例:A, B, C(TP=2【A,B】, FP=1【C】),其余为负例(FN=1【D】, TN=1【E】)。
    • T P R = 2 / 3 ≈ 0.67 TPR = 2/3 \approx 0.67 TPR=2/30.67, F P R = 1 / 2 = 0.5 FPR = 1/2 = 0.5 FPR=1/2=0.5
  4. 阈值=0.55
    • 预测为正例:A, B, D(TP=3【A,B,D】, FP=1【C】),其余为负例(FN=0, TN=1【E】)。
    • T P R = 1 TPR = 1 TPR=1, F P R = 1 / 2 = 0.5 FPR = 1/2 =0.5 FPR=1/2=0.5
  5. 阈值=0.30
    • 所有样本为正例(TP=3【A,B,D】, FP=2【C,E】),FN=0,TN=0。
    • T P R = 1 TPR = 1 TPR=1, F P R = 1 FPR = 1 FPR=1

步骤3:绘制ROC曲线

将上述(FPR, TPR)点连接成曲线:

  • 点序列:(0, 0.33), (0, 0.67), (0.5, 0.67), (0.5, 1), (1, 1)。
  • AUC计算:通过梯形法或曼-惠特尼U统计量计算曲线下面积(本例AUC≈0.83)。

3.代码实现

下面我们通过代码实现ROC曲线的绘制以及AUC面积计算。

# --coding:utf-8--
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TkAgg')

# 真实标签
y_true = [1, 1, 0, 1, 0]
# 每个标签预测为正例的概率
y_score = [0.95, 0.85, 0.70, 0.55, 0.30]

fpr, tpr, _ = roc_curve(y_true, y_score)
roc_auc = auc(fpr, tpr)

plt.plot(fpr, tpr, label=f'ROC (AUC={roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'k--')  # 随机分类线
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.legend()
plt.show()

运行结果:
在这里插入图片描述


4. 关键点总结

  • 阈值选择:ROC曲线通过遍历所有可能的阈值生成,反映模型在不同误判代价下的表现。
  • AUC意义:AUC值越接近1,模型区分能力越强;0.5表示无判别力。
  • 多分类扩展:可通过OvR策略为每个类别单独绘制ROC曲线。

通过上述步骤,可以清晰理解ROC曲线的计算逻辑和实际应用。


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!