【读书笔记->推荐系统】02-02 矩阵分解

news/2024/5/19 23:06:34 标签: 推荐算法, 矩阵

02-02 矩阵分解

思维导图纲要

在这里插入图片描述


由于协同过滤算法的头部效应较明显、泛化能力较弱,提出了矩阵分解算法,它在协同过滤算法中“共现矩阵”的基础上,加人了隐向量的概念,加强了模型处理稀疏矩阵的能力,针对性地解决了协同过滤存在的主要问题。书中以Netflix推荐场景为例子介绍矩阵分解。

矩阵分解原理

Netflix是一个电影/电视视频平台,其主要应用场景是利用用户的行为历史,在Netflix的视频应用中为用户推荐喜欢的电影、电视剧或纪录片。

下面给出协同过滤和矩阵分解的算法原理图。

在这里插入图片描述

协同过滤算法找到用户可能喜欢的视频的方式很直接,基于用户的观看历史,然后找到目标用户的相似用户,然后找到
这些相似用户喜欢看的其他视频,推荐给目标用户。

矩阵分解算法则期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上( 如图 2
-4(b)所示 ),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。比如Dave离Ocean’s 11和The Lion King很近,按向量距离从近到远生成给Dave的推荐列表。

但是如何得到这些隐向量?

在“矩阵分解”的算法框架下,用户和物品的隐向量是通过分解协同过滤生成的共现矩阵得到的(如图 2-5 所示),这也是“矩阵分解”名字的由来。(通俗地讲:共现矩阵 分解为 用户矩阵 和 物品矩阵

在这里插入图片描述

共现矩阵 m ∗ n m * n mn维的;用户矩阵 m ∗ k m * k mk维的;物品矩阵 k ∗ n k * n kn维的。其中m是用户数量,n是物品数量,k是隐向量的维度

k的大小决定了隐向量表达能力的强弱。k的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k的取值越大,隐向量的表达能力越强,但泛化程度相应降低。

基于用户矩阵 U 和物品矩阵V , 用户 u 对物品 i 的预估评分如( 式 2-6 ) 所示。

在这里插入图片描述

(个人理解, p u p_u pu 1 ∗ k 1 * k 1k 维的; q i q_i qi k ∗ 1 k * 1 k1维的; q i T q_i^T qiT 1 ∗ k 1 * k 1k维的,因此两个向量之间可以点积/点乘 )

分解共现矩阵的求解过程

之前有提到,共现矩阵 需要分解为 用户矩阵 和 物品矩阵。而分解的主要方法有三种:特征值分解、奇异值分解、梯度下降。

  1. 特征值分解只能用于方阵,不适用❌
  2. 奇异值分解虽然可以解决矩阵分解问题,但是1 其要求 原始的共现矩阵事稠密的,实际的用户-物品的共现矩阵稀疏;2 并且计算复杂度高,也不适用❌(详细可以看书)
  3. 梯度下降法✅

( 式 2-7 ) 是求解矩阵分解的目标函数,该目标函数的目的是让原始评分 r u i r_{ui} rui用户向量和物品向量之积 q i T p u q_i^T p_u qiTpu(也就是上面式2-6的预估评分)的差尽量小,这样才能最大限度地保存共现矩阵的原始信息。

在这里插入图片描述

其中K是所有用户评分样本的集合。

为了减少过拟合现象,可以加入正则化项。

在这里插入图片描述

待整理知识,过拟合和正则化可以看参考文献(值形式)书本原文(矩阵形式)(尽管不同的人公式有区别,但是正则化根本目的是为了减少w的复杂度,减少波动,防止过拟合)

在完成矩阵分解过程后,即可得到所有用户和物品的隐向量。在对某用户进行推荐时,可利用该用户的隐向量与所有物品的隐向量进行逐一的内积运算,得出该用户对所有物品的评分预测,再依次进行排序,得到最终的推荐列表。自此完成推荐过程。

矩阵分解算法中,由于隐向量的存在,使任意的用户和物品之间都可以得到预测分值。而隐向量的生成过程其实是对共现矩阵进行全局拟合的过程,因此隐向量其实是利用全局信息生成的,有更强的泛化能力。(个人理解的意思是,为了将共现矩阵分解为用户矩阵和物品矩阵,中间需要一个隐向量,而隐向量利用的是共现矩阵的“信息”,它是利用全局信息生成的,泛化能力更强)

而对协同过滤来说,如果两个用户没有相同的历史行为,两个物品没有相同的人购买,那么这两个用户和两个物品的相似度都将为 0 ( 因为协同过滤只能利用用户和物品自己的信息进行相似度计算,这就使协同过滤不具备泛化利用全局信息的能力)。

消除用户和物品打分的偏差

  • 由于不同用户的打分体系不同(比如在 5 分为满分的情况下,有的用户认为打 3 分已经是很低的分数了,而有的用户认为打 1 分才是比较差的评价 )
  • 不同物品的衡量标准也有所区别( 比如电子产品的平均分和日用品的平均分差异有可能比较大)

因此需要消除这些偏差(Bias),常用的做法是在矩阵分解时加入用户和物品的偏差向量,如图所示。

在这里插入图片描述

与此同时,矩阵分解目标函数也需要在(式 2-8 ) 的基础上做相应改变,如( 式 2-11 ) 所示。

在这里插入图片描述

加人用户和物品的打分偏差项之后,矩阵分解得到的隐向量更能反映不同用户对不同物品的 “真实” 态度差异,也就更容易捕捉评价数据中有价值的信息,从而避免推荐结果有偏。(个人理解为本质上就是消除用户和物品打分的偏差

优点和局限性

优点

相比协同过滤,矩阵分解有如下非常明显的优点。
( 1 ) 泛化能力强。在一定程度上解决了数据稀疏问题。
( 2 )空间复杂度低。不需再存储协同过滤模型服务阶段所需的“庞大”的用户相似性或物品相似性矩阵,只需存储用户和物品隐向量。空间复杂度由 n 2 n^2 n2 级别降低到 (n+m)*k 级别。
( 3 ) 更好的扩展性和灵活性。矩阵分解的最终产岀是用户和物品隐向量,这其实与深度学习中的 Embedding 思想不谋而合,因此矩阵分解的结果也非常便于与其他特征进行组合和拼接,并便于与深度学习网络进行无缝结合。

局限性

与协同过滤一样,矩阵分解同样不方便加人用户、物品和上下文相关的特征,这使得矩阵分解丧失了利用很多有效信息的机会,同时在缺乏用户历史行为时,无法进行有效的推荐。为了解决这个问题,逻辑回归模型及其后续发展出的因子分解机等模型,凭借其天然的融合不同特征的能力,逐渐在推荐系统领域得到更广泛的应用。

参考文献

  1. 过拟合和正则化

http://www.niftyadmin.cn/n/1363808.html

相关文章

几种测试框架

这次随笔主要是关于三种测试框架:Junit,Qunit,Nunit框架 一:Junit 框架 JUnit是一个java语言的单元测试框架,它是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架。Junit测试是由程序员所测试,属于白盒测试范畴。因为程序员知…

【读书笔记->推荐系统】02-03 逻辑回归

02-03 逻辑回归 思维导图纲要 相比协同过滤仅利用用户与物品的相互行为信息进行推荐,逻辑回归模型能够综合利用用户、物品、上下文等多种不同的特征,生成较为“全面”的推荐结果。另外,逻辑回归的另一种表现形式“感知机”作为神经网络中最基…

【算法->复杂度】时间复杂度与空间复杂度

转自https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/r84gmi/ 本文针对原文简化了一些书写,并且加入了自己的理解。 算法复杂度 算法复杂度旨在计算在输入数据量 N 的情况下,算法的「时间使用」和「空间使用」情况;体现算…

Android setTag方法的key问题

android在设计View类时,为了能储存一些辅助信息,设计一个一个setTag/getTag的方法。这让我想起在Winform设计中每个Control同样存在一个Tag。 今天要说的是我最近学习android遇见的setTag的坑。一般情况下我们只需要使用唯一参数的setTag方法。但有时我们…

一站式学习Wireshark(六):狙击网络高延时点

在某些情况下,丢包可能并不是造成延时的原因。你可能会发现尽管两台主机之间通讯速度很慢,但这种慢速并没有伴随着TCP重传或是重复ACK的征兆。在这种情况下,需要使用另一种方式来定位高延时点。 查找高延时点最有效的方法之一是检查最初的握手…

【推荐系统->统计学】辛普森悖论(Simpson‘s paradox)

辛普森悖论 辛普森悖论(Simpson’s paradox),也有其他名称,是概率和统计中的一种现象,即一种趋势出现在几组数据中,但当这些组组合在一起时,趋势就会消失或逆转。 这个结果在社会科学和医学科学统计中经常遇到&#x…

【读书笔记->推荐系统】02-04 从FM到FFM

02-04 FM与FFM 思维导图纲要 逻辑回归模型表达能力不强的问题,会不可避免地造成有效信息的损失。在仅利用单一特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论。著名的“辛普森悖论”用一个非常简单的例子…

【读书笔记->推荐系统】02-05 GBDT+LR

02-05 GBDTLR 思维导图纲要 FFM模型采用引用特征域的方式增强了模型的特征交叉能力,但是它只能做二阶的特征交叉,更高维度将会产生组合爆炸和计算复杂度过高的问题。而Facebook提出的GBDTLR组合模型可以有效地处理高维特征组合和筛选的问题。 GBDTLR组…