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.hqwc.cn/news/427551.html

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

相关文章

Java毕业设计-基于jsp+servlet的学生推荐平台管理系统-第81期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于jspservlet的学生推荐平台管理系统:前端 jsp、jquery,后端 servlet、jdbc,集成用户端和管理后台,用户端浏览书籍课程&…

All-Flash Array Key-Value Cache for Large Objects——论文泛读

EuroSys 2023 Paper 论文阅读笔记整理 问题 随着网络内容质量的提高,对缓存大型对象的需求不断增加。在生产内容交付网络(CDN)、图像和文档服务器中,大多数对象的大别为8KB–32KB(CDN服务器)、32KB–128K…

AI时代:驱动光模块市场增长

人工智能(AI)技术的崛起,犹如一股强大的催化力量,正在驱动各行各业经历前所未有的变革性转型。光学收发器市场作为这一范式转变的重要领域之一,正见证着由ChatGPT等先进模型引领的AI革命所带来的深刻影响。本文将深度剖…

学单片机前先学什么?

学单片机前先学什么? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#xff…

Linux中并发程序设计

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合(文件) 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注:进程是存在RAM中,程序是存放在ROM(flash)中的进程内容 BSS段&#xff…

45. 跳跃游戏 II - 力扣(LeetCode)

题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 题目示例 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标…

C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

安装达梦数据库后,使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类,主要代码如下: SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){DbType DbType.Dm,ConnectionString "Serverlocalhost; User Id…

鸿蒙开发案例002

1、目标需求 界面有增大字体按钮,每次点击增大字体按钮,“Hello ArkTS”都会变大 2、源代码 Entry Component struct Page {textValue: string Hello ArkTSState textSize: number 50myClick():void{this.textSize 4}build() {Row() {Column() {//…

前端上传大文件使用分片上传

前提:分片上传针对于一些大的文件、普通大小的文件使用element中的上传组件可以实现效果,例如几G的文件就会比较卡,所以这时候就需要用到分片上传~ 前端及后端分片上传笔记 效果:(上传进度展示) 效果:(上传成功的效果展示) 1、 新建一个上传组件 2、使用vue-simple-…

日志级别与配置

日志的级别 FATAL致命信息表明严重的问题,可能导致应用程序崩溃。ERROR错误信息指示应用程序遇到了一个错误,可能导致功能受损。通常用于记录异常信息。WARN警告信息表明可能存在问题,但不会导致应用程序失败。仍然可以正常运行,…

一文速通Nginx网关与gateway网关区分

目录 API网关介绍 gateway基本介绍 Nginx基本介绍 Nginx与API gateway网关 API网关介绍 网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系…

12.前端--CSS-背景属性

1.背景颜色 样式名称: background-color 定义元素的背景颜色 使用方式: background-color:颜色值; 其他说明: 元素背景颜色默认值是 transparent(透明)      background-color:transparent; 代码演示: 背景色…