ROC和AUC

article/2025/10/3 21:53:37

目录

ROC

AUC


ROC

ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为"受试者工作特征曲线"。ROC曲线的横坐标为假阳性率(False Postive Rate, FPR);纵坐标为真阳性率(True Positive Rate, TPR).FPR和TPR的计算方法分别为

FPR= FP/N

TPR = TP/P

上式中,P是真实地正样本地数量,N是真实地负样本地数量,TP是P个正样本中被分类器预测为正样本地个数,FP是N个负样本中被分类器预测为正样本地个数。

如何绘制ROC曲线?

ROC曲线是通过不断移动分类器地"截断点"来生成曲线上地一组关键点地。

在二值分类问题中,模型地输出一般都是预测样本为正例地概率。样本按照预测概率从高到底排序。在输出最终地正例、负例之前,我们需要指定一个阈值,预测概率大于该阈值地样本会判为正例,小于该阈值则会被判为负例。比如,指定阈值为0.8,那么只有第一个样本会被预测为正例,其他全部都是负例。上面所说地“截断点”指的就是区分正负预测结果地阈值。

通过动态的调整截断点,从最高地得分开始,逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应地位置,再连接所有点就得到最终地ROC曲线。类似于下图

接下来用sklearn来实现。

二分类的实现

def plotROC_BinaryClass(y_true, y_score0):''':descript:绘制0-1类别的ROC曲线:param y_true: 真实标签,两个类别,[0,1]:param y_score: 预测值:return: ROC曲线'''from sklearn.metrics import roc_curve, aucfrom matplotlib import pyplot as pltfpr, tpr, thresholds = roc_curve(y_true,y_score0,pos_label=1)roc_auc = auc(fpr,tpr)plt.figure()lw = 2plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.5f)' % roc_auc)plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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 example')plt.legend(loc="lower right")plt.show()

 

多分类的实现(每个类分开处理即可)

def plotROC_MultiClass(y_true, y_score, class_num):''':descript:绘制多类别的ROC曲线:param y_true: 真实标签,大于两个类别,[0,1,2]:param y_score: 预测值:return: ROC曲线'''from sklearn.metrics import roc_curve,aucfrom sklearn.preprocessing import label_binarizefrom matplotlib import pyplot as plt# 标签转换为one-hotclasses = list(set(y_true))  # 类别n_classes = len(classes)  # 类别数y_true = label_binarize(y_true, classes)
#     y_score = label_binarize(y_score, classes)fpr = dict()tpr = dict()roc_auc = dict()for i in range(n_classes):fpr[i], tpr[i], _ = roc_curve(y_true[:,i],y_score[:,i],pos_label=1)roc_auc[i] = auc(fpr[i],tpr[i])plt.figure()# Plot of a ROC curve for a specific classplt.plot(fpr[class_num], tpr[class_num], color='darkorange',lw=2,label='ROC curve (area = %0.2f)' % roc_auc[class_num])  # 绘制类别one-hot中索引为2位置的类别ROC曲线plt.plot([0, 1], [0, 1], color='navy', lw=2, 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 example')plt.legend(loc="lower right")plt.show()

 

AUC

AUC指的是ROC曲线下的面积大小,该值能够量化的反映基于ROC曲线衡量出的模型性能。

AUC的物理意义:正样本的预测结果大于负样本的预测结果的概率。所以AUC反映的是分类器对样本的排序能力。

插入一个重要问题。为什么说ROC和AUC都能应用于非均衡的分类问题?

ROC曲线只与横坐标(FPR)和纵坐标(TPR)有关系。我们可以发现TPR只是正样本中预测正确的概率,而FPR只是负样本中预测错误的概率,和正负样本的比例没有关系,因此ROC的值与实际的正负样本比例无关,因此既可以用于均衡问题,也可以用于非均衡问题。而AUC的几何意义为ROC曲线下的面积,因此也和实际的正负样本比例无关。

AUC的计算

  • 法1:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积(曲线)之和。计算的精度与阈值的精度有关 。理论性质的,没法求解
  • 法2:根据AUC的物理意义,我们计算正样本预测结果大于负样本预测结果概率。取n1* n0(n1为正样本数,n0为负样本数)个二元组,每个二元组比较正样本和负样本的预测结果,正样本预测结果高于负样本预测结果则为预测正确,预测正确的二元组占总二元组的比率就是最后得到的AUC。时间复杂度为O(N* M)。这个换种说法可能更利于我们后面的代码实现。首先,根据每个样本的预测概率值对真实标签进行倒序排序;然后,根据顺序,依次找到真实标签为1的样本,统计其后面样本概率值低于当前真实正样本的真实负样本的个数;最后,对所有值求和,再除以(正样本个数*负样本个数)
  • 法3:我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n (n=n0+n1,其中n0为负样本个数,n1为正样本个数),其次为n-1。那么对于正样本中rank最大的样本,rank_max,有n1-1个其他正样本比他score小,那么就有(rank_max-1)-(n1-1)个负样本比他score小。其次为(rank_second-1)-(n1-2)。最后我们得到正样本大于负样本的概率为 :

其计算复杂度为O(N+M) 。法3换种说法,有利于我们代码实现。首先,根据每个样本的预测概率对真实标签样本从小到大排序;然后,根据顺序,依次找到真实标签为1的样本,记录其(索引值+1)即上式中的rank,再按照上面的公式计算即可

法2实现

def auc(y_true, y_pred):data = zip(y_true, y_pred)data = sorted(data, key=lambda x: x[1], reverse=True)data1 = [x[0] for x in data]true_posLabel = np.sum(y_true)true_negLabel = len(y_true) - true_posLabelcount = 0for i in range(len(y_true)):if data[i][0] == 1:j = i+1while j < len(data) and data[j][1] >= data[i][1]:  # 这里直接忽略了概率相等时取0.5的情况j += 1count += (len(y_true) - j - np.sum(data1[j:]))return count/(true_negLabel * true_posLabel)

法3实现:

def calAUC3(y_pred, y_true):f = list(zip(y_pred.tolist(),y_true.tolist()))rank = [values2 for values1,values2 in sorted(f,key=lambda x:x[0])]rankList = [i+1 for i in range(len(rank)) if rank[i]==1]posNum = 0negNum = 0for i in range(len(y_true)):if(y_true[i]==1):posNum+=1else:negNum+=1auc = 0auc = float(sum(rankList)- (posNum*(posNum+1))/2)/(posNum*negNum)return auc  

 

 AUC和ROC是不平衡数据集中最常用的指标之一。

对于其他的评价指标需要时再整理把。

机器学习评估指标 - 知乎

机器学习评估与度量指标 - 知乎


http://chatgpt.dhexx.cn/article/teJB3Pei.shtml

相关文章

Rank: AUC

最近计算了搜索排序的auc指标&#xff0c;记录一下~ AUC很大一个好处是其对正负样本比例不敏感 AUC的三种定义&#xff1a; AUC&#xff1a;一个正例&#xff0c;一个负例&#xff0c;预测正样本为正的概率值比预测负样本为正的概率值还要大的可能性。从一堆0和1中&#xff0c…

auc计算 matlab代码,AUC计算

思路 为最终比较划分好测试集和不存在边集【全集1-train-test-对角元】,根据集合中非零元【即边的数目】构建比较矩阵test_rd【比较n次,随机生成n个值右取整作为抽取的要比较的边】,下一步对test的邻接矩阵赋值,相似性指标给予一个分值存入test_pre,然后依据判断条件【tes…

AUC

最近我们在尝试深度学习模型&#xff0c;离线的auc已经高于基线&#xff0c;上线后ctr表现也优于基线&#xff0c;但是基于线上实际反馈的打点日志&#xff0c;深度学习的模型的auc要明显低于基线。但以前的模型迭代auc是可以和线上ctr对应的。 这个问题比较奇怪&#xff0c;一…

AUC详解

AUC在机器学习领域中是一种模型评估指标。根据维基百科的定义&#xff0c;AUC(area under the curve)是ROC曲线下的面积。所以&#xff0c;在理解AUC之前&#xff0c;要先了解ROC是什么。而ROC的计算又需要借助混淆矩阵&#xff0c;因此&#xff0c;我们先从混淆矩阵开始谈起。…

笔记︱统计评估指标AUC 详解

文章目录 1 AUC的两种解读视角&#xff1a;1.1 ROC曲线与坐标轴形成面积1.2 古典概率模型——求导AUC 2 AUC的特性与优劣3 AUC多大才算好&#xff1f;4 线上、线下AUC差异较大成因分析4.1 业务场景使用AUC&#xff1a;点击模型与购买模型的差异4.2 线上、线下AUC有差异 5 AUC逻…

AUC原理详细讲解

一、AUC含义 首先&#xff0c;在试图弄懂AUC和ROC曲线之前&#xff0c;首先要彻底理解混淆矩阵的定义&#xff01; 混淆矩阵中有着Positive、Negative、True、False的概念&#xff0c;其意义如下&#xff1a; 称预测类别为1的为Positive&#xff08;阳性&#xff09;&#x…

详解AUC指标

AUC指标 AUC是一个模型评价指标&#xff0c;用于二分类模型的评价。AUC是“Area under Curve&#xff08;曲线下的面积&#xff09;”的英文缩写&#xff0c;而这条“Curve&#xff08;曲线&#xff09;”就是ROC曲线。 ROC:受试者工作特征曲线    为什么要用AUC作为二分类…

机器学习篇-指标:AUC

AUC是什么东西&#xff1f; AUC是一个模型评价指标&#xff0c;只能够用于二分类模型的评价&#xff0c;对于二分类模型来说还有很多其他的评价指标&#xff1a; 比如&#xff1a;logloss&#xff0c;accuracy&#xff0c;precision 在上述的评价指标当中&#xff0c;数据挖掘…

