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和AUC
    for 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曲线图。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【c++】高精度算法(洛谷刷题2024)乒乓球详解

系列文章目录 第一题 乒乓球 视频:http://【洛谷题单 - 算法 - 高精度】https://www.bilibili.com/video/BV1Ym4y1s7BD?vd_source66a11ab493493f42b08b31246a932bbb 目录 系列文章目录 第一题 乒乓球 前言 一、题目以及引领思考 二、题解与代码 1.输入输出案例 …

权威的健康养生与医学基础知识科普学习信息汇总

目录 1 关于健康与食物营养的权威网址1.1 世界卫生组织(World Health Organization: WHO)1.2 美国国家卫生研究院 (National Institutes of Health: NIH)1.3 澳大利亚政府健康门户 (Healthdirect)1.4 国际食品信息委员会 (International Food Informatio…

[蓝桥学习] 前缀和与差分

前缀和原理 特点 求区间和 如果要实现一边修改一边查询,需要使用树状树组和线段树。 例题 题目很简单,但是代码实现惊艳到我了,是L就加1,是Q就减1,如果区间 [i,j] 是平衡子串的话,那它会在前缀prefix i …

计算机网络——网络层(1)

计算机网络——网络层(1) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 网络层:数据平面网络层概述核心功能协议总结 路由器工作原理路由器的工作步骤总结 网际协议IPv4主要特点不足IPv6主要特点现状 通用转发和SDN通用转发SDN(软件…

ORM-08-EclipseLink 入门介绍

拓展阅读 The jdbc pool for java.(java 手写 jdbc 数据库连接池实现) The simple mybatis.(手写简易版 mybatis) 1. EclipseLink概述 本章介绍了EclipseLink及其关键特性:包括在EclipseLink中的组件、元数据、应用程序架构、映射和API。 本…

蓝桥OJ3694肖恩的投球游戏plus

二维差分 #include<bits/stdc.h> using namespace std;const int N 1e3 5; int a[N][N],d[N][N];int main() {int n, m, q;cin >> n >> m >> q;for (int i 1 ; i < n; i){for (int j 1; j < m; j){cin >> a[i][j];d[i][j] a[i][j] a…

大模型工作笔记

当前主要从三个方面入手解决幻觉问题&#xff1a; 检测数据中虚假信息&#xff0c;提升数据质量&#xff1b;扩大模型规模并增大预训练数据量&#xff0c;模型能力的提升能实现幻觉水平的降低&#xff1b;结合搜索增强以及知识库等方法&#xff0c;提升生成信息的准确性。 使…

C语言和C++中不定参数解析

你所看到的惊艳&#xff0c;都曾被平庸历练 文章目录 简介C语言不定参数不定参宏函数 C不定参数方法一&#xff1a;递归展开方式二&#xff1a;折叠表达式方法三&#xff1a;逗号表达式 总结 简介 相信学过c/c的佬们都知道&#xff0c;如果一个函数将自己的参数确定好后&#…

想成为offer收割机?收好这份面试实战攻略!

很多小伙伴之所以会屡屡求职失败&#xff0c;是因为他根本就不知道在面试当中面试官到底要的东西是什么。 所以面试时&#xff0c;大家要不断提醒自己&#xff1a;我是来找工作的&#xff0c;必须考虑清楚说什么样的话&#xff0c;做什么样的事&#xff0c;才对找工作有帮助。…

leetcode1237. 找出给定方程的正整数解

1237. 找出给定方程的正整数解https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/ 难度中等 101 给你一个函数 f(x, y) 和一个目标结果 z&#xff0c;函数公式未知&#xff0c;请你计算方程 f(x,y) z 所有可能的正整数 数对 x 和 y。满…

Kali如何启动SSH服务并实现无公网ip环境远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

计算机网络 第6章(应用层)

系列文章目录 计算机网络 第1章&#xff08;概述&#xff09; 计算机网络 第2章&#xff08;物理层&#xff09; 计算机网络 第3章&#xff08;数据链路层&#xff09; 计算机网络 第4章&#xff08;网络层&#xff09; 计算机网络 第5章&#xff08;运输层&#xff09; 计算机…

WebSocket服务端数据推送及心跳机制(Spring Boot + VUE):

文章目录 一、WebSocket简介&#xff1a;二、WebSocket通信原理及机制&#xff1a;三、WebSocket特点和优点&#xff1a;四、WebSocket心跳机制&#xff1a;五、在后端Spring Boot 和前端VUE中如何建立通信&#xff1a;【1】在Spring Boot 中 pom.xml中添加 websocket依赖【2】…

Python + Selenium —— 元素定位函数 find_element!

WebDriver 中的 find_element() 方法用来查找元素&#xff0c;并返回 WebElement 对象。是 WebDriver 中最常用的方法。 前面提到的八种定位方式都有对应的方法&#xff0c;如find_element_by_id()。 在 WebDriver 中还有一种用法&#xff0c;就是单纯的find_element()。需要…

年销180万辆的特斯拉,护城河却在崩塌

文&#xff5c;刘俊宏 2023年率先开启汽车价格战的马斯克&#xff0c;伤敌一百自损八千&#xff1f; 在1月25日的特斯拉2023Q4财报电话会上&#xff0c;特斯拉CEO马斯克对中国公司的竞争力如此感叹道&#xff0c;“要是没有贸易壁垒&#xff0c;他们将摧毁&#xff08;destroy…

FastDeploy项目简介,使用其进行(图像分类、目标检测、语义分割、文本检测|orc部署)

FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xff0c;并实现&#x1f51a;端到端的推理性能优化。包括 物…

Redis配置类,序列化

解释说明&#xff1a; 当前配置类不是必须的&#xff0c;因为 Spring Boot 框架会自动装配 RedisTemplate 对象&#xff0c;但是默认的key序列化器为JdkSerializationRedisSerializer&#xff0c;导致我们存到Redis中后的数据和原始数据有差别 如&#xff1a; 但是取是可以取出…

Linux第35步_在“移植uboot”前安装“libncurses5-dev,bison和flex”工具

在“移植uboot”前&#xff0c;需要在Ubuntu中安装“libncurses5-dev&#xff0c;bison和flex”工具&#xff0c;否则在“编译uboot”时&#xff0c;会报错。 一、了解相关知识 1、libncurses5-dev库是一个在Linux/Unix下广泛应用的图形函数库。 2、bison是用C编写的语法解析…

web蓝桥杯真题--13、水果摆盘

背景介绍 目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方式&#xff0c;这次试题将利用 Flex 实现经典布局效果。 准备步骤 在开始答题前&#xff0c;你需要在线上环境终端中键入以下命令&#xff0c;下载并解压所提供的文件。 wget https://labfile.oss.a…

Vue+OpenLayers7入门到实战:快速搭建Vue+OpenLayers7地图脚手架项目。从零开始构建Vue项目并整合OpenLayers7.5.2

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章针对Vue初学者,对Vue不熟悉,甚至还不会Vue的入门学生读者。 本章会详细讲解从NodeJS环境到npm环境的各个步骤,再到使用vue-cli脚手架快速生成项目,以及添加OpenLayers7地图库依赖,编写简单的xyz高德地图显示…