推荐系统的矩阵分解

news2024/11/19 16:46:52

0 序言

推荐系统中基于内容的协调过滤算法通过用户之间的相似性或者物品之间的相似性,通过相似性来为用户做决策和推荐;基于内容的协调过滤算法在实际生产环境中,User或Item的数据量非常大(百万级别),存储用户相似度矩阵或者物品相似度矩阵比较大,而User跟Item之间有反馈的数量又比较少,导致存在着数据稀疏和信息冗余大的缺陷,对稀疏数据的处理比较弱,而且头部效应比较明显,推荐更多都是偏向于热门的推荐,泛化能力比较差。

1 矩阵分解基本原理

矩阵分解基本原理:将 m × n m \times n m×n的User-Item矩阵 D D D分解为一个 m × k m \times k m×k用户隐向量矩阵 U U U和一个 n × k n \times k n×k物品隐向量矩阵 V V V相乘的形式,即 D m × n ≈ V k × n T U k × m D_{m \times n} \approx V_{k \times n}^T U_{k \times m} Dm×nVk×nTUk×m;其中, m m m为用户的数量, n n n为物品的数量, k k k为隐向量的维度。(如下图)
在这里插入图片描述

通过矩阵分解可以得到用户和物品都用 k k k维隐向量的表达,每个商品可以用 1 × k 1 \times k 1×k向量 q i q_i qi表示,即 V = [ q 0 , q 1 , . . . , q n ] T V = [q_0, q_1, ..., q_n]^T V=[q0,q1,...,qn]T,每个用户可以用 1 × k 1 \times k 1×k向量 p u p_u pu表示,即 U = [ p 0 , p 1 , . . . , p m ] T U = [p_0, p_1, ..., p_m]^T U=[p0,p1,...,pm]T,则用户 u u u与物品 i i i的反馈得分为
r ^ u , i = q i T p u \hat r_{u,i} = q_i^T p_u r^u,i=qiTpu

k < < m i n ( m , n ) k << min(m, n) k<<min(m,n) k k k的大小决定了隐向量表达能力的强弱, k k k的取值越小,隐向量包含的信息就越少,相对来讲泛化能力就越高;反之 k k k取值越大,隐向量的表达能力越强,但泛化能力相对降低。

那么矩阵分解的推荐算法为:根据User-Item共现矩阵进行矩阵分解得到用户隐向量矩阵和物品隐向量矩阵,计算用户与未交互物品的预测得分,根据预测得分排序给用户推荐物品。

2 矩阵分解实现

矩阵求解的方法常见的方法有:
1)特征值分解
2)奇异值分解
3)梯度下降方法
4)交替最小二乘法
但是特征值分解与奇异值分解都不适合解决大规模稀疏矩阵分解的问题,因此,梯度下降法和最小二乘法成为了矩阵分解的主要方法。

2.1 梯度下降方法SGD

首先需要优化的目标函数为
l o s s = m i n ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 + λ ( ∣ ∣ p u ∣ ∣ 2 + ∣ ∣ q i ∣ ∣ 2 ) loss = min \sum_{(u, i) \in K} (r_{ui} - q_i^T p_u)^2 + \lambda (||p_u||^2 + ||q_i||^2) loss=min(u,i)K(ruiqiTpu)2+λ(∣∣pu2+∣∣qi2)
然后对目标函数分别对 q i q_i qi p u p_u pu求偏导
q i = q i − 2 γ ( r u i − q i T p u ) p u − 2 λ ∣ ∣ q i ∣ ∣ p u = p u − 2 γ ( r u i − q i T p u ) q i − 2 λ ∣ ∣ p u ∣ ∣ q_i = q_i - 2 \gamma (r_{ui} - q_i^T p_u) p_u - 2 \lambda ||q_i|| \\ p_u = p_u - 2 \gamma (r_{ui} - q_i^T p_u) q_i - 2 \lambda ||p_u|| qi=qi2γ(ruiqiTpu)pu2λ∣∣qi∣∣pu=pu2γ(ruiqiTpu)qi2λ∣∣pu∣∣
其中 γ \gamma γ为学习率;
q i q_i qi p u p_u pu反复更新迭代,直到 l o s s loss loss低于某个值或者迭代次数达到一定次数后,停止更新

2.2 交替最小二乘法ALS

ALS跟SGD都是需要优化目标函数 l o s s loss loss,ALS先初始化固定其中一个变量 q i q_i qi,然后通过对 p u p_u pu求导反复迭代得到 p u p_u pu的解,然后固定 p u p_u pu,再对 q i q_i qi求导反复迭代得到 q i q_i qi的解;如此交替执行直到 l o s s loss loss满足阈值条件或者到达迭代次数上限为止。

3 矩阵分解的优缺点

User和Item隐向量的生成过程其实是对共线矩阵进行全局拟合的过程。

优点:
1)泛化能力强,解决了数据稀疏的问题
2)空间复杂度低。不在需要用户相似度矩阵或者物品相似度矩阵,只需要存储用户和物品的隐向量,空间复杂度由 O ( M 2 ) O(M^2) O(M2)或者 O ( N 2 ) O(N^2) O(N2)降低到 O ( M ∗ k + N ∗ k ) O(M*k+N*k) O(Mk+Nk)级别。
缺点:
仅使用了物品和用户的行为特征,并没有使用用户、物品的自身属性和上下文特征,这让矩阵分解丧失了利用很多有效信息的机会

4 参考文献

[1] Matrix factorization techniques for recommender systems
[2] Netflix Update: Try This at Home
[3] 推荐系统中的矩阵分解技术
[4] 论文篇:Matrix Factorization Techniques for RS

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

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

相关文章

操作系统期末考试必会题库3——处理机调度

1、假设一个系统中有5个进程&#xff0c;它们处于就绪状态的时刻和估计运行时间如下表所示&#xff0c;忽略I/O以及其它开销时间&#xff0c;若分别按先来先服务&#xff0c;最短进程优先&#xff0c;最短剩余时间优先、响应比优先、时间片轮转&#xff08;时间片&#xff1d;1…

世界杯 | 其实世界杯结束之前,卡塔尔就开拆体育场了...

大家好&#xff0c;这里又是建模助手。 世界杯已经圆满落幕&#xff0c;梅老板满载而归&#xff0c;但阿根廷与法国的这场世界杯决赛注定载入史册&#xff0c;成为永恒经典&#xff0c;或许将会是世界杯历史上最精彩的决赛之一。 &#xff08;梅老板捧起大力神杯那一刻&#x…

