基于不同算法的电影推荐系统的实现及比较-项目报告
成员
徐元超(3220180887), 徐金良(3220180885), 杨洋(3220180892)
项目说明
数据集
MovieLens 1MB数据集,其中包括了用户对电影的评分、标签,以及对应的时间等信息
算法说明
UserCF算法
基于用户的协同过滤算法主要包括两个步骤:
1.找到和目标用户兴趣相似的用户集合 2.找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
关键就在于计算两个用户的兴趣相似度。可利用Jaccard公式简单的计算用户u和用户v的兴趣相似度: 或者通过余弦相似度计算:
User-IIF算法
如果两个用户都购买过一个非常热门的物品,这不能说明他们兴趣相似,因为绝大多数人都买过该物品。但是如果两个用户都买过一个较为冷门的物品,那么就可以认为他们的兴趣较为相似。也就是说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。所以采用改进的兴趣相似度计算公式: 可以看到,该公式通过$\frac{1}{log(1+|N(i)|)}$惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响。
ItemCF算法
由于网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越难,并且基于用户的协同过滤算法很难对推荐结果做出解释。
基于物品的协同过滤算法主要分为两步:
1.计算物品之间的相似度
2.根据物品的相似度和用户的历史行为给用户生成推荐列表
我们采用下面的的公式定义了物品的相似度 但是该公式会造成任何物品都会和热门的物品有很大的相似度,这对致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的物品,可以用下面的公式: 这个公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性。
Item-IUF算法
即对活跃用户的权重进行了惩罚,认为活跃用户对物品相似度的贡献应该小于不活跃的用户。公式如下:
算法对比
评估指标
准确率、召回率,以及覆盖率
实验结果
User-CF:precisioin=0.2997 recall=0.0722 coverage=0.0365 User-IIF: precisioin=0.3021 recall=0.0728 coverage=0.0395 Item-CF: precisioin=0.0807 recall=0.0097 coverage=0.1478 Item-IUF: precisioin=0.0997 recall=0.0120 coverage=0.1561
结果及分析
由于选用的是MovieLens 1MB数据集,其中用户数量远小于电影数量,所以在这里基于物品的协同过滤算法在速度上远远慢于基于用户的协同过滤算法。
可见改进的User-IIF算法跟User-CF算法相比、Item-IUF算法与Item-IUF算法相比,在准确率、召回率、覆盖率都比较高。可见改进的公式效果比较明显。但是在此数据集中基于物品的协同过滤算法的准确率和召回率逗比基于用户的协同过滤算法的要低上许多,经过分析,推测是数据集的原因。数据集中大多是活跃用户,可能对基于物品的协同过滤算法有较大的影响。