SVD是一种常用的矩阵分解技术,是一种有效的代数特征提取方法。SVD在协同过滤 中的主要思路是根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来分析数据得出预测结果。RSVD、SVD++、ASVD是基于SVD的改进算法。
本文算法主要考虑个性化推荐领域
1.Matrix Factorization Model 和 Baseline Predictors
SVD其实就是Matrix Factorization Model和Baseline Predictor的结合,所以为了方便我们先在这里介绍这两个东西。
(1)Matrix Factorization Model
把我们的用户评分想象成一个表:

每一行代表一个用户,每一列代表一个物品,这其实就是一个矩形,只是我们拥有的这个矩形可能是非常稀疏 的,也就是我们知道的评分占总量很少,但现在我们知道它是一个矩形,一个矩形自然可以表示为另两个矩形的乘积(后续会给出证明 ):

将这种分解方式体现协同过滤 中,即有:

在这样的分解模型中,Pu代表用户隐因子矩阵(表示用户u对因子k的喜好程度),Qi表示电影隐因子矩阵(表示电影i在因子k上的程度)。
(2)Baseline Predictors
Baseline Predictors使用向量bi 表示电影i的评分相对于平均评分的偏差,向量bu 表示用户u做出的评分相对于平均评分的偏差,将平均评分记做μ 。

2.SVD数学原理及推导
对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。
现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是 :在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:

则A矩阵将这组基映射为:

如果要使他们两两正交 ,即

根据假设,存在

所以如果正交基v选择为A’A的特征向量的话,由于A’A是对称阵,v之间两两正交,那么

这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化 :
因为

所以有

所以取单位向量

由此可得

当k < i <= m时,对u1,u2,…,uk进行扩展u(k+1),…,um,使得u1,u2,…,um为m维空间中的一组正交基,即将{u1,u2,…,uk}正交基扩展成{u1,u2,…,um}单位正交基。同样的,对v1,v2,…,vk进行扩展v(k+1),…,vn(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得v1,v2,…,vn为n维空间中的一组正交基。
则可得到
![](https://img