5.ROC-AUC机器学习模型性能的常用的评估指标

最近回顾机器学习基础知识部分的时候,看到了用于评估机器学习模型性能的ROC曲线。再次记录一下,想起之前学习的时候的茫然,希望这次可以更加清晰的了解这一指标。上课的时候听老师提起过,当时没有认真去看,所以这次可以全面的理解,并做些总结。

一.ROC-AUC的介绍

1.1 ROC的简单介绍

ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,最初由二战中的电子工程师和雷达工程师发明,用于侦测战场上的敌军载具,例如飞机和船舰。该曲线最早应用于信号检测理论,随后被引入心理学领域,用于研究信号的知觉检测。由于其在评估分类和检测结果方面的有效性,ROC曲线很快在机器学习领域得到了广泛应用。因此,ROC曲线成为了一种重要且常见的统计分析方法。

ROC(Receiver Operating Characteristic)曲线和AUC(Area Under the Curve)是用于评估二分类模型性能的常见工具,它们主要关注模型在不同阈值下的真正例率(True Positive Rate,也称为召回率)和假正例率(False Positive Rate)之间的权衡。通俗的讲,它衡量的是ROC曲线下的面积,而ROC曲线则描绘了在不同阈值下,真阳性率(也称为敏感度或召回率)与假阳性率之间的关系。

ROC-AUC的评估主要借助下面的两个公式
在这里插入图片描述

ROC曲线:ROC曲线是一条二维图,横轴表示假正例率(FPR),纵轴表示真正例率(TPR,召回率)。每个点对应于模型在不同阈值下的性能,曲线展示了在不同阈值下TPR和FPR之间的权衡关系。一条完全随机的ROC曲线表现为对角线(45度直线),而一条往左上角凸起的曲线表示模型性能较好。

召回率可以参考博主的前面博客:https://editor.csdn.net/md/?articleId=135736043

AUC值:AUC是ROC曲线下的面积,用来量化模型性能的综合指标。AUC的取值范围在0到1之间,越接近1表示模型性能越好,0.5表示随机性能。一个完全随机的分类器的AUC为0.5,而一个完美分类器的AUC为1.0。

在这里插入图片描述

1.2 ROC绘制曲线的具详细步骤

绘制ROC曲线的步骤包括计算真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)的数值,并在坐标系上绘制这些点,最终得到ROC曲线。以下是详细的步骤:

1.准备数据: 有两个关键的输入数据,即真实标签(y_true)和模型的预测概率值(y_scores)。2.排序: 将预测概率值按降序排列,并同时调整真实标签的顺序,使其与排序后的概率值一致。3.计算TPR和FPR: 遍历排序后的样本,计算每个点对应的TPR和FPR。TPR表示正例被正确预测的比例,而FPR表示负例被错误预测为正例的比例。初始化TPR和FPR为0。对每个样本:如果是正例,则更新TPR,并保持FPR不变。如果是负例,则更新FPR,并保持TPR不变。4.计算AUC: 使用梯形法则计算曲线下面积(AUC)。AUC值越接近1,说明模型性能越好。5.绘制ROC曲线: 将计算得到的TPR和FPR点在坐标系上绘制成ROC曲线。通常还会添加对角线(随机猜测的线)作为参考。

二.ROC-AUC的优势:

  1. 不受类别不平衡的影响:在面对不平衡的分类问题时,准确率可能不是一个全面的评估指标,因为它受到类别分布不均的影响。而ROC-AUC通过考虑真正例率(召回率)和假正例率,更好地反映了模型在不同类别之间的平衡。

  2. 对不同阈值的鲁棒性:ROC曲线能够展示模型在不同阈值下的性能,使得我们能够全面了解模型在灵敏性和特异性之间的权衡。这对于不同应用场景下的需求非常重要。

  3. 综合考虑假阳性和假阴性:F1分数关注准确率和召回率的调和平均,而ROC-AUC通过曲线下的面积综合考虑了假阳性率和真阳性率,为评估模型在不同情境下的性能提供了更全面的视角。

  4. 能够比较不同模型:由于ROC-AUC是一个标准化的度量,它允许我们比较不同模型在相同任务上的性能,无论这些模型的具体实现和参数设置如何。

  5. 对于非平衡数据集更具敏感性:在处理非平衡数据集时,ROC-AUC更为敏感,能够更好地反映出模型对少数类别的性能。

三.ROC-AUC的改进和挑战

