搜索引擎(六)-- 矩阵分解

本文详细介绍了奇异值分解(SVD)及其变种,如基于机器学习的SVD、正则化因子BiasSVD、TimeSVD和SVD++。重点讲解了如何通过SVD解决推荐系统中的矩阵稀疏问题,以及如何利用SVD++改进预测准确性和处理冷启动问题。
摘要由CSDN通过智能技术生成

一、引言

在搜索引擎(五)中我们提到了推荐系统中矩阵的稀疏问题,很多数据或者用户的交互数据过少,并且有部分交互数据也存在信息冗余的情况。因此,我们需要用矩阵降维的方法,将矩阵投射到对结果有影响的最重要的因素中,并基于此构建新的评价方法。
除此以外,在此前提到的Memory-Based推荐里,我们常常也需要去评价物品或用户的相似度,这些物品或用户也有许多attributes,需要我们进一步进行指标压缩,对属性表进行降维后更方便相似度的对比。譬如一个文档-关键词的特征表。
本文章将对SVD和SVD++两种方法展开进行描述。

二、奇异值分解SVD

SVD可以将一个较大的矩阵分解为多个方便计算和存储的矩阵,目前许多矩阵分解算法都是基于SVD完成的。假设A矩阵是被正则化过的一个大小为 m × n m\times n m×n的待分解矩阵,我们定义A的SVD分解为 A = U Σ V T A=U\Sigma V^T A=UΣVT
其中 U U U是一个 m × m m\times m m×m的方阵; Σ \Sigma Σ是一个 m × n m\times n m×n的矩阵,除了主对角线上的元素外,所有的值为0; V V V是一个 n × n n\times n n×n的方阵。 U U U V V V都是酉矩阵,满足 U T = U − 1 U^T=U^{-1} UT=U1 V T = V − 1 V^T=V^{-1} VT=V1 Σ \Sigma Σ矩阵对角线上保存着A矩阵的各个矩阵特征值的根号(又称作奇异值),并且从上到下一般是以降序方式排列的。

在多数情况中, Σ \Sigma Σ矩阵中最大的奇异值往往是最能影响矩阵结果的,所以我们在作矩阵近似时,可以只取最大的几个奇异值,以及其对应的 U U U V V V数据进行计算。譬如我们如果只取 k k k个最大的奇异值,那么 A m × n A_{m\times n} Am×n矩阵可以被近似为
A m × n ′ = U m × k Σ k × k V k × n T A'_{m\times n}=U_{m\times k}\Sigma_{k\times k}V^T_{k\times n} Am×n=Um×kΣk×kVk×nT

我们如果从向量空间来看这个问题,可以把SVD看作一个矩阵被分解为多个垂直的向量基底的线性组合。而我们的降维就是把最能代表这个矩阵的几个基底留下,剩下的基底全部丢掉的,从而产生新的评价矩阵的过程。

三、SVD的变种

基于机器学习的SVD

用代数方法求得 U U U Σ \Sigma Σ V V V的过程是十分昂贵的,需要消耗大量时间和空间计算 A A A的特征值和特征向量。除此之外,在Memory-Based的推荐系统中,A矩阵是确定的,物品或用户的各个属性一般都是已经采集过,并且不易改变的(如文章的词频),但基于协同过滤的推荐系统中,user-item矩阵不完整,用户可能根本没有跟部分物品交互过,所以靠代数方法并不能获得具体数据。在这类背景下,用机器学习的方法学习到分解矩阵是更好的选择。由于机器学习不关心具体的特征向量,我们可以把 Σ \Sigma Σ这个值融合到 U U U V V V当中。这里用评分矩阵 r r r代替原来的 A A A,我们可以把新的分解表示为 r m × n = P m × f T Q f × n r_{m\times n}=P^T_{m\times f}Q_{f\times n} rm×n=Pm×fTQf×n,用户 u u u对物品 i i i的喜好预测值可以被表示为 r ^ u , i = q i T p u \hat{r}_{u,i}=q_i^Tp_u r^u,i=qiTpu
在这里插入图片描述
在最基础的分解中,损失函数可以表示为预测值与真实值的误差 ∑ i ∑ u ( r u , i − q i T p u ) \sum_i \sum_u (r_{u,i}-q_i^Tp_u) iu(ru,iqiTpu)

正则化因子

为了减轻过拟合问题,在某些研究又引入了正则化因子,损失函数变为 E = ∑ ( u , i ) ∈ κ ( r u , i − q i T p u ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^Tp_u)+\lambda(||q_i||^2+||q_u||^2) E=(u,i)κ(ru,iqiTpu)+λ(qi2+qu2)

