Skip to content

热门推荐、基于内容推荐、基于用户协同过滤推荐、基于物品协同过滤推荐

Notifications You must be signed in to change notification settings

monyuan/Recommendation-Engine

 
 

Repository files navigation

推荐系统实践

00 前言

随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代。在这个时代,对于信息消费者,从大量信息中找到自己感兴趣的信息是一件困难的事情;对于信息生产者,让自己生产的信息脱颖而出受到广大用户的关注也是一件困难的事情。推荐系统(Recommender System)就是解决信息过载问题的重要工具,它的任务就是联系用户和信息,实现消息消费者和信息生产者的双赢。

本项目以为用户推荐电影作为推荐系统实践场景,使用MovieLens数据集,利用Python实现了基于评分排序的普通推荐、基于内容的推荐、基于用户的协同过滤推荐和基于物品的协同过滤推荐算法。

01 热门推荐/基于评分排序的普通推荐

本小节对应项目中的MostPopular_Based_Recommendation_Engine.py。该算法的推荐策略为根据电影评分权重为用户推荐电影,其主要包括两个步骤:

(1)计算每部电影的评分权重;

(2)为用户推荐排序靠前且用户没有看过的电影。

步骤(1)中采用了IMDB网站的评分权重计算公式:weighted rating = [v / (v+m)] * R + [m / (v+m)] * C,其中v代表该电影被评分的次数(即有多少人对这部电影进行了评分),m代表最小被评分次数(可取所有电影被评分次数的85%~95%百分位数,只有当某部电影被评分次数超过该值时其评分才具有可信度),R代表该电影的平均评分,C代表所有电影平均评分的平均值。

该推荐策略给用户推荐的都是热门电影,且每个用户的推荐结果几乎相同,不满足个性化推荐,且覆盖率很低,不利于挖掘长尾信息。

02 基于内容的推荐

本小节对应项目中的Content_Based_Recommendation_Engine.py。该算法的推荐策略为用户推荐和他们之前喜欢的电影相类似的电影,其主要包括两个步骤:

(1)计算电影之间的相似性

(2)根据电影相似度及用户历史行为为用户生成电影推荐列表

步骤(1)的关键是通过计算建立电影相似度矩阵,进一步地讲,就是通过电影内容属性计算与其他电影的相似度。本项目数据集中涉及电影内容属性的数据主要包括电影的类型(genres)和标签(tag),这里将这两类数据合并成为电影的“description”,描述电影内容属性,然后利用TF-IDF方法提取文本特征进行相似度计算。步骤(2)中的工作主要是从用户看过的电影中找出相似的电影,然后过滤掉用户看过的电影,最后根据相似度排序选取靠前的电影生成推荐列表。(因为该数据集中关于电影内容属性的数据较少,只有genres和tag,如果有电影的主要内容、演员和导演等数据则会使电影相似度更接近真实。项目中实际是根据评分权重排序生成推荐列表,其相关评测指标均高于根据根据相似度排序生成的推荐列表)

基于内容的推荐算法适合于新闻、网页、博客等主要是文本类内容的推荐场景,面对图形、视频流和音频流等内容时则面临着特征提取困难的局限,再加上在大多数情况下其推荐评测指标都不是最好的,因此目前大部分的推荐系统都是以其他算法为主,以该算法为辅。

03 基于用户的协同过滤推荐

本小节对应项目中的User_Based_CF_Recommendation_Engine.py。该算法的推荐策略为首先找到和目标用户有相似兴趣的其他用户,然后把那些用户喜欢而目标用户没看过的电影给目标用户,其主要包括两个步骤:

(1)找到和目标用户兴趣相似的用户集合

(2)找到这个集合中的用户喜欢的,而目标用户没看过的电影推荐给目标用户

步骤(1)中的关键是计算两个用户的兴趣相似度,协同过滤算法利用用户行为的相似度计算兴趣的相似度。给定用户u和v,令N(u)、N(v)分别为用户u、v看过的电影集合,根据余弦相似度计算用户兴趣相似度,得到用户之间的相似度后,给目标用户推荐和他兴趣最相似的K个用户喜欢的电影,完成推荐。

04 基于物品的协同过滤推荐

本小节对应项目中的Item_Based_CF_Recommendation_Engine.py。该算法的推荐策略与基于内容的推荐的推荐策略相同,其主要包括两个步骤:

(1)计算电影之间的相似性

(2)根据电影相似度及用户历史行为为用户生成电影推荐列表

基于物品的协同过滤与基于内容的协同过滤虽然推荐策略和主要步骤都相同,但两者最大的差别在于前者计算物品之间的相似度利用的是用户的历史行为,没有利用物品的内容属性,该算法认为,物品i和物品j具有很大的相似度是因为喜欢物品i的用户大都也喜欢物品j。令N(i)、N(j)分别为喜欢物品i、j的用户集合,则物品i、j之间的相似度可用N(i)与N(j)的交集占分母N(i)的比例大小衡量,比例越大,则物品i,j之间的相似性越高(项目采用余弦相似度计算物品相似度)。

05 小结

四种推荐策略的准确率、召回率和覆盖率如下表所示

Precision Recall Coverage
MostPopualr 17.44% 3.53% 0.41%
ContentBased 16.41% 3.32% 2.19%
UserCF 31.13% 6.26% 4.99%
ItemCF 28.46% 5.75% 8.18%

About

热门推荐、基于内容推荐、基于用户协同过滤推荐、基于物品协同过滤推荐

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%