当前位置: 首页 > news >正文

推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录

  • 矩阵分解的不足
  • 贝叶斯个性化排序
    • AUC
    • 构造样本
    • 目标函数
    • 训练方法
  • 总结

矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统,又有机器学习的基因,可以说是非常优秀了;但即便如此,传统的矩阵分解无论是在处理显式反馈,还是 处理隐式反馈都让人颇有微词,这一点是为什么呢?

矩阵分解的不足

前面讲过的两种矩阵分解,本质都是在预测用户对一个物品的偏好程度,哪怕不是预测评分,只是预测隐式反馈,也是这个事实。
得到矩阵分解结果后,常常在实际使用时,又是用这个预测结果来排序。原来的目标是让模型的预测误差最小化,到最后还是只想要一个好点的排序。

这种针对单个用户对单个物品的偏好程度进行预测,得到结果后再排序的问题,在排序学习中的叫做:point-wise,其中point意思就是:只单独考虑每个物品,每个物品 像是空间中孤立的点一样。与之相对应的,还有直接预测物品两两之间相对排序的问题,叫做pair-wise ,pair顾名思义就是成对成双。

前面将的矩阵分解都属于point-wise模型。这类模型的尴尬是:只能收集到正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准去逼近这些样本。逼近正样本没有问题,但同时逼近的负样本只是缺失值而已,并不能确认用户到底是不喜欢还是喜欢。虽然这些模型采取了一些措施来规避这个问题,比如负样本采样,但尴尬还是存在的,为了排序而绕路也是事实。

既然如此,能不能直面问题,采用pair-wise 来看待矩阵分解呢?当然可以。实际上,更直接的推荐模型应该是:能够较好地为用户排列出更好的物品相对顺序,而非更精确的评分。

这个问题已经有专业的从业者们提出了方法:贝叶斯个性化排序,简称BPR模型。下面,我们就一探究竟。

贝叶斯个性化排序

在前面的专栏文章中,已提到均方根误差,用于评价模型预测准确度的。现在要关注的是相对排序,用什么指标比较好呢?AUC,全称是Area Under Curve,意思是曲面下的面积,这里的曲线是ROC曲线。

AUC

AUC 这个值在数学上等价于:模型把关心的那一类样本排在其他样本前面的概率。最大是1,完美结果,而0.5是书籍排列,0就是完美的全部排错。

这个非常适合来评价模型的排序效果,比如说,得到一个推荐模型后,按照它计算的分数,能不能把用户真正想消费的物品排在前面。这个模型上线前是可以用日志完全计算出来的。

AUC 怎么计算呢?一般步骤如下:
1、用模型给样本计算推荐分,比如样本都是用户和物品这样一对一对的,同时还包含了有无反馈的标识;
2、得到打过分的样本,每条样本保留两个信息,第一个是分数,第二个是0或者1,1标识消费过,是正样本,0标识没有,负样本;
3、按照分数对样本重新排序,降序排列;
4、给每一个样本赋一个排序值,第一位r1=n,第二位r2=n-1,以此类推;其中要注意,如果几个样本分数一样,需要将其排序值调整为他们的平均值;
5、最终按照下面的这个公式计算就可以得到AUC值;

A U C = ∑ i ∈ ( 样 本 ) T i − M ∗ ( M + 1 ) 2 M ∗ N AUC =\frac{\sum_{i∈(样本)}{T_i-\frac{M*(M +1)}{2}}}{M*N} AUC=MNi()Ti2M(M+1)

这个公式:
第一部分:分母是我们关心的那类样本,也就是正样本,有M个,以及其他的样本有N个,这两类样本相对排序总共的可能性有M*N种;
第二部分:分子是这样计算的:第一名的排序值是r_1,它在排序上不但比过了所有的负样本,而且比过了自己以外的正样本。
正样本和正样本是同一类,所以要排查,于是就有N-M 种组合,以此类推,排序值为rm的就贡献了rm-1,把这些加起来就是分子;

关于AUC,越接近1越好是肯定的,但是并不是越接近0就越差,最差的是接近0.5,如果AUC很接近0的话,只需要把模型预测的结果加个负号就能让AUC接近1;

BPR模型,它提出了一个优化准则和学习框架,那到底BPR做了什么事情呢?主要有三点:
1.一个样本构造方法;
2.一个模型目标函数;
3.一个模型学习框架;

构造样本

前面介绍的矩阵分解,在训练时候处理的样本是:用户、物品、反馈,这样的三元组形式;

其中反馈又包含真实反馈和缺失值,缺失值充当负样本。BPR则不同,提出要关心的是物品之间对于用户的相对排序,于是构造的样本是:用户、物品1、物品2、两个物品相对排序,这样的四元组形式,其中两个物品的相对排序,取值是:

