做推荐系统的,下面是部分数据集
dtype=[('userId',np.int32),('movieId',np.int32),('rating',np.float32)]
dataset=pd.read_csv(DATA_PATH,usecols=range(3),dtype=dtype) # 读取csv文件
users_ratings=dataset.groupby('userId').agg([list])
items_ratings=dataset.groupby('movieId').agg([list])
# User-LF 10 代表 隐含因子个数是10个
P = dict(zip(users_ratings.index,np.random.rand(len(users_ratings),10).astype(np.float32)
))
# Item-LF
Q = dict(zip(items_ratings.index,np.random.rand(len(items_ratings),10).astype(np.float32)
))
# 梯度下降优化损失函数
for i in range(15):
print('*' * 10, i)
for uid, iid, real_rating in dataset.itertuples(index=False):
# 遍历 用户 物品的评分数据 通过用户的id 到用户矩阵中获取用户向量
v_puk = P[uid]
# 通过物品的uid 到物品矩阵里获取物品向量
v_qik = Q[iid]
# 计算损失
error = real_rating - np.dot(v_puk, v_qik)
# 0.02学习率 0.01正则化系数
v_puk += 0.02 * (error * v_qik - 0.01 * v_puk)
v_qik += 0.02 * (error * v_puk - 0.01 * v_qik)
P[uid] = v_puk
Q[iid] = v_qik
v_puk += 0.02 * (error * v_qik - 0.01 * v_puk) 主要是这个向量的更新我不明白,为啥这么更新的