在一个线上的个性化推荐系统中,当一个用户需要个性化推荐时, 找到与用户有相同的兴趣爱好的用户来进行推荐物品是一个不错的选择。
基于用户的协同过滤推荐算法主要包括两个步骤:
(1)找到和目标用户兴趣相似的用户集合。
(2)找到此相似集合中用户没有购买过, 但是可能喜欢的商品进行推荐。
步骤(1):
对于相似用户的查找,就需要用一个方法去衡量这个相似度。
衡量相似度的方法有一下几种:
①:Jaccard公式
②:余弦相似度
③:改进版本的余弦相似度:
借用《推荐系统实践》中的说法,两个用户同时都买了《新华字典》, 这丝毫不能说明他们的兴趣相似。
但是如果两个用户都买过《数据挖掘导论》,那么这么两个用户的兴趣很可能相似。
话句话说,两个用户对冷门的物品采取过相同的行为更能说明两个用户的兴趣相似。
所以一下的惩减相似度去计算两个用户的兴趣相似度
在求上述做法的时候 可以通过下图的方式进行,以增加进行的速率
首先建立物品到用户的倒排表,对于每个物品都去保存对该物品产生过行为的用户列表。 然后通过建立洗漱矩阵的方式去计算①公式中的分子部分, 为了很好的保存这个矩阵,我们不必去建立numpy矩阵浪费大量的memory,我们可以通过双重字典的方式去存储这些内容。 之后计算w值。
步骤二:
在得到用户之间的兴趣相似度后,下一步的做法是给用户(u)可能感兴趣的物品(i)进行评分。
UserCF中用以下的方式去进行计算用户对物品的感兴趣程度。
其中S(u,k) 表示对用户u兴趣最近接的K个用户。表示用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以均为1.
这样就能做基于用户的协同过滤推荐了。