协同过滤推荐系统简介


该系统为基于协同过滤算法的Django电影推荐系统, [点击跳转可预览]( 电影推荐系统 ) 详情介绍如下所示。


系统技术框架简介


数据集简介

豆瓣数据集


基于requests的python爬虫去抓取豆瓣电影的电影信息,包含图片信息,总共2250部。

数据属性:



评分: 附带随机生成数据的脚本,可以随机生成指定数目的用户和用户的评分


movielens数据集


movielens 100k数据集+图片


数据维度: movieId,title,genres,picture

电影数量: 37544

评分数量: 93202+

movielens数据集+图片+用户数据和评分数据+csv存储



功能简介

电影展示,电影搜索,标签分类


标签分类



用户的登录,注册,修改信息

用户注册界面


用户登录界面


用户个人信息



用户注册代码



用户对电影的打分,收藏和电影的详情页面




基于user和Item的协同过滤推荐

用户推荐界面


用户推荐代码



物品推荐界面


物品推荐部分代码


后台管理系统界面,可以进行电影信息的增删改查




数据库简介


数据库模型代码



算法简介

系统采用基于用户/物品的协同过滤算法


基于用户的协同过滤

算法: 根据用户对电影的打分来进行推荐。根据皮尔森相关系数 从所有打分的用户中找出和当前用户距离最近的n用户,然后从n个用户看过的电影中找15个当前用户未看过的电影。


皮尔森距离公式:





基于物品的协同过滤


  1. 计算用户的共现矩阵

遍历所有用户的评分值,存储电影之间被相同用户看过的值



  1. 计算物品相似度,这里计算相似度并没有引进物品的属性,而是简单地通过分析用户的历史行为记录进行计算,

N(i)代表喜欢物品i的用户数量,w(j)代表喜欢物品j的用户数量,通过余弦相似度来计算两个物品间的距离。




  1. 通过以下公式来计算用户u对物品j的兴趣 N(u)用户u看过的电影。w(j,i)代表物品j和物品i的相似度 s(j,k)代表和物品j最相似的k个电影集合。

选取k个用户u看过的和电影j最相似的电影, rui代表用户u对物品i的兴趣,这里用用户u对物品i的打分值来代替



将与物品j距离最近的k件物品U同时是用户u看过的作为i,将用户对i的得分和i与j的权重值进行想成并且累加,得到用户u对物品j的喜爱值。选取n件推荐给用户。


相似度:共现值/N的点赞值*M的点赞值 开根号

推荐值: 相似度*评分

根据用户点赞过得商品来寻找相似度推荐。

计算每个点赞过的物品和所有未点赞物品之间的得分。得分=相似度*打分值

得分越高表示越相似。 然后返回结果


冷启动问题解决

在用户首次注册的时候会为用户提供感兴趣的标签选择界面。然后在用户未进行打分的情况下,会为用户推荐喜欢标签的电影。


对算法改进——结合标签的协同过滤推荐

在冷启动页面用户选择标签后将用户对这些标签标签的喜爱值设为5。

在用户为电影打分后,会根据此电影的标签来更新用户对标签喜爱值得分。

在根据协同过滤得到为用户推荐的电影后,如果推荐的电影数量不足15部,则从用户喜爱的标签中选取一部分电影来填充

更新标签喜爱值的策略将用户对电影的打分值减三然后加到喜爱值表中。