数据集:https://www.upf.edu/web/mtg/lastfm360k
1. userCF算法主要包括两个部分:
https://blog.csdn.net/bbbeoy/article/details/78646537
①:找到和目标用户相似的用户集合
②:找到这个集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
首先计算两两用户相似度。协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定两个用户u,v,令N(u)表示用户u曾经做出的有过正反馈的物品集合,N(v)表示用户v曾经做出的有过正反馈的物品集合。
可通过余弦相似度计算:
上面用户兴趣相似度计算过于粗略,比如两个用户同样买过热门物品并不代表他们兴趣相似,换句话说只有买过相同的冷门物品才能表示两个用户兴趣相似。故有改进版本的计算相似度:
其中N(u)表示与用户u产生过行为的物品列表;N(i)表示与物品i产生过行为的用户列表。
可用看出该公式通过
惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响。
那在实际计算时应该如何计算相似度呢?
首先建立物品到用户的倒排表,一个物品可能有多个用户与其产生过行为,对于每个物品都保存对该物品产生行为用户的列表。假设用户u和用户v同时属于倒排表中K个物品对应的用户列表,那么C[u][v]=k,从而可用扫描倒排表中每个物品对应的用户列表,依次算出C[u][v],最终得到所有用户之间不为0的C[u][v]。
得到用户之间兴趣相似度以后,userCF算法会给用户推荐和他兴趣最相似的k个用户喜欢的物品,如下公式计算用户u对物品i的感兴趣程度: