Application of Dimensionality Reduction in Recommender System

这篇论文应该是最早用SVD做推荐系统的文章,观点早已烂大街,前面篇幅的推荐方法分析也不是很适用现在的情况,本篇就记录一下算法细节。

Existing Recommender Systems Approaches and their Limitations

大部分协同过滤算法都是通过构造近似的近邻来达到推荐的目的,推荐算法分为:

  • 预测用户对物品的打分
  • 推荐用户最有可能买的物品Top-N

目前推荐算法很成功但往往受限于以下这些方面:

  • 数据稀疏,较少的打分记录会很大程度上影响最后的推荐
  • 计算规模,随着物品和用户的增长,计算规模递增严重
  • 同义理解,并没法探寻物品之间的潜在联系

Applying SVD for Collaborative Filtering

打分矩阵\(R\)\(m \times n\) 的矩阵,SVD分解为 \[ R=U\cdot S\cdot V^T \] 其中\(U\)\(V\) 是形状为\(m \times r\)\(n \times r\) 的矩阵,\(r\) 为矩阵\(R\) 的秩,在实际中我们可以选择\(k\) 个最大的特征值对应的子矩阵做预测,从而很大程度上降低了计算规模。

做预测时我们需要先对打分矩阵\(R\) 进行处理,对于残缺值选择用用户的平均或者用物品的平均,文中说物品的平均会产生较好的效果,然后对打分做归一化,我们的预测分数为: \[ C_{P_{pred}}=\overline{C}+U_k\cdot \sqrt{S_k}^T(c)+\sqrt{S_k}\cdot V^T_k(P) \] 在实际中,算法分为线下和线上两部分,线下部分需要大量的计算,同时也会有一些相应的存储,但计算量仍然会比简单的协同过滤要少,线上部分是动态计算并提供预测值。