网络: 快速理解NAT与NAPT的区别

NAT:网络地址转换 。 NAPT:网络地址端口转换。 &#xff08;通俗的讲&#xff09;它们都是地址转换&#xff0c;NAPT与NAT的区别在于 NAT是NAT是一对一转换&#xff0c;NAPT是多对一转换。通俗来说NAT是一个内部地址转换成一个外部地址进行通信的&#xff0c;而NAPT是多个内部地…

NAT和NAPT 技术

一、什么是NAT NAT(Network Address Translator)是用于在本地网络中使用私有地址&#xff0c;在连接互联网时转而使用全局IP地址的技术。除了转换IP地址&#xff0c;还出现了可以转换TCP\UDP端口号的NAPT(Network Address Port Translator)技术 二、NAT的工作机制 如下图所示…

19 网络端口地址转换NAPT配置

借鉴网址&#xff1a; Packet Tracer 思科模拟器入门教程 之十八 网络端口地址转换NAPT配置_柚子君.的博客-CSDN博客 姓 名 彭彭头 实验日期 2022.06.07 学 号 实验序号 19 实验名称 网络端口地址转换NAPT配置 一、实验目的及要求 理解NAT网络地址转换的原理及功能…

Cisco Packet Tracer思科模拟器中利用动态NAPT实现局域网访问Internet (动态地址转换)

本篇文章主要讲解思科模拟器中的动态地址转换 &#xff0c;主讲ACL和接口进行地址转换、地址池范围地址转换、静态一对一地址转换。 园区网内通常情况下有很多台主机&#xff0c;从ISP申请并给园区网中的每台主机分配一个合法IP地址是不现实的&#xff0c;为了使所有内部主机都…

NAT--静态、动态、NAPT、Easy-ip、NAT server

静态NAT 静态 NAT ( Static NAT )&#xff08; 一对一 &#xff09;。将内部网络的私有IP地址转换为公有IP地址&#xff0c;IP地址对是一对一的&#xff0c;是一直不变的。 实验拓扑&#xff1a; PC配置 AR1 <Huawei>sys Enter system view, return user view with Ct…

静态NAPT部署

实验拓扑 Jan16公司搭建了网站服务器&#xff0c;用于对外发布官方网站&#xff0c;公司只租用了一个互联网IP地址用于互联网的访问。为了保障内部网络的安全和互联网IP地址不足的情况&#xff0c;需在出口路由中配置静态NAPT&#xff0c;用于将内部服务器映射到互联网IP地址上…

NAT 和 NAPT

出处&#xff1a;http://bbs.51cto.com/thread-878322-1.html NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是将IP数据报头中的IP地址转换为另一个IP地址的过程。在实际应用中&#xff0c;NAT主要用于实现私有网络访问公共网络的功能。这…

华为静态NAT、动态NAT、NAPT、Easy NAT配置实例

一、NAT的四种类型 1&#xff0c;静态NAT&#xff08;服务器地址转换&#xff09; 静态NAT实现了私有地址和公有地址的一对一转换&#xff0c;一个公网地址对应一个私网地址 2&#xff0c;动态NAT 动态NAT基于地址池来实现私有地址和公有地址的转换&#xff0c;转换是随机的 …

华为 静态NAT---动态NAT---NAPT---Easy IP---NAT服务器工作原理和示例配置

目 录 一、NAT简介 二、NAT好处&#xff1a; 三、静态NAT工作原理和示例配置 1. 静态NAT工作原理 2. 静态NAT配置示例 四、动态NAT工作原理和示例配置 1. 动态NAT工作原理 2.动态NAT示例配置 五、NAPT工作原理和示例配置 1. NAPT工作原理 2.NAPT示例配置 六…

华为设备的NAT、NAPT、easy IP的区别

首先来了解一下什么是NAT&#xff0c;网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术&#xff0c;是一种将私有&#xff08;保留&#xff09;地址转化为合法IP地址的转换技术&#xff0c;它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因…

6.NATNAPT

7. NAT&NAPT 它们都是地址转换NAPT与NAT的区别在于 NAT是NAT是一对一转换&#xff0c;NAPT是多对一转换。通俗来说NAT是一个内部地址转换成一个外部地址进行通信的&#xff0c;而NAPT是多个内部地址使用同一地址不同端口转换成外部地址进行通信的。 //配置完动态路由Rout…

NAPT之NAT地址池、NAPT之easy-ip、NAT-Server

NAPT之NAT地址池 拓扑 需求 实现企业内网主机&#xff08;PC1-PC4&#xff09;访问公网网站服务器&#xff08;Server1&#xff09; 配置步骤 第一步&#xff1a;给PC1-PC4/Server1配置接口IP地址&#xff0c;掩码&#xff0c;网关 第二步&#xff1a;R1配置默认路由 -边界…