svd在推荐系统中的应用

本文主要参考自Yehuda Koren的论文Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model

1 预备知识

1.1 Singular Vector Decomposition (奇异值分解)

对于任意一个m行n列的矩阵A,它必然能被分解为三个矩阵:

A=UΣV

其中, Σ 是一个对角矩阵,对角线为该矩阵的所有奇异值,如下:
Σ=σ1σ2σr

其中r为矩阵A的秩, σ1,σ2,,σr 按从大到小的顺序排列。在实际使用中一般从 σ 中取前k个组成 Σ ,从U中取出前k列组成U’,从V中取出前k行组成V’,然后将 Σ,U,V 这三个矩阵相乘,这样得到的矩阵A’和原矩阵A十分相似,k越大,相似度越高。

若只将 Σ 和U’相乘,得到:

A=BV, where B=UΣ

其中B是m行k列的,V’是k行m列的。

1.2 评分矩阵

在推荐系统中一般会有用户对物品的评分矩阵。类似下表格:

用户\物品物品1物品2
用户154
用户267

rui 表示用户u对物品i的评分。

1.3 Baseline estimates

在实际情况中,有一些物品的评分要比平均分高,有一些用户的打分则可能比平均分低。
使用 μ 来表示总体的平均分, bu 表示用户u的打分的平均值相对于 μ 的偏移量, bi 表示物品i的得分相对于 μ 的偏移量,使用 bui 来表示预测得到的u对i的评分,则预测公式为:

bui=μ+bu+bi

通过最小化下式即可训练得到 bu bi
Σ(u,i)K((ruiμbubi)2+λ1(b2u+b2i))

其中 K={(u,i)|rui is known}

2 Basic SVD model

根据上文提到的svd,用户对物品的评分矩阵可以分解为两个矩阵的乘积,将第一个矩阵的每一行作为向量 pu 分配给每个用户,将第二个矩阵的每一列作为向量 qi 分配给每个物品。那么就有:

r^ui=pTuqi

pu 可以理解为用户u对物品的每个品质的喜好程度, qi 可以理解为物品i的每个品质的好坏程度。但是我们并不显示地规定物品有哪些品质,只规定物品的品质的数量,规定的品质的数量越多,模型的精度越高。

再将上面的式子与上面的Baseline estimates结合:

r^ui=μ+bu+bi+pTuqi

使用梯度下降最小化下式即可得到 bu,bi,pu,qi
Σ(u,iK)((ruiμbubipTuqi)2+λ(b2u+b2i+||pu||2+||qi||2))

3 Asymmetric-SVD

在Basic SVD的基础上,使用物品的信息来代替用户的向量 pu 得到如下公式:

r^ui=bui+qTi(|R(u)|12ΣjR(u)(rujbuj)xj+|N(u)|12ΣjN(u)yj)

其中R(u)为用户u评价过的物品的集合,相当于用户对推荐系统的显示的反馈。N(u)为用户u浏览过但是没有评分的物品的集合,相当于用户对推荐系统的隐式的反馈。
这个模型与Basic SVD相比的一个好处是当需要预测一个新的用户对物品的评分时,不需要再重新训练模型,只要用户对系统给出了反馈即可进行预测。
但是如果有新的物品被加进推荐系统的话则需要重新训练模型。

4 SVD++

svd++在基础svd的基础上加上了用户的隐式反馈。

r^ui=bui+qTi(pu+|N(u)|12ΣjN(u)yj)

根据原作者的实验,svd++与前两种算法相比预测的准确率更高,但是并不具备ASVD的优势。

5 SVD++与邻居模型相结合

5.1 邻居模型

Sk(i) 表示与物品i最为相似的k个物品。
Rk(i;u)=R(u)Sk(i), Nk(i;u)=N(u)Sk(i)
预测公式为:

r^ui=μ+bu+bi+|Rk(i;u)|0.5ΣjRk(i;u)(rujbuj)wij+|Nk(i;u)|0.5ΣjNk(i;u)cij

5.2 结合的模型

我们把svd++和邻居模型的预测公式结合起来:

r^ui=μ+bu+bi+qTi(pu+|N(u)|12ΣjN(u)yj)+|Rk(i;u)|0.5ΣjRk(i;u)(rujbuj)wij+|Nk(i;u)|0.5ΣjNk(i;u)cij

根据原作者使用netflix提供的数据集进行的实验,使用这种方式预测出来的准确率最高。

参数训练,使用梯度下降最小化下式:

Σ(u,i)K((ruir^ui)2+λ1(b2u+b2i)+λ2(||qi||2+||pu||2+||yj||2)+λ3(ΣjRk(i;u)w2ij+ΣjNk(i;u)c2ij))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值