之前写过用python实现svd推荐算法,这次更进一步,在原来的基础上实现了svd++算法,基本框架和之前一篇是类似的.
SVD++算法的预测评分式子如下。
与SVD相比增加的是这部分:
它的含义是这样的:评分行为从侧面反映了用户的喜好,可以将这样的反映通过隐式参数形式体系在模型中,得到的就是上式的部分,其中Iu是用户u评论过的物品的集合,yj为隐藏的评价了物品j的个人喜好偏置,也通过梯度下降算法优化。这里的-1/2是个经验值。
详细代码如下:
import numpy as np
import random
'''
author:huang
svd++ algorithm
'''
class SVDPP:
def __init__(self,mat,K=20):
self.mat=np.array(mat)
self.K=K
self.bi={}
self.bu={}
self.qi={}
self.pu={}
self.avg=np.mean(self.mat[:,2])
self.y={}
self.u_dict={}
for i in range(self.mat.shape[0]):