本文主要参考自Yehuda Koren的论文Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model
1 预备知识
1.1 Singular Vector Decomposition (奇异值分解)
对于任意一个m行n列的矩阵A,它必然能被分解为三个矩阵:
其中, Σ 是一个对角矩阵,对角线为该矩阵的所有奇异值,如下:
其中r为矩阵A的秩, σ1,σ2,⋯,σr 按从大到小的顺序排列。在实际使用中一般从 σ 中取前k个组成 Σ′ ,从U中取出前k列组成U’,从V中取出前k行组成V’,然后将 Σ′,U′,V′ 这三个矩阵相乘,这样得到的矩阵A’和原矩阵A十分相似,k越大,相似度越高。
若只将
Σ′
和U’相乘,得到:
其中B是m行k列的,V’是k行m列的。
1.2 评分矩阵
在推荐系统中一般会有用户对物品的评分矩阵。类似下表格:
用户\物品 | 物品1 | 物品2 |
---|---|---|
用户1 | 5 | 4 |
用户2 | 6 | 7 |
用 rui 表示用户u对物品i的评分。
1.3 Baseline estimates
在实际情况中,有一些物品的评分要比平均分高,有一些用户的打分则可能比平均分低。
使用
μ
来表示总体的平均分,
bu
表示用户u的打分的平均值相对于
μ
的偏移量,
bi
表示物品i的得分相对于
μ
的偏移量,使用
bui
来表示预测得到的u对i的评分,则预测公式为:
通过最小化下式即可训练得到 bu 和 bi
其中 K={(u,i)|rui is known}
2 Basic SVD model
根据上文提到的svd,用户对物品的评分矩阵可以分解为两个矩阵的乘积,将第一个矩阵的每一行作为向量
pu
分配给每个用户,将第二个矩阵的每一列作为向量
qi
分配给每个物品。那么就有:
pu 可以理解为用户u对物品的每个品质的喜好程度, qi 可以理解为物品i的每个品质的好坏程度。但是我们并不显示地规定物品有哪些品质,只规定物品的品质的数量,规定的品质的数量越多,模型的精度越高。
再将上面的式子与上面的Baseline estimates结合:
使用梯度下降最小化下式即可得到 bu,bi,pu,qi
3 Asymmetric-SVD
在Basic SVD的基础上,使用物品的信息来代替用户的向量
pu
得到如下公式:
其中R(u)为用户u评价过的物品的集合,相当于用户对推荐系统的显示的反馈。N(u)为用户u浏览过但是没有评分的物品的集合,相当于用户对推荐系统的隐式的反馈。
这个模型与Basic SVD相比的一个好处是当需要预测一个新的用户对物品的评分时,不需要再重新训练模型,只要用户对系统给出了反馈即可进行预测。
但是如果有新的物品被加进推荐系统的话则需要重新训练模型。
4 SVD++
svd++在基础svd的基础上加上了用户的隐式反馈。
根据原作者的实验,svd++与前两种算法相比预测的准确率更高,但是并不具备ASVD的优势。
5 SVD++与邻居模型相结合
5.1 邻居模型
用
Sk(i)
表示与物品i最为相似的k个物品。
令
Rk(i;u)=R(u)∩Sk(i), Nk(i;u)=N(u)∩Sk(i)
预测公式为:
5.2 结合的模型
我们把svd++和邻居模型的预测公式结合起来:
根据原作者使用netflix提供的数据集进行的实验,使用这种方式预测出来的准确率最高。
参数训练,使用梯度下降最小化下式: