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

机器学习--ROC AUC

参考

机器学习-ROC曲线 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/81202617

在了解之前,我们先来认识一下以下的概念

针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况:

(1)TP(True Postive):是正类并且被预测为正类

(2)FN(False Negative):是正类,但是被预测成为负类

(3)FP(False Postive):是负类,但是被预测成为正类

(4)TN(True Negative):是负类,但是被预测成为负类

1.ROC曲线的定义

ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”,顾名思义,其主要的分析方法就是画这条特征曲线。

它显示了在不同阈值下真正例率(True Positive Rate,也称为召回率)与假正例率(False Positive Rate)之间的关系。

横轴:假正类率 (false postive rate, FPR),特异度,划分实例中所有负例占所有负例的比例;TNR=1-FPR。

纵轴:真正类率 ==Recall(true postive rate, TPR),灵敏度,Sensitivity(正类覆盖率)

ROC 曲线中横轴和纵轴的含义以及与阈值的关系。

阈值

举一个雷达兵的例子。每一个雷达兵用的都是同一台雷达返回的结果,但是每一个雷达兵内心对其属于敌军轰炸机的判断是不一样的,可能1号兵解析后认为结果大于0.9,就是轰炸机,2号兵解析后认为结果大于0.85,就是轰炸机,依次类推,每一个雷达兵内心都有自己的一个判断标准(也即对应分类器的不同“阈值”),这样针对每一个雷达兵,都能计算出一个ROC曲线上的关键点(一组FPR,TPR值),把大家的点连起来,也就是最早的ROC曲线了。

当改变分类器的阈值时,会影响到对正例和负例的界定,从而影响到分类器的性能。

一般来说,降低阈值会增加真正例率(TPR),但也会导致增加假正例率(FPR)。ROC 曲线展示了在不同阈值下这种权衡关系。

具体来说,当阈值设定得很低时,分类器可能会将大部分样本判定为正例,这会提高真正例率(TPR),但也会导致增加假正例率(FPR)。

相反,当阈值设定得很高时,分类器可能只将少数样本判定为正例,这会降低真正例率(TPR),但也会导致减少假正例率(FPR)。

ROC 曲线展示了在所有可能阈值下 TPR 和 FPR 的变化情况,帮助我们理解分类器在不同判定标准下的性能表现。

ROC曲线绘制了在不同阈值下的TPR和FPR之间的折衷关系。曲线越靠近左上角(0,1)处,分类器性能越好,因为在这个点处TPR最大,而FPR最小。

AUC(Area Under the Curve):是ROC曲线下的面积,用来衡量分类器性能的一个数值。AUC值的范围在0到1之间,完美分类器的AUC值为1,随机猜测的分类器的AUC值为0.5。

2. 代码演示

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt# 生成模拟数据集
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_pred_proba = model.predict_proba(X_test)[:, 1]# 计算 ROC 曲线的各项指标
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
auc = roc_auc_score(y_test, y_pred_proba)# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'ROC curve (AUC = {auc:.2f})', color='orange')
plt.stackplot(fpr, tpr, color='skyblue', alpha=0.3)  # 添加阴影效果
plt.text(0.6, 0.4, f'AUC = {auc:.3f}', fontdict=dict(size=12))  # 添加文本标签
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()print(f"AUC值为: {auc:.4f}")

结果展示

3. 一些其他地模型评估参数

a. 准确率(Accuracy)

所有预测正确的和所有test集的比例

b. 精确率(Precision)

也称为查准率,表示分类器预测为正类别的样本中有多少确实属于正类别的比例。

计算公式为:Precision = TP / (TP + FP)

c.召回率(Recall)

也称为查全率或灵敏度,表示实际为正类别的样本中被分类器预测为正类别的比例。

计算公式为:Recall = TP / (TP + FN)

d.F1分数(F1-score)

是精确率和召回率的调和平均值,综合考虑了两者的性能。

F1-score的取值范围在0到1之间,是精确率和召回率的平衡指标。

计算公式为:F1-score = 2 * (Precision * Recall) / (Precision + Recall)。

相关文章:

  • Axure骚操作:【制作可暂停与不可暂停进度加载条】
  • git 常用命令 提交commit
  • Python 工具 | pip 基本命令
  • leetcode算法题之递归--综合练习(二)
  • Go中interface != nil不一定不是nil
  • 【MySQL】MySQL 8+版本使用窗口函数可以减少一次连表操作(额外Avg函数和Using函数使用,Using关键字参考里自行了解)
  • ChatGPT在金融财务领域的10种应用方法
  • 柯桥学韩语【韩语网络用语】听说最近的年轻人都重视슬세권,역세권....吗?
  • vite4项目中,vant兼容750适配
  • C++中几个常用的类型选择模板函数
  • 【Java】java -jar 读取jar包之外的yml
  • 28 C++ 对象移动,移动构造函数,移动赋值运算符
  • 关于axios的二次封装
  • Kafka安全认证机制详解之SASL_PLAIN
  • Vue2/Vue3-插槽(全)
  • $translatePartialLoader加载失败及解决方式
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • CentOS 7 防火墙操作
  • ES6系统学习----从Apollo Client看解构赋值
  • Fundebug计费标准解释:事件数是如何定义的?
  • Js基础知识(四) - js运行原理与机制
  • mysql 5.6 原生Online DDL解析
  • MySQL数据库运维之数据恢复
  • Theano - 导数
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从setTimeout-setInterval看JS线程
  • 诡异!React stopPropagation失灵
  • 技术:超级实用的电脑小技巧
  • 简单数学运算程序(不定期更新)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 配置 PM2 实现代码自动发布
  • 前端相关框架总和
  • 微信开放平台全网发布【失败】的几点排查方法
  • 新书推荐|Windows黑客编程技术详解
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 【云吞铺子】性能抖动剖析(二)
  • AI算硅基生命吗,为什么?
  • ​渐进式Web应用PWA的未来
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (3)(3.5) 遥测无线电区域条例
  • (pojstep1.3.1)1017(构造法模拟)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)基于IDEA的JAVA基础12
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理