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

机器学习-ROC曲线​​ 和 ​​AUC指标

1. 什么是ROC曲线?​

ROC(Receiver Operating Characteristic,受试者工作特征曲线)是用来评估​​分类模型性能​​的一种方法,特别是针对​​二分类问题​​(比如“患病”或“健康”)。

​核心思想​

  • ROC曲线通过改变​​分类阈值​​(即模型预测为“正类”的概率界限),观察模型的​​真正例率(TPR)​​和​​假正例率(FPR)​​的变化。
  • ​TPR(True Positive Rate)​​ = 真正例 / 所有实际正例
    (正确识别出病人的比例)
  • ​FPR(False Positive Rate)​​ = 假正例 / 所有实际负例
    (把健康人误诊为病人的比例)

​例子:医生诊断病人​

假设我们有10个病人,其中​​4个真的患病(正类)​​,​​6个健康(负类)​​。医生(模型)对每个病人给出一个​​患病概率​​(0~1之间的值)。

病人实际状态模型预测概率
1患病0.9
2患病0.8
3患病0.7
4患病0.6
5健康0.55
6健康0.54
7健康0.53
8健康0.52
9健康0.51
10健康0.5

​问题​​:医生应该设置一个阈值(比如0.6),把概率≥0.6的病人判定为“患病”,否则“健康”。但这个阈值选多少最好呢?ROC曲线就帮我们分析不同阈值下的表现。


​2. 如何画ROC曲线?​

我们调整​​阈值​​,计算不同阈值下的​​TPR和FPR​​,然后画出曲线:

阈值预测结果(≥阈值=患病)TPR(真正例率)FPR(假正例率)
0.9[1]1/4 = 0.250/6 = 0
0.8[1,2]2/4 = 0.50/6 = 0
0.7[1,2,3]3/4 = 0.750/6 = 0
0.6[1,2,3,4]4/4 = 1.00/6 = 0
0.55[1,2,3,4,5]4/4 = 1.01/6 ≈ 0.167
0.54[1,2,3,4,5,6]4/4 = 1.02/6 ≈ 0.333
............

​ROC曲线​​就是把所有(FPR, TPR)点连起来:

  • ​横轴(X)​​:FPR(假正例率)
  • ​纵轴(Y)​​:TPR(真正例率)

​理想情况​​:曲线越靠近左上角(TPR高,FPR低),模型越好。


​3. 什么是AUC?​

AUC(Area Under Curve,曲线下面积)是ROC曲线下的面积,范围在​​0~1​​:

  • ​AUC=1​​:完美模型(所有病人都被正确识别,没有误诊)
  • ​AUC=0.5​​:随机猜测(和抛硬币一样,没有区分能力)
  • ​AUC=0​​:完全反了(把病人当成健康,健康当成病人)

​例子​​:

  • 如果AUC=0.9,说明模型很好。
  • 如果AUC=0.6,说明模型一般。
  • 如果AUC=0.5,说明模型和随机猜测差不多。

​4. Python代码实现​

我们用sklearn计算ROC曲线和AUC:

import numpy as np from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 实际标签(1=患病,0=健康) y_true = np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0]) # 模型预测概率 y_scores = np.array([0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.52, 0.51, 0.5]) # 计算ROC曲线 fpr, tpr, thresholds = roc_curve(y_true, y_scores) # 计算AUC roc_auc = auc(fpr, tpr) # 画图 plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (AUC = {roc_auc:.2f})') plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') # 随机猜测的线 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()
 

​输出结果​​:

  • 你会看到一条ROC曲线,AUC值会显示在图上(比如AUC=1.0,因为这个例子数据简单)。

​5. 总结​

概念解释
​ROC曲线​不同阈值下的TPR vs FPR曲线
​AUC​ROC曲线下的面积,衡量模型区分能力
​理想情况​AUC接近1,曲线靠近左上角
​随机猜测​AUC=0.5,曲线是45度直线

​适用场景​​:

  • 医学诊断(患病/健康)
  • 垃圾邮件检测(垃圾/正常)
  • 金融风控(欺诈/正常)

希望这个例子能让你轻松理解ROC和AUC!如果有疑问,欢迎继续讨论 😊

http://www.lryc.cn/news/2402346.html

相关文章:

  • Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast
  • 【学习记录】深入解析 AI 交互中的五大核心概念:Prompt、Agent、MCP、Function Calling 与 Tools
  • 如何有效删除 iPhone 上的所有内容?
  • AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用
  • 操作系统中的设备管理,Linux下的I/O
  • 炉石传说 第八次CCF-CSP计算机软件能力认证
  • AI应用工程师面试
  • LabVIEW与Modbus/TCP温湿度监控系统
  • Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强
  • 自主设计一个DDS信号发生器
  • 鸿蒙UI(ArkUI-方舟UI框架)- 使用弹框
  • 学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]
  • 在不同型号的手机或平板上后台运行Aidlux
  • 【SSM】SpringBoot学习笔记1:SpringBoot快速入门
  • 1.企业可观测性监控三大支柱及开源方案的横评对比
  • Neo4j图数据库管理:原理、技术与最佳实践
  • Elasticsearch中的地理空间(Geo)数据类型介绍
  • [论文阅读] 软件工程 | 如何挖掘可解释性需求?三种方法的深度对比研究
  • 双空间知识蒸馏用于大语言模型
  • OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()
  • Git 提交备注应该如何规范
  • 青少年编程与数学 02-020 C#程序设计基础 17课题、WEB与移动开发
  • Qt OpenGL 实现交互功能(如鼠标、键盘操作)
  • 【Go语言基础【3】】变量、常量、值类型与引用类型
  • 8天Python从入门到精通【itheima】-69~70(字符串的常见定义和操作+案例练习)
  • 在 Linux 中查看文件并过滤空行
  • GC1809:高性能音频接收与转换芯片
  • 项目实战——C语言扫雷游戏
  • 【Java】CopyOnWriteArrayList
  • 【JS进阶】ES6 实现继承的方式