ROC曲线和AUC,推荐系统中常用AUC作为排序模型的评估指标

2024-06-13 17:20

本文主要是介绍ROC曲线和AUC,推荐系统中常用AUC作为排序模型的评估指标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、ROC曲线
  • 2、AUC计算及代码

1、ROC曲线

  • 在不同的应用任务中,我们可根据任务需求来采用不同的截断点。如果我们更重视“查准率”,则可选择排序中靠前的位置进行截断;如果更重视“查全率”,则可选择靠后的位置进行截断。 ROC 曲线就是从这个角度出发来研究学习器泛化性能的有力工具。
  • 计算TPR和FPR:
    在这里插入图片描述
  • ROC 曲线的横轴是假正例率 FPR,纵轴是真正例率 TPR

事实上,机器学习模型的一个特点是:在模型性能固定的前提下,如果模型将更多的正例预测为正例,那么也必然会将更多的反例预测为正例。即 TPR越大,则 FPR 也会越大。

  • ROC曲线的绘制流程:

(1)给定 m+个正例和m-个反例,通过分类器得到每个样本的预测概率,对其从高到低进行排序
(2)将分类阈值设为最大,即把所有样例均预测为反例。此时真正例率和假正例率均为0,则 ROC 曲线的起点为 (0,0)
(3)将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。通过该阈值计算(FPR,TPR)坐标,并使用线段连接这些坐标。
(4)将分类阈值设为最小,即把所有样例均预测为正例。此时真正例率和假正例率均为1,则 ROC 曲线的终点为 (1,1)

  • 若一个学习器的 ROC 曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者; 若两个学习器的 ROC 曲线发生交叉,则难以一般性地断言两者孰优孰劣此时如果一定要进行比较,则较为合理的判据是比较 ROC 曲线下的面积即 AUC (Area Under ROC Curve)

2、AUC计算及代码

  • AUC的意义可以理解为:

解释1:随机采样一对样本(一个正样本,一个负样本),模型将正样本预测为正例的概率大于将负样本预测为正例的概率,即将正样本排在负样本之前的概率。
解释2:模型给一堆样本(正负类别标签已知)预测打分,然后将他们从大到小排序,正样本能够正确排在负样本前面的概率就是AUC,例如下图所示的AUC为 7 9 \frac{7}{9} 97
在这里插入图片描述
(上图来自《互联网大厂推荐算法实战》)

  • 可以把AUC理解为区分正类和负类的能力,当AUC越大,表示区分正负类的能力越强。当模型对正负样本没有区分能力时,模型会将一个样本随机预测为正类或负类,此时AUC=0.5,因此 AUC 的有效范围是(0.5,1]。
  • 根据AUC的意义,可得出如下计算公式:
    在这里插入图片描述
    在这里插入图片描述
  • 根据计算公式,有如下代码:
import numpy as np
from sklearn.metrics import roc_auc_score# 使用 sklearn 计算 auc
def get_auc_func1(label, pred):return roc_auc_score(label, pred)# 使用物理意义计算 AUC
def get_auc_func2(label, pred):# 查找正负样本索引pos_sample_ids = [i for i in range(len(label)) if label[i] == 1]neg_sample_ids = [i for i in range(len(label)) if label[i] == 0]# 计算指示函数值sum_indicator_value = 0for i in pos_sample_ids:for j in neg_sample_ids:if pred[i] > pred[j]:sum_indicator_value += 1elif pred[i] == pred[j]:sum_indicator_value += 0.5auc = sum_indicator_value / (len(pos_sample_ids) * len(neg_sample_ids))return aucif __name__ == '__main__':label = np.array([1, 0, 0, 0, 1, 0])pred = np.array([0.9, 0.4, 0.3, 0.1, 0.3, 0.6])print(f"auc = {get_auc_func1(label, pred):6f}")  # auc = 0.687500print(f"auc = {get_auc_func2(label, pred):6f}")  # auc = 0.687500
  • AUC的优缺点:

优点:
1)AUC 是根据所有分类阈值得到的,不依赖于分类阈值的选取。AUC体现的是对样本的排序能力,与具体的分值无关。因此 AUC 和推荐系统中的大多数业务场景更贴合,因为大多数业务场景关心 item 之间的相对顺序而不关心 item 的预测分。
2)根据 AUC 的物理意义可知,它是对正负样本随机采样计算得到的,因此 AUC 对正负样本分布不敏感

缺点:
1)AUC 是全局性指标,对于某个用户的 AUC 值不准确。
2)AUC 会忽略模型对正负样本的拟合能力:例如当模型对正样本预测概率均为0.55,对负样本预测概率均为0.45时,此时AUC=1,从 AUC 角度来看是一个完美的模型,但模型对正负样本的拟合能力差。
3)AUC通常用于二分类问题,对于多类别分类问题,需要进行适当的处理,如将其拆分成多个二分类任务

这篇关于ROC曲线和AUC,推荐系统中常用AUC作为排序模型的评估指标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057941

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has