Bias SVD

有些用户可能对物品评价严格,也有些用户可能对物品的评价很宽容,同时有些物品可能会更容易令用户满意,有些物品更难达到用户心中预期。有学者根据此提出了bias SVD,引入了平均分 μ \mu μ,物品偏差 b u b_u bu和用户偏差 b i b_i bi到预测之中,此时的预测值可以表示为 r ^ u , i = q i T p u + μ + b u + b i \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i r^u,i=qiTpu+μ+bu+bi
损失函数则可以表示为
E = ∑ ( u , i ) ∈ κ ( r u , i − q i T p u − μ − b u − b i ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 + b u 2 + b i 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^Tp_u-\mu-b_u-b_i)+\lambda(||q_i||^2+||q_u||^2+b_u^2+b_i^2) E=(u,i)κ(ru,iqiTpuμbubi)+λ(qi2+qu2+bu2+bi2)

Time SVD

而由于用户的喜好是根据时间而变化的,对于我们可以把预测值和相关参数改写为时变函数。 r ^ u , i ( t ) = q i T p u ( t ) + μ + b u ( t ) + b i ( t ) \hat{r}_{u,i}(t)=q_i^Tp_u(t)+\mu+b_u(t)+b_i(t) r^u,i(t)=qiTpu(t)+μ+bu(t)+bi(t)

SVD++

到这里,我们已经提及了不少基于机器学习的矩阵分解方法。我们即将介绍本篇文章的主角–SVD++,它是基于上述矩阵方法的一个改良版,在Netflix评分预测比赛中,SVD++凭借其优秀的性能力压群雄,夺得桂冠,斩获百万美元大奖。
SVD++在上述SVD模型的基础上,引入了隐式反馈值,使得用户的历史浏览数据,用户历史评分数据,电影的历史浏览数据,电影的历史评分数据能成为新的参数,有效解决了冷启动问题。我们用 N ( u ) N(u) N(u)表示用户 u u u的行为物品集。每个物品 i i i的隐式反馈为 x i x_i xi,用户 u u u对于物品及N(u)的兴趣,可以表示为 ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ \dfrac{\sum_{j\in N(u)}x_j}{|N(u)|} N(u)jN(u)xj;同时,物品 a a a被用户关注的预测函数可以被改为 r ^ u , i = q i T p u + μ + b u + b i + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|} r^u,i=qiTpu+μ+bu+bi+N(u)jN(u)xj
损失函数为 E = ∑ ( u , i ) ∈ κ ( r u , i − q i T ( p u + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ ) − μ − b u − b i ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 + b u 2 + b i 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^T(p_u+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|})-\mu-b_u-b_i)+\lambda(||q_i||^2+||q_u||^2+b_u^2+b_i^2) E=(u,i)κ(ru,iqiT(pu+N(u)jN(u)xj)μbubi)+λ(qi2+qu2+bu2+bi2)
这里的隐式因子也可以是关于用户u的属性,如果考虑到用户 u u u的其他属性 a a a,我们引入关于 a a a的隐式因子 y a y_a ya,隐式反馈值为 ∑ a ∈ A ( u ) y a ∣ N ( u ) ∣ \dfrac{\sum_{a\in A(u)}y_a}{|N(u)|} N(u)aA(u)ya,最终的预测值可以表示为 r ^ u , i = q i T p u + μ + b u + b i + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ + ∑ a ∈ A ( u ) y a ∣ N ( u ) ∣ \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|}+\dfrac{\sum_{a\in A(u)}y_a}{|N(u)|} r^u,i=qiTpu+μ+bu+bi+N(u)jN(u)xj+N(u)aA(u)ya

训练过程

我们一般用梯度下降法或迭代的最小二乘法求解,或者是更高级的优化器,如随机梯度下降法(Stochastic Gradient Descent)。此处以梯度下降法为例子,假设需要更新的参数为 q i q_i qi,那么更新的函数可以被表示为
q i ( t + 1 ) = q i ( t ) + α ∂ E ∂ q i ( t ) = q i ( t ) + α ( ( r u i − r ^ u , i ) p u ( t ) + λ q i ( t ) ) \begin{aligned}q_i(t+1)&= q_i(t)+\alpha\dfrac{\partial E}{\partial q_i(t)}\\&=q_i(t)+\alpha((r_{ui}-\hat{r}_{u,i})p_u(t)+\lambda q_i(t))\end{aligned} qi(t+1)=qi(t)+αqi(t)E=qi(t)+α((ruir^u,i)pu(t)+λqi(t))
此处 α \alpha α为学习率,当待学习的参数收敛,或者loss函数收敛,我们就可以终止学习了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值