其中, S(u, K) 包含和用户 u 兴趣最接近的 K 个用户, N(i) 是对物品 i 有过行为的用户集合, w uv
是用户 u 和用户 v 的兴趣相似度, r vi 代表用户 v 对物品 i 的兴趣,因为使用的是单一行为的隐反馈数
据,所以所有的 r vi =1 。
如下代码实现了上面的 UserCF 推荐算法:
def Recommend(user, train, W):
rank = dict()
interacted_items = train[user]
for v, wuv in sorted(W[u].items, key=itemgetter(1), \
reverse=True)[0:K]:
for i, rvi in train[v].items:
if i in interacted_items:
#we should filter items user interacted before
continue
rank[i] += wuv * rvi
return rank
这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,w ji 是物品j和i
的相似度,r ui 是用户u对物品i的兴趣。 (对于隐反馈数据集,如果用户u对物品i有过行为,即可令
r ui =1。 )该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列
表中获得比较高的排名。该公式的实现代码如下所示。
def Recommendation(train, user_id, W, K):
rank = dict()
ru = train[user_id]
for i,pi in ru.items():
for j, wj in sorted(W[i].items(), /
key=itemgetter(1), reverse=True)[0:K]:
if j in ru:
continue
rank[j] += pi * wj
return rank