书接上回:基于内容的推荐算法
协同过滤算法简介
顾名思义,“协同过滤”就是协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。
算法大致分为两种,一个是基于用户的协同过滤,另一个是基于物品的协同过滤。
对于第一种算法,直观上的解释是:有着相同兴趣爱好的用户们,喜欢的物品可能相同。例如用户A和用户B的兴趣爱好重合了百分之九十,那么就可以依据这个,向用户A推荐用户B感兴趣而对用户A还没有进行曝光过的物品;同理也可以对用户B进行类似的推荐。
对于第二种算法,直观上的解释是:拥有类似属性的物品们,可能拥有类似的评分。例如用户A对物品1的评分是五分,并且物品2与物品1拥有的属性很类似(比如物品1是苹果,物品2是香蕉,它们都是水果),那么用户A对物品2的评分很可能也是五分。
相似度计算
思考:为什么要有相似度计算?相似度计算是用来计算谁跟谁之间的相似度的?
为了计算到底哪些用户拥有相同的兴趣爱好、以及哪些物品拥有类似的属性,进而我们需要相似度计算。
以下是常用的几种相似度计算公式。
杰卡德相似度
余弦相似度
皮尔逊相似度
基于用户的协同过滤(UserCF)
此算法是思想是充分利用用户与用户之间的协同信息,从而预测那些没有被打分的物品的得分情况,再将得分情况最好的前N位,推荐给用户。
假设有以下的共现矩阵:
现在的问题是根据已有用户的打分情况,预测用户Alice对物品5的打分。如果使用UserCF算法,将有以下步骤:
(1)分别计算用户Alice和其他用户的相似度:
上述共现矩阵的每一行就是每个用户的偏好向量,计算用户之间相似度的过程就是计算每个用户偏好向量之间的相似度的过程;只对有评分的物品计算(不包括物品5,因为 Alice 没有评分)。
假设用户Alice和用户1、2、3、4的相似度分别为a1、a2、a3、a4,且a1>a2>a3>a4。即用户1和用户2与用户Alice最相似。
(2)根据相似度计算用户Alice对物品5的得分:
取与用户Alice最相似的前几名用户,从而预测Alice对物品5的得分。假设当前取用户1和用户2。
根据以下的评分预测方式(有多种,以下公式只是一种)以及共现矩阵,Alice对物品5的预测得分 = ((a1 * 3)+ (a2 * 5))/ a1 + a2
(3)根据得分情况为用户Alice进行物品的推荐:
设置一个阈值,当预测得分超过阈值时,即将物品推荐给用户。
基于物品的协同过滤(ItemCF)
还是使用上述的共现矩阵来举例,需要预测Alice对物品5的评分。那么大体步骤和UserCF差不多。
(1)计算物品5与其他物品的相似度:
可以将上述共线矩阵的每一列看做是每个物品的属性向量。计算物品相似度的过程就是计算这些属性向量的相似度的过程。假设与物品5最相似的是物品1和物品4,相似度分别为b1和b4。
(2)根据相似度情况计算物品5的评分:
同UserCF步骤;
(3)根据得分情况为用户Alice进行物品的推荐:
同UserCF步骤;
两大算法缺点
(1)相似性矩阵的维护成本太高。不管是UserCF还是ItemCF,都存在这个情况。如果来一个新用户或者新物品,则需要将其与其他所有已存在的用户或者物品进行相似度的计算,时间复杂度过高;
(2)共现矩阵的稀疏性问题。考虑两种极端情况:
一种是某个用户的历史行为数据极少,即在用户偏好向量中存在很多0,那么很难通过相似度计算来找到和这个用户有相同兴趣爱好的其他用户;
另一种是某个商品的历史行为数据极少,即这个商品的属性向量中存在很多0,同理也很难通过相似度计算找到和这个商品相似的其他商品;
(3)不具备很强的泛化能力。如下图。
参考资料:深度学习推荐系统(王喆)
经典算法之协同过滤算法
手写协同过滤算法