pure svd
通过将rating矩阵用SVD进行分解:
- M表示用户
- N表示物品
- k表示向量的维度, 用多大维度的向量去表征一个用户 ,物品的状态
分解后进行预测:
RSVD
将评分矩阵看做两个矩阵的乘积:
- 第一个矩阵U的维度M*k
- 第二个矩阵V的维度k*N
第一个矩阵的每一行表征用户的状态, 第二个矩阵的每一列表征item的状态。
初始化U,V之后, 用梯度下降最小化这个函数:
后面加的这两项是为了防止过拟合
SVD++
评分的行为从侧面反映了用户的喜好,可以将这样的反映通过隐式参数的形式体现在模型中,从而得到一个更为精细的模型,便是 SVD++。
对应的处理是加上一个W矩阵, W矩阵的维度是M*k , M表示用户的数量
在训练时, 统计每一个用户对item进行评分的index , 然后将这些index所对应的W矩阵的行进行相加, 用于表示用户对item进行评分的体现。
红色的U用户对所评分item的体现。
之后用梯度下降进行优化, 更新
MFMPC
相较于SVD++又加入了一些更加细粒化的操作, SVD++虽然考虑了用户对某些item的评分, 但是忽略了评分的等级, 所以MFMPC将SVD++的一个W矩阵拓展到了M个(M表示有多少个评分等级),例如 , 评分为1,2,3,4,5,那么M就为5 , 每一个W矩阵对应一个评分矩阵 , 用户对item评分多少就到对应的W矩阵进行梯度跟新
预测规则: