我们想到的最简单算法是给用户推荐好友喜欢的物品集合。即用户 u 对物品 i 的兴趣 p ui 可以通过如下公式计算。
其中 out(u) 是用户 u 的好友集合,如果用户 v 喜欢物品 i ,则 r vi =1 ,否则 r vi =0 。不过,即使都是用户 u 的好友,不同的好友和用户 u 的熟悉程度和兴趣相似度也是不同的。因此,我们应该在推荐算法中考虑好友和用户的熟悉程度以及兴趣相似度:
这里,w uv由两部分相似度构成,一部分是用户 u 和用户 v 的熟悉程度,另一部分是用户 u 和用户 v 的兴趣相似度。
下面的代码实现社会化推荐的逻辑。在代码中, familiarity 存储了每个用户最熟悉的 K 个好友和他们的熟悉程度, similarity 存储了和每个用户兴趣最相关的 K 好友和他们的兴趣相似度。 train 记录了每个用户的行为记录,其中 train[u] 记录了用户 u 喜欢的物品列表。