SVD++算法如下:
pr(u,i) = b[u,i] + fm + nm //user u and item i
pr(u,i) is the predicted rating of user u on item i,
b[u,i] = U + b(u) + b(i)
fm = (q[i,]) * (p[u,] + pow(|N(u)|, -0.5) * sum(y[j,])), j is an item in N(u)
nm = pow(|R(i;u;k)|, -0.5) * sum((r[u,j0] - b[u,j0]) * w[i,j0]) + pow(|N(i;u;k)|, -0.5) * sum(c[i,j1]), j0 is an item in R(i;u;k), j1 is an item in N(i;u;k)
fm是通过特征层来获取用户和物品相互作用的隐语义模型
nm是传统基于社区模型的扩展,它不仅捕捉用户显式评分,也考虑用户隐式偏好
N(u)是用户u喜欢的物品i的集合
q[i,]是物品i的特征向量
y[j,]是N(u)中物品i的特征向量
R(i;u,k)是一组用户u评分的只保留k个最相似物品的集合
R(u,j0)是用户u对物品j0实际评分
b(u,j0)是用户u对物品j0的基线估计
两者可以看做物品i和j0的相似度