3.1 面向多类别问题的改进: 未来的研究可以专注于将ROC-AUC扩展到多类别分类问题,并提供更全面的性能评估。

3.2 考虑不同代价的评估: 在一些应用场景中,对于假阳性和假阴性的代价可能不同,未来的发展方向可以考虑在ROC-AUC的基础上引入代价敏感性。

3.3 整合其他性能指标: ROC-AUC通常与其他指标结合使用,未来的发展可以考虑设计更全面的评估框架,同时综合考虑准确率、召回率等指标。

3.4 适应不同领域需求: 针对不同应用领域的需求,可以开发具有领域专业性的ROC-AUC变体,以更好地适应特定领域的性能评估。

四.ROC-AUC的应用

五.ROC-AUC的代码

下面是一个不使用封装的简单ROC-AUC的Python代码实现:

import numpy as np
import matplotlib.pyplot as plt
def calculate_roc_auc(y_true, y_scores):# 将真实标签和预测概率按概率值降序排序sorted_indices = np.argsort(y_scores)[::-1]y_true_sorted = y_true[sorted_indices]y_scores_sorted = y_scores[sorted_indices]# 计算正例和负例样本的数量num_positives = np.sum(y_true == 1)num_negatives = np.sum(y_true == 0)# 初始化ROC曲线的参数tpr_points = [0]fpr_points = [0]auc = 0# 遍历排序后的样本,更新TPR、FPR和AUCfor i in range(len(y_scores_sorted)):if y_true_sorted[i] == 1:tpr_points.append(tpr_points[-1] + 1 / num_positives)fpr_points.append(fpr_points[-1])auc += (fpr_points[-1] - fpr_points[-2]) * tpr_points[-1]else:tpr_points.append(tpr_points[-1])fpr_points.append(fpr_points[-1] + 1 / num_negatives)return fpr_points, tpr_points, auc
# 示例用法
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 0])
y_scores = np.array([0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2])
fpr, tpr, auc = calculate_roc_auc(y_true, y_scores)
# 绘制ROC曲线
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = {:.2f})'.format(auc))
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

运行后的代码如下
在这里插入图片描述

使用sklearn库函数进行简单代码示例:

from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# 示例数据
true_labels = [1, 0, 1, 1, 0, 1]
predicted_probs = [0.8, 0.2, 0.6, 0.9, 0.3, 0.7]
# 计算ROC曲线的FPR和TPR
fpr, tpr, thresholds = roc_curve(true_labels, predicted_probs)
# 计算AUC值
auc = roc_auc_score(true_labels, predicted_probs)
# 绘制ROC曲线
plt.plot(fpr, tpr, label=f'AUC = {auc:.2f}')
plt.plot([0, 1], [0, 1], linestyle='--', color='gray', label='Random')
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('ROC Curve')
plt.legend()
plt.show()

在这里插入图片描述

上述代码使用roc_curve和roc_auc_score函数计算ROC曲线和AUC值,并使用Matplotlib库绘制ROC曲线图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成

