推荐系统之改进版SVD

来源:互联网 发布:util-linux 编辑:程序博客网 时间:2024/05/21 23:00


之前的blog(http://blog.csdn.net/ice110956/article/details/21955461 )简单阐述了基于SVD矩阵分解的隐因子模型。

隐因子模型通过假设一个隐因子空间,通过矩阵分解,得到隐因子空间上的用户-隐因子属性向量,以及物品-隐因子属性向量。再把两个分解后的矩阵相乘,得到满的用户-物品矩阵。以此来推荐。

 隐因子模型运用在推荐系统中,相比与简单的协同过滤,其同时考虑了用户聚类,物品聚类,因而效果会好于简单的user-CF或者item-CF。

 上篇blog中,简单介绍了基于最优化模型的矩阵分解,以此来求的隐因子空间的方法。三个简单的方法:batch SVD,incomplete incremental SVD和complete incremental SVD。

这里继续阐述另两个改进的SVD-bias SVD 和constraint SVD。

 

bias-SVD

一般的SVD的最优化目标函数如下:


其中第一项为最小二乘项,后两项为正则化约束,防止过拟合。

 第一项中的P,可以简单定义为点乘,如下:

P=Ui’*Mj;

 

我们知道,每个用户都有不同的打分习惯。比如,A,B两个用户对于电影C都是同样的喜好层度,为3。不过A是一个严格的打分者,他一般倾向于保守打分,于是A给电影C的打分为3-0.5=2.5;而B是一个宽松的打分者,他的分数便为3+0.5=4;

 如果我们不考虑上面的因素,就会简单地判断B更喜欢电影C。

 

于是,我们希望引入一个无偏的喜好度U和M,以及额外的bias偏差变量alfa,beta。用U,M来描述无偏喜好,alfa,beta描述打分宽松度。这样,我们的P函数就可以写成:

如果在加入一个基本分a,公式最终可以写成:

 


目标函数:

 

上述为四个变量的凸优化过程,其中关于Ui,Mj的负梯度同completeincremental SVD,而关于alfa,beta的求解如下:


负梯度:

 

 

于是我们遍历整个V矩阵,对于已知元素,更新上面四个值;迭代计算,直至收敛。


Constraint SVD

SVD是矩阵乘法的方式,得到用户-物品可能喜好度。从数学形式上我们可以看出,隐因子模型同时考虑了用户聚类,物品聚类,用类似聚类的信息填充了这些Miss value。如果某个用户的U-M行过于稀疏,而某个物品M-U不稀疏,(这种情况是常见的)。那么Miss value的填充很大程度上取决于这个物品的属性,最后得到近似于这个物品的平均值。

也就是,在用户,物品信息不平衡的情况下,我们容易减少用户对于喜好的影响程度。如下的contraint SVD一定程度上解决了这个问题。

我们重新定义U矩阵,如下:


其中Y表示用户的无偏喜好,I为已知元素的索引,W为一个大小=物品矩阵M-factor的矩阵。

我们可以看出,对于不同的用户,只要他们购买相同的物品,那么后一项就会完全一样。以此来进一步刻画用户特征。

对于稀疏的用户行为,后一项相当于预先填充了用户矩阵。

 

目标函数:

 

其中


负梯度方向:

 

 

算法优化:

上面的负梯度中,我们可以看出,每次计算时,对于同一用户来说,这一行的目标值,都具有相同的一项,于是我们可以考虑以行为单位,记录中间重复计算的项,以此简化计算。

 

下一篇blog继续这两个SVD的组合体- compound SVD,以及其具体的编程实现

1 0