# -Collaborative-filtering-algorithm-
基于python实现,通过协同过滤算法实现的一个简单的豆瓣电影推荐系统
本次实验学习如何利用python、MySQL作为开发环境(主要调用pymysql、request、json、numpy、pandas等python库),通过爬取豆瓣电影数据,实现了一个基于基于用户协同过滤的简单推荐系统demo,笔者主要行文思路如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155333926.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
## 数据获取
本次实验数据获取源选取自[豆瓣电影](https://movie.douban.com/),主要通过python中resquest库对数据进行爬取与处理,再通过pymysql库实现对数据的存储(此处未将数据全部导入SQL不作E-R图展示),最终爬取数据构成如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155527771.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
## 界面设计
界面设计主要通过python中PyQT5库进行实现,实现了初始的用户登录、用户注册与电影检索等初始功能,同时再结合推荐算法,可以实现推荐系统中对初始用户的冷启动、老用户个性化推荐功能。初始界面如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155554296.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
@[toc](简单的豆瓣电影推荐系统demo)
>推荐毕设前的小项目demo,主要内容是ItemCF+简单的系统开发
# 前言
本次实验学习如何利用python、MySQL作为开发环境(主要调用pymysql、request、json、numpy、pandas等python库),通过爬取豆瓣电影数据,实现了一个基于基于用户协同过滤的简单推荐系统demo,笔者主要行文思路如下图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155333926.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
# 背景介绍
如果说互联网的目标是连接一切,哪推荐系统的功能与作用就是建立起更加有效率的连接,推荐系统可以连接用户与内容与服务,可以为企业、政府等组织节省大量的成本,同时将有用的内容精准的投放到个性用户里,大大节省用户的时间成本。
# 开发部分介绍
## 数据获取与存储
本次实验数据获取源选取自[豆瓣电影](https://movie.douban.com/),主要通过python中resquest库对数据进行爬取与处理,再通过pymysql库实现对数据的存储(此处未将数据全部导入SQL不作E-R图展示),最终爬取数据构成如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155527771.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
## 界面设计
界面设计主要通过python中PyQT5库进行实现,实现了初始的用户登录、用户注册与电影检索等初始功能,同时再结合推荐算法,可以实现推荐系统中对初始用户的冷启动、老用户个性化推荐功能。初始界面如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155554296.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
# 算法原理
## 推荐算法与冷启动简述
推荐算法的初衷想法就是希望把商品、内容精准的推送到用户手中,使得商品得到精准的流量,帮助用户省去选择和寻找信息的时间成本。![在这里插入图片描述](https://img-blog.csdnimg.cn/20201015155622185.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
从电影的推荐系统角度看推荐算法,推荐系统主要需要解决的问题是推荐系统的冷启动、推荐系统怎样基于用户的兴趣推荐出准确的内容与信息?
对于推荐系统的冷系统的冷启动问题,主流解决思想有基于用户的冷启动、基于物品的冷启动、基于非个性化的推荐,本次实验只考虑新用户注册的情况,不考虑新物品进入系统的情况,故解决的是用户的冷启动问题,解决思想是根据新用户登入其自定义的个性标签(感兴趣的电影类型)定义出一大致的粗粒度的个性化用户画像,再根据这个画像做出一个个性化推荐的左端界面,右端界面为基于物品的热度的热门电影推荐。
完成用户的“冷启动”后,系统得到足够支撑推荐算法的用户行为数据,基于相关的推荐算法,可以对用户做出更加精确的推荐。结合笔者所查文献与资料,
常用推荐算法主要有:基于用户的协同过滤推荐、基于物品的协同过滤推荐、隐语义模型的推荐、基于图的推荐。结合所抓取数据的构成与体量,采用基于用户的协同过滤算法做系统的主要的推荐算法。
## 基于物品的协同过滤(ItemCF)
基于物品的协同过滤算法是目前业界应用做多的算法,如:亚马逊、YouTube其推荐算法基础都是该算法。基于物品的协同过滤在解决物品数量一定,但用户数量巨大的应用场景上很有优势,与本次实验解决问题类型相近故选用(豆瓣网站的电影数量是一定的,但是用户数量巨大。)在本次实验中ItemCF算法的实现思想主要为以下两个步骤:
1.计算物品间的相似度:
从物品上出发,可以定义物品的相似度计算公式为:$$w_{i j}=\frac{|N(i) \cap N(j)|}{|N(i)|}$$
其中分母|N(i)|是喜欢物品i的用户数,分子${|N(i) \cap N(j)|}$是既喜欢物品i同时也喜欢物品j的用户数量。不难看出,公式的定义是喜欢物品i的用户同时也喜欢物品j的用户比例,该公式一定程度上可以反映物品i、j的相似程度,但是对于j是热门物品的情况,其很多人都喜欢j,j的体量本身就很大,那么上述公式的计算结果 将接近于1,这对对于致力于挖掘长尾信息的推荐来说显然是一个不好的特性。因此,在此基础上加入对物品j权重的惩罚,得到改进的相似度计算公式为:![在这里插入图片描述](https://img-blog.csdnimg.cn/2020101515582068.png#pic_center)
计算物品相似度的算法部分实现思路为:
(1)建立用户-物品倒排表(对每个用户建立一个其喜欢的物品的列表);
(2)对于每个用户,将其的物品列表两两在共现矩阵中加1;
(3)将各用户的共现矩阵相加得到总的共现矩阵C;
(4)将C矩阵归一化即得到物品之间的余弦相似矩阵W。
形象的实现思路如图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020101515583558.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plbmdtZW5nMTk5OA==,size_16,color_FFFFFF,t_70#pic_center)
2.根据物品相似度和用户的历史行为生成个性化的推荐列表:
在计算得到物品间的相似度后,再同如下公式计算得到用户u对物品j的兴趣:$$
p_{\text {uj }}=\sum_{i=N(u) \cap s(j, K)} w_{j i} r_{u i}
$$
其中N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品集合,s(j,K)是与物品j最相似的K个物品的集合,wij是物品i与物品j的相似度,rui是用户u对物品j的�
基于python实现,通过协同过滤算法实现的一个简单的豆瓣电影推荐系统.zip
需积分: 0 140 浏览量
2024-01-10
11:49:36
上传
评论 1
收藏 2.56MB ZIP 举报
白话Learning
- 粉丝: 3173
- 资源: 2464
最新资源
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab+bp神经网络的神经网络汉字识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