ROC曲线和AUC值
创始人
2025-05-30 08:44:29
0

ROC曲线(Receiver Operating Characteristic,受试者工作特征)

评价分类模型的可视化工具,是一条横纵坐标都限制在0-1范围内的曲线

  • 横坐标是假正率FPR,错误地判断为正例的概率

  • 纵坐标是真正率TPR,正确地判断为正例的概率(也是召回率recall)

一个混淆矩阵就对应ROC曲线中的一个坐标点

TPR和FPR的分母,对于同一个测试集是固定不变的,因为P和N分别表示测试集中正负样本的数目,所以TPR和FPR仅与TP(希望尽可能大)和FP(希望尽可能小)相关

故而在左边的ROC空间内,曲线越靠近左上角,效果越好,故B好于A

对角线相当于随机猜测,ROC曲线越接近这条对角线,模型的准确率越低

曲线凸起程度越高,模型性能越好

(一)两组概念

预测概率和阈值(共同决定模型输出结果)

分类模型的输出结果中包含一个0-1的概率值,该概率代表着对应的样本被预测为某类别的可能性

再通过阈值来进行划分:概率≥阈值的为正,反之为负

TPR和FPR

ROC曲线的横坐标为FPR(False Positive Rate,错误的预测为正的概率),纵坐标为TPR(True Positive Rate,正确的预测为正的概率)

(二)ROC曲线绘制步骤

  1. 将全部样本按概率递减排序

  1. 阈值从1至0变更,计算各阈值下对应的 (FPR, TPR) 数值对

  1. 将数值对绘于直角坐标系中

阈值为1时

(三)ROC曲线解读

可以将横轴理解为代价,纵轴理解为收获

例子:某商家最近推出一款产品,找出最有可能接受该产品的客户,以推销该产品。根据历史数据训练出一个模型,对应ROC曲线如下图,假设某一个阈值对应坐标(0.2, 0.8)

即在该阈值下,模型的FPR=0.2(全部不会购买该产品的客户数量的20%),TPR=0.8(全部会购买该产品的客户数量的80%)

假设该商家客户有1000人,其中400人购买,600人不购买,则在该模型的该阈值下,商家根据预测名单进行推销,能够推销成功的有 400*0.8=320人,推销不成功的有 600*0.2=120人

(四)sklearn实现

绘制ROC曲线主要基于sklearn库中的两个函数:roc_curve和auc

roc_curve函数

roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True)

(1)输入值

  • y_true :一个和样本数量一致的一维向量,数据是正确的二元标签。如果标签不是{- 1,1}或{0,1},则可以显式指定pos_label

  • y_score : 一个和样本数量一致的一维向量,目标分数可以是阳性类的概率估计、置信度值或决策的非阈值度量(在某些分类器上由“decision_function”返回,比如SVM)。简单的理解就是对测试集进行分类后得到的一个用于衡量该类是阳性还是阴性的分数度量,分类器也是根据这个分数来判断测试集是阳性样本还是阴性样本,因此通常都可以在分类器的中间过程拿到这个分数

  • pos_label:样本标签,如果y_true不满足 {0,1}, {-1,1} 标签,则需要通过该参数指定哪些是阳性样本,其余的则为阴性样本,默认不输入

  • sample_weight:一个和样本数量一致的一维向量,指定每个样本的权重,默认不输入

  • drop_intermediate:为true时(默认= True)会删除一些不会出现在ROC曲线上的次优阈值

(2)返回值

  • fpr: 假阳性率序列,数量与thresholds一致的一维向量

  • tpr: 真阳性率序列,数量与thresholds一致的一维向量

  • thresholds: 该序列是一个递减序列,在每一个阈值下对y_score进行划分,大于的视为阳性,小于的视为阴性,从而计算出该阈值下的fpr

auc函数

auc(fpr, tpr)   # 输出是一个float类型的数值

代码

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as pltdef plot_roc(y_true, y_pred):# 计算ROC曲线和AUC值fpr, tpr, thresholds = roc_curve(y_true, y_pred, pos_label=1)    # 假正例率FPR、真正例率TPR、阈值roc_auc = auc(fpr, tpr)plt.clf()   # 清除当前figure的所有axes,但是不关闭这个window,所以能继续复用于其他的plot# 绘制ROC曲线plt.plot(fpr, tpr, color='darkorange', label='ROC curve (AUC = %0.2f)' % roc_auc)   # label为图例里的文字plt.plot([0, 1], [0, 1], color='navy', linestyle='--')   # 直线plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic (ROC) Curve')plt.legend(loc="lower right")plt.savefig('ROC_Curve.png',dpi=300)   # dpi是分辨率

运行效果如下:


AUC(Area under the Curve of ROC)

(一)二分类

AUC表示ROC曲线下方面积,是一个数值,大小在0-1之间,AUC越大则分类器越好

  • AUC=1,完美分类器,该模型至少存在一个阈值,可以将正负样本完美划分开

  • 0.5 < AUC < 1,优于随机猜测,数值越大,分类器越好

  • AUC=0.5,相当于随机猜测,模型没有预测价值

  • AUC < 0.5,比随机猜测要差,然而若反向预测,该模型也可优于随机猜测

(二)N分类

  1. 宏观macro-AUC

针对每一个类别都可以画一个ROC曲线,求出对应的AUC值

最后对所有AUC值求某种平均,作为整个模型所有类别的宏观AUC

  1. 微观micro-AUC

根据下面的表,来得到一个新的针对整个模型的ROC曲线,以及对应的AUC值

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...