人工鱼群算法参数寻优及可视化(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 人工鱼群优化算法是一种基于模拟鱼群行为的优化算法&#xff0c;是由李晓磊等在2002年提出的一种新型的寻优算法。人工鱼群主要…

黑马Hive+Spark离线数仓工业项目--数仓事实层DWB层构建(1)

整体目标&#xff1a;构建数仓中的DWB&#xff1a;主题事务事实表 核心的主题事实的构建&#xff1a;SQL实现 主题的指标 原始事务事实数据【DWD】&#xff1a;订单数据 主题事务事实数据【DWB】&#xff1a;订单主题 - 主题周期快照事实表&#xff1a;数据应用层【ST&#…

一场4800亿“锂电”战事,瑞浦兰钧射出三支“价值之箭”

顺势而为&#xff0c;是一家企业成功突围的最佳利器。 如今&#xff0c;几乎所有企业都被“碳达峰碳中和”的国家级战略所影响。在此大势的推动之下&#xff0c;锂离子电池、清洁能源等产业也随之进入高速发展期。工信部数据显示&#xff0c;上半年全国锂离子电池产量超过280G…

HNU编译原理实验二cminus_compiler-2022-fall

前言&#xff1a;个人感觉比第一次的难&#xff0c;借鉴了前辈的报告才勉强看懂在干嘛 lab2实验报告实验要求 本次实验需要先将自己的 lab1 的词法部分复制到 /src/parser 目录的 lexical_analyzer.l并合理修改相应部分&#xff0c;然后根据 cminus-f 的语法补全 syntax_analy…

3.3 直接耦合放大电路

工业控制中的很多物理量均为模拟量&#xff0c;如温度、流量、压力、液面、长度等&#xff0c;它们通过各种不同传感器转化成电量后也均为缓慢变化的非周期性信号&#xff0c;而且比较微弱&#xff0c;因而这类信号一般均需通过直接耦合放大电路后才能驱动负载。 一、直接耦合…

二叉树,红黑树,B树、B+树的区别

树的概念 树的演变 二叉搜索树 二叉搜索树可以提高查询效率&#xff0c;左小右大&#xff0c;但是他不好掌握根节点的数字是哪个&#xff0c;容易一边倒&#xff0c;导致层数变多&#xff0c;降低效率 平衡二叉搜索树 平衡二叉搜索树在二叉搜索树的基础上,通过控制任意一个节…

Shell“语言程序设计基础......“

Shell语言也有设计基础吗?...... 没有所谓的语言程序设计基础往往是一种就是菜鸡互啄的一种状态......哦,据说当年,发明笔记本电脑的人(想出发明笔记本电脑这个创意的人)一开始的工作是写说明书的Linux 或者 Unix 发明的那个年代应该还没有这种充满了营销的或者应试的表述方法…

密码学 密钥管理

密钥管理 出发点&#xff1a;在一种安全策略指导下的密钥产生&#xff0c;存储&#xff0c;分配&#xff0c;删除&#xff0c;归档和应用方案。 目的&#xff1a;维持系统各实体之间的密钥关系&#xff0c;抗击各种威胁&#xff1a; 1.密钥泄露 2.密钥和公钥身份真实性丧失 3…

计算机内存机制精讲

全文目录1、一个程序在计算机中到底是如何运行的&#xff1f;2、虚拟内存到底是什么&#xff1f;虚拟地址中间层思想3、虚拟地址空间以及编译模式CPU的数据处理能力编译模式32位编译模式64位编译模式4、内存对齐&#xff0c;提高寻址效率5、内存分页机制&#xff0c;完成虚拟地…

react-native学习过程记录

1、关于react-native init 创建项目报错 cli.init is not a function 问题解决 直接采用npx react-native init chapter2 --version 0.68.2 创建项目&#xff08;即指定version&#xff09; 参考地址&#xff1a;https://blog.csdn.net/qq_42231156/article/details/126396576…

【云原生进阶之容器】第二章Controller Manager原理剖析--2.1节Controller Manager综述

1 K8S Controller Manager原理解析 1.1 Controller Manager作用简述 一般来说,智能系统和自动系统通常会通过一个“操作系统”不断修正系统的工作状态。在Kubernetes集群中,每个Controller都是这样的一个"操作系统",它们通过APIServer 提供的(List-Watch)接口实…

小程序集成Three.js开发常见问题

1.加载模型后开发者工具卡顿 我想很多小伙伴都遇到过这个问题&#xff0c;网上很多方法&#xff0c;说什么清缓存&#xff0c;清内存&#xff0c;基本作用都不大。在不断的摸索中&#xff0c;我逐渐找到了一些解决的办法&#xff0c;希望对你有帮助。 (1) 截至发文时间&#…

Java-集合(1)

什么是集合&#xff1f; 在前面的学习中&#xff0c;保存多个数据&#xff0c;用的是数组。 但是数组有很多不同的地方&#xff1a; 1.长度开始时必须指定&#xff0c;且一旦指定无法更改 2.保存的必须为同一类型元素&#xff0c;虽说可以多态保存&#xff0c;但是限制性也很大…

再学C语言17:类型转换

语句和表达式通常只应该使用一种类型的常量和变量 如果使用混合类型&#xff0c;C将会使用一个规则集合自动完成类型转换 一、基本的规则 1&#xff09;当出现在表达式中时&#xff0c;有符号和无符号的char类型和short类型都将自动被转换为int&#xff08;在需要的情况下将…

新华三“智・行中国2022”|大厂行动,如何擘画“内循环”的数字未来?

作者 | 曾响铃 文 | 响铃说 继农业经济、工业经济之后&#xff0c;数字经济登上历史的舞台&#xff0c;成为大国的主要经济形态。在我国&#xff0c;根据中国信息通信研究院发布的《中国数字经济发展白皮书&#xff08;2022年&#xff09;》&#xff0c;截至2021年&#xff0…

关于浙大MPA复试的一些常规问题

2022年联考笔试刚刚落下帷幕&#xff0c;就收到很多小伙伴关于浙大MPA项目复试的问题咨询&#xff0c;趁着今天有空就大家问的一些问题在这里统一做个回复哦~1、问&#xff1a;正常情况下多少分可以进入浙大MPA项目复试&#xff1f; 答&#xff1a;统计了2018——2022浙大MPA项…

Harmony/OpenHarmony应用开发-转场动画组件内转场

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验&#xff08;需要配合animateTo才能生效&#xff0c;动效时长、曲线、延时跟随animateTo中的配置&#…

GitHub官网下载Axios.js步骤

目录 前言必读 一、下载步骤 1.进入GitHub官网 2.搜索axios 3.点击这个axios/axios 4.点击压缩包下载 5.解压&#xff0c;进入到dist文件里面就找到了 二、使用方法 前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、下载步骤 1.进入…