19推荐系统2矩阵分解算法——协同过滤的进化

Posted 炫云云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19推荐系统2矩阵分解算法——协同过滤的进化相关的知识,希望对你有一定的参考价值。


针对协同过滤算法的头部效应较明显、泛化能力较弱的问题,矩阵分解算法被提出。矩阵分解在协同过滤算法中“共现矩阵”的基础上,加人了隐向量的概念,加强了模型处理稀疏矩阵的能力,针对性地解决了协同过滤存在的主要问题。

1、矩阵分解算法的原理

Netflix是美国最大的流媒体公司,其推荐系统的主要应用场景是利用用户的行为历史,在Netflix 的视频应用中为用户推荐喜欢的电影、电视剧或纪录片。图1用图例的方式描述了协同过滤算法和矩阵分解算法在视频推荐场景下的算法原理。


图 1 图1 1
如图1(a)所示,协同过滤算法找到用户可能喜欢的视频的方式很直接,即基于用户的观看历史,找到跟目标用户Joe看过同样视频的相似用户,然后找到这些相似用户喜欢看的其他视频,推荐给目标用户Joe。

矩阵分解算法则期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上(如图1(b)所示),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,就应该把距离相近的视频推荐给目标用户。例如,如果希望为图1(b)中的用户Dave推荐视频,可以发现离Dave的用户向量最近的两个视频向量分别是“Ocean’s 11”和“The Lion King",那么可以根据向量距离由近到远的顺序生成Dave 的推荐列表。

用隐向量表达用户和物品,还要保证相似的用户及用户可能喜欢的物品的距离相近——听上去是一个非常好的想法,但关键问题是如何得到这样的隐向量呢?

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


图 2 : 矩 阵 分 解 过 程 图2:矩阵分解过程 2
矩阵分解算法将 m × n m \\times n m×n 维的共现矩阵 R \\boldsymbol{R} R 分解为 m × k m \\times k m×k 维的用户矩阵 U U U k × n k \\times n k×n维的物品矩阵 V V V 相乘的形式。其中 m m m 是用户数量, n n n 是物品数量, k k k 是隐向量的维度。 k k k 的大小决定了隐向量表达能力的强弱。 k k k 的取值越小,隐向量包含的信息越少, 模型的泛化程度越高; 反之, k k k 的取值越大, 隐向量的表达能力越强, 但泛化程度相应降低。此外, k k k 的取值还与矩阵分解的求解复杂度直接相关。在具体应用中, k k k 的取值要经过多次试验找到一个推荐效果和工程开销的平衡点。

基于用户矩阵 U U U 和物品矩阵 V V V, 用户 u u u 对物品 i \\mathrm{i} i 的预估评分如(式 1 1 1 ) 所示。
r ^ u i = q i T p u (1) \\hat{\\boldsymbol{r}}_{\\mathrm{ui}}=\\boldsymbol{q}_{\\mathrm{i}}^{\\mathrm{T}} p_{\\mathrm{u}} \\tag{1} r^ui=qiTpu(1)
其中 p u p_u pu 是用户 u u u在用户矩阵 U U U中的对应行向量, q i q_i qi 是物品 i i i在物品矩阵 V V V中的对应列向量。

2、矩阵分解的求解过程

对矩阵进行矩阵分解的主要方法有三种 : 特征值分解( Eigen Decomposition )、 奇异值分解(Singular Value Decomposition, SVD )和梯度下降(Gradient Descent ) ) ) 。其中, 特征值分解只能作用于方阵, 显然不适用于分解用户-物品矩阵。

奇异值分解的具体描述如下:

假设矩阵 M M M 是一个 m × n m \\times n m×n 的矩阵,则一定存在一个分解 M = U Σ V T M=U \\Sigma V^{\\mathrm{T}} M=UΣVT, 其中 U U U m × m m \\times m m×m 的正交矩阵, V V V n × n n \\times n n×n 的正交矩阵, Σ \\Sigma Σ m × n m \\times n m×n 的对角阵。