1、如果物品1是消费过的,而物品2不是,那么相对顺序取值为1,是正样本;
2、如果物品1和物品2刚好相反,则是负样本;
3、样本中不包含其他情况:物品1和物品2都是消费过的,或者都是没消费过的。

学习的顺序是反应用户偏好的相对顺序,而在使用时,面对的是所有用户还没消费过的物品,这些物品仍然可以在这样的模型下取得相对顺序,这就比三元组point-wise 样本要直观得多。

目标函数

现在,每条样本包含的是两个物品,样本预测目标是两个物品的相对排序。BPR完成矩阵分解,依然需要像交替最小二乘那样的思想。

先假设矩阵分解结果已经有了,于是计算出用户对于每个物品的推荐分数,只不过这个推荐分数可能并不满足均方根误差最小,而是满足物品相对排序最佳。

得到了用户和物品的推荐分数后,就可以计算四元组的样本中,物品1和物品2的分数差,这个分数可能是正数,也可能是负数,还可能是0;

希望的情况是:如果物品1和物品2相对排序为1,那么希望两者分数之差是个正数,而且越大越好;如果物品1和物品2的相对排序时0,则希望分数之差是负数,且越小越好;

用个符号来表示这个差: X u 12 X_{u12} Xu12,表示的是对于用户u,物品1和物品2的矩阵分解预测分数差。然后再用sigmoid函数把这个分数差压缩到0到1之间。
θ = 1 1 + e ( − X u 12 ) θ=\frac{1}{1+e^{(-X_{u12})}} θ=1+e(Xu12)1

用这种方式预测了物品1排在物品2前面的似然概率,所以最大化交叉熵就是目标函数了。目标函数通常还要防止过拟合,加上正则项,正则项其实认为模型参数有个先验概率,这也是BPR这个名字中有’贝叶斯’的来历。BPR认为模型的先验概率符合正态分布,对应到正则化就是说L2正则。

所有样本都计算:模型参数先验概率p theta ,和似然概率的乘积,最大化这个目标函数就能够得到分解后的矩阵参数其中theta就是分解后的矩阵参数。

这个目标函数化简和变形后,和把AUC当成目标函数是非常相似的,正因为如此,BPR模型宣称该模型是为AUC而生。

训练方法

有了目标函数之后,就要有训练方法。梯度下降可以,梯度下降又分为批量梯度和随机梯度两个选择,前者收敛慢,后者训练快但不稳定。
因此BPR使用了一个介于两者之间的训练方法,结合重复抽样的梯度下降。具体如下:

1、从全量样本中有放回地随机抽取一部分样本;
2、用这部分样本,采用随机梯度下降优化目标函数,更新模型参数;
3、重复步骤1,直到满足停止条件。

这样,就得到了一个更符合推荐排序要求的矩阵分解模型了;

总结

今天是矩阵分解三篇的最后一篇,传统的矩阵分解,无论是隐式反馈还是显示反馈,都是希望更加准确地预测用户对单个物品的偏好,而实际上,如果能够预测用户对物品之间的相对偏好,则更加符合实际需求的直觉。

BPR就是这样一整套针对排序的推荐算法,它事实上提出了一个优化准则和一个学习框架,至于其中优化的对象是不是矩阵分解并不是它的重点。但我在这里结合矩阵分解对其进行了讲解,同时还介绍了排序时最常用的评价指标AUC及其计算方法。

在这里插入图片描述

相关文章:

推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你

目录 矩阵分解的不足贝叶斯个性化排序AUC构造样本目标函数训练方法 总结 矩阵分解在推荐系统中的地位非常崇高。它既有协同过滤的血统,又有机器学习的基因,可以说是非常优秀了;但即便如此,传统的矩阵分解无论是在处理显式反馈&…...

Kafka之ISR机制的理解

文章目录 Kafka的基本概念什么是ISRISR的维护机制ISR的作用ISR相关配置参数同步过程示例代码总结 Kafka中的ISR(In-Sync Replicas同步副本)机制是确保数据高可用性和一致性的核心组件。 Kafka的基本概念 在Kafka中,数据被组织成主题&#xf…...

如何设计一个点赞系统

首先我们定义出一个点赞系统需要对外提供哪些接口: 1.用户对特定的消息进行点赞; 2.用户查看自己发布的某条消息点赞数量以及被哪些人赞过; 3.用户查看自己给哪些消息点赞过; 这里假设每条消息都有一个message_id, 每一个用户都…...

对象存储测试工具-s3cmd

一、环境安装 官网:https://s3tools.org/s3cmd 下载安装包:https://s3tools.org/download GitHub:https://github.com/s3tools/s3cmd/releases 本文安装包:https://github.com/s3tools/s3cmd/releases/download/v2.0.2/s3cmd-2.0…...

OpenCV--图像色彩空间及转换

