UserCF:UserCollaborationFilter,基于用户的协同过滤
算法核心思想:在一个在线推荐系统中,当用户A需要个性化推荐时,可以先找到和他有相似兴趣的其它用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A,这种方法称为基于用户的协同过滤算法。
可以看出,这个算法主要包括两步:
一、找到和目标用户兴趣相似的用户集合——计算两个用户的兴趣相似度
二、找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户——找出物品推荐
下面分别来看如何实现这两步:
一、计算两个用户的兴趣相似度:
给定用户u和用户v,令N(u)表示用户u感兴趣的物品集合,N(v)表示用户v感兴趣的物品集合,那么可以通过Jaccard公式或者通过余弦相似度公式计算:
...Jaccard公式
...余弦相似度公式
举例:下图表示用户A对物品{a,b,d}有过行为,用户B对物品{a,c}有过行为
利用余弦相似度计算可得:
用户A和用户B的兴趣相似度为:
(cosθ = X * y /(||X|| * ||y||)) 也就是X * y = ||X|| * ||y|| * cosθ 这个公式推导得出
同理,
但是,需要注意的是,这种方法的时间复杂度是O(U^2),因为我们需要计算每一对用户之间的相似度,事实上,很多用户相互之间并没有对同样的物品产生过行为,所以很多时候当分子为0的时候没有必要再去计算分母,所以这里可以优化:即首先计算出|N(u) 并 N(v)| != 0 的用户对(u,v),然后对这种情况计算分母以得到两