《A Guide to Singular Value Decomp osition for Collab orative Filtering》
用户对电影的打分可以用feature建立联系:用户喜欢动作片还是科幻片,该电影是喜剧还是传记。
建立两个矩阵:每个用户对各个feature的喜欢程度,电影的各个feature程度。则两矩阵相乘的结果与原来的评分越近越好,即期望越销越好。
E=21i=1∑nj=1∑mIij(Vij−p(Ui,Mj))2+2kui=1∑n∣∣Ui∣∣2+2kmj=1∑m∣∣Mj∣∣2 其中n表示用户数目,m表示物品数目,Iij是用来表示用户i有没有对物品j评过分,因为我们只需要评过分的那些越接近越好,没评过的就不需要考虑,Vij表示训练数据中给出的评分,也就是实际评分,p(Ui,Mj)表示我们对用户i对物品j的评分的预测,结果根据两向量点乘得到,后面的两项主要是为了防止过拟合,之所以都加了系数1/2是为了等会求导方便。
用梯度下降法求解,算法流程:
其中梯度:
∂Ui∂E=j=1∑mIij((Vij−p(Ui,Mj))Mj)−KuUi,i=1,…,n∂Mj∂E=i=1∑nIij((Vij−p(Ui,Mj))Uj)−KmMj,j=1,…,m 上述算法被称为批处理式学习算法,因为它计算的是整个矩阵。
不完全增量式学习
Ei=21i=1∑nj=1∑mIij(Vij−p(Ui,Mj))2+2kui=1∑n∣∣Ui∣∣2+2kmj=1∑mIij(∣∣Mj∣∣)2 梯度:
∂Ui∂Ei=j=1∑mIij((Vij−p(Ui,Mj))Mj)−KuUi,i=1,…,n∂Mj∂Ei=Iij((Vij−p(Ui,Mj))Uj)−KmIij(Mj)=Iij[(Vij−p(Ui,Mj))Uj)−KmMj],j=1,…,m 完全增量式学习是对每一个评分进行期望计算,期望如下:
还有些SVD算法考虑了每个用户,每个物品的bias,这里所谓的bias就是每个人的偏差,比如一个电影a,b两人都认为不错,但是a评分方便比较保守,不错的给3分,b评分比较宽松,不错的给4分,故一下的评分方式考虑到了每个用户,每个物品的bias,要比上述算法更加精准。原来评分的话是直接计算userfeature∗itemfeatureT, ,但现在要考虑各种bias,如下:
p(Ui,Mj,αi,βj)=a+UiTMj+αi+βj 其中a表示所有评分的平均数,αi表示用户i的bias,βi表示物品j的偏差,相乘的矩阵还是和上面一样的意思。
期望和bias求导(矩阵求导的式子不变):
Eij=21(Vij−p(Ui,Mj,αi,βj))2+2ku∣∣Ui∣∣2+2kmIij(∣∣Mj∣∣)2+2kb(αi2+βj2)∂Ui∂Eij=(Vij−p(Ui,Mj,αi,βj))−Kbαi∂Mj∂Eij=(Vij−p(Ui,Mj,αi,βj))−Kbβj 评测效果,就是误差平方和:
RMSE(P,A)=∑i=1n∑j=1mJij∑i=1n∑j=1mJij(Aij−Pij)2 基于矩阵分解的推荐算法
基于矩阵分解的推荐算法,简单入门 跟上面基本一样
参考佳文
SVD在推荐系统中的应用与实现(c++)
浅谈矩阵分解在推荐系统中的应用
非负矩阵分解(NMF)
推荐算法概览
饿了么推荐系统:从0到1
推荐系统中基于深度学习的混合协同过滤模型
推荐系统本质与网易严选实践