本文首发于公众号:机器感知 SpeechGPT-Gen;使用Agents编辑图像;多模态扩散模型图像生成; CCA: Collaborative Competitive Agents for Image Editing This paper presents a novel generative model, Collaborative Competitive…

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一,分流 1.实现分流 2.使用侧输出流 二,合流 1,联合 2,连接 三,基于时间的合流——双流联结 1,窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2,间隔联结 2.1 间隔联…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团(证券代码:0022…

# Java NIO(一)FileChannel

Java NIO 1.BIO与NIO的区别 BIO为阻塞IO,NIO为非阻塞IO。 BIONIOJAVA1.4之前Java 1.4之后面向流:以byte为单位处理数据面向块:以块为单位处理数据同步阻塞同步非阻塞无选择器(Selector) 1.1NIO的核心组成部分 Cha…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测?1.2 需要评测什么?1.3 如何评测?1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

人工智能系列 :与机器共生的未来

大家好,身处一个日新月异的时代,科技的浪潮汹涌而至,将人们推向未知的前方,一个充满人工智能与机器的世界。 这个未知的境地,或许令人心生恐慌,因为它的庞大未知性仿佛一团迷雾,模糊了大家的视…

Unity Mask合批情况验证

1.首先是两个Mask完全重合的情况下 每张图片使用的image都来自同一个图集 发现彼此之间是没有合批的,但是每个Mask内部是实现了合批的 经过计算此种情况的visiableList:mask1,IM1,IM2,mask2,IM3&#xf…

Docker安装Clickhouse详细教程

简介 ClickHouse是一种列式数据库管理系统,专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统,最初由俄罗斯搜索引擎公司Yandex开发,用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库管理系统,…

ruoyi-vue项目中当使用request.js请求后他时,返回非200状态码时request.js会抛出控制台异常导致后续逻辑不执行的解决办法

背景:因表单提交后台逻辑较多,执行速度超过3秒所以提交时添加了遮罩加载层,当后台返回非200状态码时request.js会抛出控制台异常导致后续逻辑不执行了,使用try-cat.catch捕获异常也无效,因为request.js会优先拦截处理 …

不学前沿技术与朽木浮草何异 ?Java18新特性

不学前沿技术与朽木浮草何异 ?Java18新特性 文章目录 不学前沿技术与朽木浮草何异 ?Java18新特性JEP 400:默认字符集为 UTF-8JEP 408:简易的 Web 服务器JEP 413:优化 Java API 文档中的代码片段JEP 416:使用方法句柄重新实现反射核心JEP 417: 向量 API&a…

06.搭建一个自己的私有仓库-Gitea

06.搭建一个自己的私有仓库-Gitea | DLLCNX的博客 如果你是一位程序员或者IT相关领域的从业者,那么肯定知道git,而且也或多或少接触了不少开源仓库以及公司的私有仓库,但是我们有没有想过自己也搭建一个私有仓库呢。 这么多开源仓库&#xf…

面试经典题---3.无重复字符的最长子串

3.无重复字符的最长子串 我的解法: 滑动窗口: 维护一个[left, right)的滑动窗口,其中[left, right - 1]都是不重复子串;每轮while循环都计算一个滑动窗口的无重复子串长度len,每轮也让right后移一步; 内部…

强化学习 - Q-learning(Q学习)

什么是机器学习 强化学习中的 Q-learning(Q学习)是一种用于学习在未知环境中做出决策的方法。它是基于值函数的方法,通过学习一个值函数 Q,该函数表示在给定状态和动作下,期望的累积奖励。 以下是一个简单的 Q-learn…

【51单片机系列】proteus中的LCD12864液晶屏

文章来源:《单片机C语言编程与Proteus仿真技术》。 点阵字符型LCD显示模块只能显示英文字符和简单的汉字,要想显示较为复杂的汉字或图形,就必须采用点阵图型LCD显示模块,比如12864点阵图型LCD显示模块。 文章目录 一、 LCD12864点…

The Sandbox 2024 Game Jam 进行中|游戏创作比赛!冲!

The Sandbox Game Jam 是面向所有游戏制作爱好者的创作比赛!我们诚邀您加入 The Sandbox 的生态系统,这里充满活力,游戏与文化相融,创作者彼此切磋,共同实现梦想。请尽情发挥你的想象力!The Sandbox 游戏由…

深度学习与大数据在自然语言处理中的应用与进展

引言 在当今社会,深度学习和大数据技术的快速发展为自然语言处理(NLP)领域带来了显著的进步。这种技术能够使计算机更好地理解和生成人类语言,从而推动了搜索引擎、语音助手、机器翻译等领域的创新和改进。 NLP的发展与技术进步…

使用Robot Framework实现多平台自动化测试

基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术,成功打造了通用自动化测试持续集成管理平台(以下简称“平台”),显著提高了测试质量和测试用例的执行效率。 01、设计目标 平台通用且支持不…

Linux操作系统——进程间通信简单介绍

1.进程间通信的介绍 我们之前所谈的进程很多都是通过一个进程来进行理解的,可是很多情况下有一些任务呢,他是有很多的进程通过协作完成,比如说我们之前谈到的命令行,一条命令也是用一个进程去执行的。 像这样,我们是通…

一套令我获益颇多的生活模式

你有没有过这样的感受: 有时候,会觉得自己不够好,于是下定决心,做好计划,打算作出一些改变。 但坚持了两天,却又故态复萌,回到旧的模式里。仿佛有一种力量把你往回拉扯,强迫你重复着…

MyBatis 中<foreach>的用法(同时处理多条数据)

在 MyBatis 中&#xff0c;<foreach> 是一个非常有用的标签&#xff0c;用于进行集合的遍历操作。它可以在 SQL 语句中动态地生成多个相同或类似的语句片段&#xff0c;以便处理集合中的每个元素。 <foreach> 标签有以下常用的属性&#xff1a; collection&#…