基于邻域的算法,就是最常见的CF协同过滤算法。分为 基于用户的 user based CF 和 基于物品的 item based CF.
1.user based CF
对目标用户u, 找出与之相似的用户集合 U,将U中用户感兴趣而u没见过的物品推荐给u.
用户相似度,通过将用户表示成商品的向量后计算。
如果两两用户都计算相似度,那么计算复杂度为O(|U|^2),而对每个u来说,它的向量都是稀疏的。也就是说很多用户间没有交集,相似度计算为0。所以可以先过滤掉这些用户组合后再进行计算。一个方法是建立物品到用户的倒排表,对每个物品下的用户列表,两两组合作为key,key每出现一次加一,这样计算出每种存在交集的用户组合的相似度分子,然后除以分母即得到相似度。
得到topK相似的用户后,计算目标用户u对物品i的兴趣度就表示成这个K个用户的相似度与他们对u的兴趣度的线性组合。
用户兴趣相似度的一个改进:将商品流行度考虑进去,对热门商品采取惩罚。
2.item based CF
基于用户的CF随着用户增长,用户关系矩阵过大。基于物品的CF推荐与用户之前感兴趣过的物品有关联关系(或相似)的物品。相似度计算方式是通过用户的行为,而不是物品本身的属性来获得。
也就是将物品表示成用户的向量后计算。和user based CF同理,建立用户-物品的倒排表。
同理,会对某些属性的用户进行惩罚,来修正物品的相似度。
ItemCF的相似度矩阵归一化后能够提高精度、覆盖度。
参考:《推荐系统实践》