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

news2024/9/25 2:22:33

最近回顾机器学习基础知识部分的时候,看到了用于评估机器学习模型性能的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曲线图。

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

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

相关文章

硅像素传感器文献调研(八)

2000硅微带探测器的物理模拟:电极几何形状对临界电场的影响。 2000硅微带探测器的物理模拟:电极几何形状对临界电场的影响 摘要 本文介绍了交流耦合硅微带探测器的计算机分析。这项研究的目的是调查的主要几何参数负责潜在的关键影响,如早期…

【GitHub项目推荐--多功能 Steam 工具箱】【转载】

Steam 是一个开源跨平台的多功能 Steam 工具箱,此工具的大部分功能都是需要下载安装 Steam 才能使用。 功能包括网络加速、脚本配置、账号切换、库存管理、自动挂卡、游戏工具,比如强制游戏窗口使用无边框窗口化。 开源地址:https://github…

c++:类和对象(5),运算符重载

目录 运算符重载概念&#xff1a; 运算符重载 1.成员函数重载号 2.全局函数重载号 打印结果&#xff1a; <<运算符重载 递增运算符重载 简单例子 输出结果为&#xff1a; 赋值运算符重载 如何重载 输出结果为&#xff1a; 什么时候重载 关系运算符重载 简单例…

【并发编程】同步模式之保护性暂停

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳中求进&#xff0c;晒太阳 同步模式之保护性暂停 这个模式用到的基础就是wait-notify 详情可以看这篇文章》:【并发编程】wait/notify 即Guarded Suspension,用在一个线…

鸿蒙开发 状态管理

最近学习鸿蒙开发。 状态管理&#xff1a; State -> Prop 单向传递&#xff1b; stateprop: State -> Prop 单向传递 State -> Link 双向传递&#xff1b;

Windows脚本:监控并自动重启某个进程

Windows脚本&#xff1a;监控自动并重启某个进程 一、简介二 .bat脚本方式2.1 编制脚本2.2 创建并运行脚本2.3 设置关闭cmd窗口 三、使用VBScript脚本方式3.1 编制脚本3.2 运行脚本 四、设置脚本开机自启动五、某些软件加入启动项后&#xff0c;开机不会自动启动的解决方法 在实…

代码随想录算法训练营第十四天|二叉树基础-二叉树迭代-二叉树

文章目录 二叉树基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树的存储方式链式存储顺序存储 二叉树的遍历方式二叉树的定义 二叉树的递归遍历144.二叉树的前序遍历代码&#xff1a; 145.二叉树的后序遍历代码&#xff1a; 94. 二叉树的中序遍历代码 二叉树的…

Linux中并发程序设计

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

Unity通用渲染管线升级URP、HDRP

Unity通用渲染管线升级URP、HDRP 一、Build-in Pipline升级到 URP 一、Build-in Pipline升级到 URP 安装URP包 升级所有材质&#xff08;升级完成后材质会变成紫红色&#xff0c;Shader丢失&#xff0c;此为正常现象&#xff09; 创建 UniversalRenderPipelineAsset 配置文…

Origin:调整颜色刻度线间距和小数点

如何设置或修改Color Scale 的间距和小数位&#xff1f; 答&#xff1a;&#xff08;1&#xff09;更改间距&#xff1a;左键双击刻度标线——级别——“显示主刻度在”下选择自定义级别——在“值”输入自定义间距增量。 &#xff08;2&#xff09;更改小数点个数&#xff1a…

嵌入式-stm32-江科大-OLED调试工具

文章目录 一&#xff1a;OLED调试工具1.1 OLED显示屏介绍1.2 实验&#xff1a;在OLED显示屏的使用1.3 自己新增功能测试道友&#xff1a;今天没有开始的事&#xff0c;明天绝不会完成。 一&#xff1a;OLED调试工具 1.1 OLED显示屏介绍 学习任何一门语言就需要进行调试&#…

民用激光雷达行业简析

01. 激光雷达是“机器之眼” • 激光雷达是一个通过发射激光并接受发射激光同时对其进行信号处理&#xff0c;从而获得周边物体距离等信息的主动测量装置。 • 激光雷达主要由光发射、光扫描、光接收三大模块组成。光发射模块集成了驱动、开关和光源等芯片。光接收模块集成了…

浏览器安装证书,使用burp抓取任意https协议的流量

抓包显示都是http的。 接受风险后&#xff1a; 给burp加证书&#xff1a; 点击后会让你下载&#xff0c;证书已下载 证书长这个样子~~~ 浏览器设置中直接搜索证书&#xff1a; 勾选信任&#xff1a; 会到之前加载不出的页面刷新就可以看到加载出来图片等&#xff1a; 此时看到…

【大数据】Flink 系统架构

Flink 系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处理的分布式系统。它的搭建涉及多个进程&…

服务器的组成

服务器的重要结构组成 家用电脑组成&#xff1a; CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑&#xff0c; CPU发展史&#xff1a; 32 位CPU&#xff1a;最大的内存寻址地址2^32&#xff0c;大约4G的大小。 CP…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题&#xff1a;在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找&#xff0c;这道题目是最经典的二分查找&#xff0c;使用于…

Git操作指南

Git操作指南 Git是一款非常强大的版本控制工具&#xff0c;可以帮助开发者管理代码的版本、协同开发以及进行代码的发布。以下是一些常见的Git操作指南。 基本操作 初始化一个Git仓库 git init添加文件到暂存区 git add 文件名提交更改到本地仓库 git commit -m "提…

Simulink|光伏并网逆变器低电压穿越仿真模型

目录 主要内容 模型研究 1.模型总览 2.boost模块 3.Inverter模块 4.控制模块 5.信号模块 结果一览 下载链接 主要内容 该模型为光伏逆变器低电压穿越仿真模型&#xff0c;采用boost加NPC拓扑结构&#xff0c;基于MATLAB/Simulink建模仿真。模型具备中点平衡…

CentOS安装Redis教程-shell脚本一键安装配置

文章目录 前言一、Redis单机版安装教程1. 复制脚本2. 增加执行权限3. 执行脚本 二、Redis扩展集群版安装教程1. 安装Redis单机版2. 复制脚本3. 增加执行权限4. 执行脚本5. 测试6. redis_cluster.sh 命令6.1 启动Redis扩展集群6.2 停止Redis扩展集群6.3 查看Redis扩展集群节点信…

在虚拟时空对话邓中亮院士,元宇宙访谈节目强势出圈

​​2023年12月&#xff0c;由米果集团、浙江省元宇宙产业基地联合出品的《科技领军人物的思维模式解析》访谈节目上线。在节目制作过程中&#xff0c;主持人对话“国际欧亚科学院院士、北京邮电大学邓中亮教授”&#xff0c;全程使用蓝海创意云的“vLive虚拟直播”系统进行节目…