图像色彩空间及转换 python代码和笔记 python代码和笔记 import cv2 色彩空间,基础:RGB或BGR OpenCV中: 一、HSV(HSB):用的最多, Hue:色相-色彩(0-360),红色:0,绿色&…...

RIP解决不连续子网问题

#交换设备 RIP解决不连续子网问题 一、不连续子网的概念 相同主网下的子网,被另一个主网分割,例如下面实验拓扑在某公司的网络整改项目中,原先R1 和RS 属于同一主网络 10.0.0.0/8,现被 R2、R3、R4 分离,整网采用了 …...

动态轮换代理IP是什么?有什么用?

如果您要处理多个在线帐户,选择正确的代理类型对于实现流畅的性能至关重要。但最适合这项工作的代理类型是什么? 为了更好地管理不同平台上的多个账户并优化成本,动态住宅代理IP通常作用在此。 一、什么是轮换代理? 轮换代理充当…...

MAC配置VScode中C++项目debug环境

文章目录 配置步骤问题解决Unable to start debugging. LLDB exited unexpectedly with exit code 137 (0x89). 配置步骤 在Mac上配置VS Code以进行C调试涉及几个步骤: 安装必要的工具: 确保您已经安装了Visual Studio Code和C插件。 检查是否安装了Clang&#xf…...

PostgreSQL源码分析——CREATE CAST

CREATE CAST源码分析 CREATE CAST用法 CREATE CAST —— 定义一个用户自定义的类型转换 用法如下: CREATE CAST (source_type AS target_type)WITH FUNCTION function_name [ (argument_type [, ...]) ][ AS ASSIGNMENT | AS IMPLICIT ]CREATE CAST (source_type…...

解锁5G新营销:视频短信的优势与全方位推广策略

随着5G时代的全面来临,企业的数字化转型步伐日益加快,视频短信作为新兴的数字营销工具,正逐步展现出其巨大的潜力。视频短信群发以其独特的形式和内容,将图片、文字、视频、声音融为一体,为用户带来全新的直观感受&…...

视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台

目录 一、背景说明 二、ISUP协议介绍 1、海康ISUP协议概述 2、ISUP协议支持主码流和子码流切换 (1)灵活配置和个性化 (2)适应不同网络带宽,提高使用体验 3、海康ehome相关文章 三、ISUP协议接入说明 1、平台侧…...

PostgreSQL查询用户

在 PostgreSQL 中,可以通过查询系统表来确定当前用户是否是超级管理员(超级用户)。具体来说,可以使用 pg_roles 系统表,该表包含数据库中所有角色的信息。 以下是查询当前用户是否是超级用户的 SQL 语句: …...

力扣1539.第k个缺失的正整数

力扣1539.第k个缺失的正整数 占位运算 只要n<k &#xff0c;k;最终k就是结果 class Solution {public:int findKthPositive(vector<int>& arr, int k) {for(int n : arr){if(n < k) k ;else break;}return k;}};...

如何快速解决屏幕适配问题

下面将利用postcss插件快速解决屏幕适配问题。仅用少量代码&#xff0c;新手均可快速使用。 Step1. 安装 npm install postcss-px-to-viewport-8-plugin --save-dev Step2. 新建 postcss.config.js 文件&#xff0c;做基础配置 module.exports {plugins: {postcss-px-to-v…...

Go基础编程 - 09 - 通道(channel)

通道&#xff08;channel&#xff09; 1. 声明2. channel的操作3. 无缓冲通道4. 有缓冲通道5. 如何优雅的从通道循环取值6. 单向通道7. 异常总结 上一篇&#xff1a;结构体 Go语言的并发模式&#xff1a;不要通过共享内存来通信&#xff0c;而应该通过通信来共享内存。 Go语言…...

[SAP ABAP] 数据类型

1.基本数据类型 示例1 默认定义的基本数据类型是CHAR数据类型 输出结果: 示例2 STRING数据类型用于存储任何长度可变的字符串 输出结果: 示例3 DATE数据类型用于存储日期信息&#xff0c;并且可以存储8位数字 输出结果: 提示Tips&#xff1a;日期和时间类型的变量可以直接进…...

什么是Vue开发技术

概述 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它设计得非常灵活&#xff0c;可以轻松地被集成到任何项目中。 vue是视图的发音&#xff0c;其目的是帮助开发者易于上手&#xff0c;提供强大的功能构建复杂的应用程序 示例 以下是vue基本的语法概述 声明式渲…...

【QT】

通信服务端实现 widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox>//消息 #include <QTcpServer> #include <QList> #include <QTcpSocket> QT_BEGIN_NAMESPAC…...

【转载】使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目

使用 .NET Upgrade Assistant&#xff08;升级助手&#xff09;升级 .NET 老旧版本项目&#xff1a;https://blog.csdn.net/ChaITSimpleLove/article/details/134711604...

SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程

前言 Spring Boot 项目启动时会在控制台打印出一个 banner&#xff0c;下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...