取对角阵 Σ \\boldsymbol{\\Sigma} Σ 中较大的 k k k 个元素作为隐含特征,删除 Σ \\boldsymbol{\\Sigma} Σ 的其他维度及 U U U V V V 中对应的维度, 矩阵 M M M 被分解为 M ≈ U m × k Σ k × k V k × n T M \\approx U_{m \\times k} \\Sigma_{k \\times k} V_{k \\times n}^{\\mathrm{T}} MUm×kΣk×kVk×nT, 至此完成了隐向量维度为 k k k 的矩阵分解。

  1. 奇异值分解要求原始的共现矩阵是稠密的。互联网场景下大部分用户的行为历史非常少,用户-物品的共现矩阵非常稀疏,这与奇异值分解的应用条件相悖。如果应用奇异值分解,就必须对缺失的元素值进行填充。

  2. 传统奇异值分解的计算复杂度达到了O ( m n 2 ) \\left(m n^{2}\\right) (mn2) 的级别 ,这对于商品数量动辑上百万、用户数量往往上千万的互联网场景来说几乎是不可接受的。

由于上述两个原因, 传统奇异值分解也不适用于解决大规模稀疏矩阵的矩阵 分解问题。因此, 梯度下降法成了进行矩阵分解的主要方法, 这里对其进行具体的介绍。

式2是求解矩阵分解的目标函数, 该目标函数的目的是让原始评分 r u i \\boldsymbol{r}_{\\mathrm{ui}} rui 与用户向量和物品向量之积 q i T p u q_{\\mathrm{i}}^{\\mathrm{T}} p_{\\mathrm{u}} qiTpu 的差尽量小, 这样才能最大限度地保存共现矩阵的原始信息。
min ⁡ q ∗ , p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 (2) \\min _{\\boldsymbol{q}^{*}, \\boldsymbol{p}^{*}} \\sum_{(u, \\mathrm{i}) \\in K}\\left(\\boldsymbol{r}_{\\mathrm{ui}}-\\boldsymbol{q}_{\\mathrm{i}}^{\\mathrm{T}} \\boldsymbol{p}_{\\mathrm{u}}\\right)^{2}\\tag{2} q,pmin(u,i)K(ruiqiTpu)2(2)
其中K是所有用户评分样本的集合。为了减少过拟合现家,加入正则化项后的目标函数如(式 3 )所示。
min ⁡ q ∗ , p ∗ ∑ ( u , i ) ∈ K ( r u i − q i T p u ) 2 + λ ( ∥ q i ∥ 2 + ∥ p u ∥ 2 ) (3) \\min _{\\boldsymbol{q}^{*}, \\boldsymbol{p}^{*}} \\sum_{(\\mathrm{u}, \\mathrm{i}) \\in K}\\left(\\boldsymbol{r}_{\\mathrm{ui}}-\\boldsymbol{q}_{\\mathrm{i}}^{\\mathrm{T}} \\boldsymbol{p}_{\\mathrm{u}}\\right)^{2}+\\lambda\\left(\\left\\|\\boldsymbol{q}_{\\mathrm{i}}\\right\\|^{2}+\\left\\|\\boldsymbol{p}_{\\mathrm{u}}\\right\\|^{2}\\right)\\tag{3} q,pmin(u,i)K(ruiqiTpu)2+λ(qi2+pu2)(3)
对 ( 式 3 3 3 ) 所示的目标函数的求解可以利用非常标准的梯度下降过程完成。

  1. 确定目标函数, 如(式 3 3 3 ) 所示。

  2. 对目标函数求偏导, 求取梯度下降的方向和幅度。

根据式 3 3 3 q i q_{i} qi 求偏导, 得到的结果为
2 ( r u i − q i T p u ) p u −

以上是关于19推荐系统2矩阵分解算法——协同过滤的进化的主要内容,如果未能解决你的问题,请参考以下文章

矩阵分解在协同过滤推荐算法中的应用

矩阵分解在协同过滤推荐算法中的应用

矩阵分解在协同过滤推荐算法中的应用

推荐系统中的矩阵分解演变方式

简单的基于矩阵分解的推荐算法-PMF, NMF

SVD分解用于推荐算法