Python基于协同过滤算法的电影推荐系统设计与实现
Python基于协同过滤算法的电影推荐系统设计与实现
摘 要 随着⽹络化速度的不断加快,庞⼤的信息量让⼈们难以快速准确地获取⾃⾝需要的信息。如何从多种多样的电影中获取⾃⼰感兴趣的部分,是值得关注的问题。推荐技术是运⽤普遍的信息过滤技术,它可以从⼤量的数据中过滤出⽤户感兴趣的信息,实现个性化推荐的功能。⽂中⾸先简述了推荐系统,然后分析了协同过滤算法,最后使⽤改进的余弦相似度完成系统算法设计。本系统使⽤Python作为主要开发语⾔,Pyqt5框架实现系统的UI可视化,MySQL作为系统数据库设计开发了⼀款电影推荐系统,实现了主动为⽤户推送信息的功能,为观影者提供了便利,基本实现所需功能。
关键词 协同过滤 ;相似度计算;电影推荐
Design and Implementation of Films Recommendation System Based on Collaborative Filtering Algorithm
Abstract As the speed of networking has developed constantly, people can’t find the information they need fleetly and accurately because of the enormous information. It is a concern that how to get some information you’re interested in form different kinds of movies. The recommendation technology is a widely used which can filter out the interests of the users from a large amount of information. It can realize personalized recommendation function. Firstly, the recommendation system is described briefly
in this paper, then, we analyze the collaborative filtering algorithm, finally, the improved cosine similarity was used to complete the algorithm design. This system uses Python as the development language and uses
Pyqt5 to realize the visualization of the system. Besides using MySQL as the background database to develop a movie recommendation system, which realizes the function of actively recommendation information for users, provides convenience for viewing, implements the basic function.
Keywords Collaborative Filtering; Similarity calculation; Film recommendation
前 ⾔
互联⽹的发展在某些程度上为⼈们提供了便利,但也带来了不少问题,信息超载就是 备受关注的问题之⼀。⼈们希望通过娱乐的⽅式提⾼对⽣活品质的追求,观影成为了必选⽅式之⼀。当⽤户观看影⽚⽬标不明确时,常常需要浪费很多时间去搜索,才能到⾃⼰喜爱的影⽚。推荐系统的出现让这种问题变得不再如此棘⼿。
本⽂的个性化推荐系统分为显⽰模块、数据读存模块、数据预处理模块、推荐计算模块和查询模块[1]。模块化的设计让系统的耦合度⼤⼤降低,更有利于之后系统的部分功能更新。该系统依据⽤户、
电影、⽤户对电影的评分以及⽤户相似度数据,进⾏协同过滤算法处理,把电影推荐给⽤户,体现了流⾏性和个性化的需求。个性化推荐技术在很多领域已有了⼴泛地运⽤,我们主要借鉴推荐系统这⼀特点,实现在电影推荐这⼀领域的运⽤。
本⽂的内容结构如下:
第⼀部分对本⽂的研究背景和意义作了介绍,第⼆部分简述了系统开发所需关键技术,第三部分叙述推荐系统理论及系统设计算法-基于⽤户的协同过滤,第四部分进⾏了细致的系统分析,第五部分为系统的具体设计,第六部分是系统的实现,第七部分是总结。
1 研究背景及意义
1.1 研究背景
“互联⽹+”的数据时代下,推荐系统被不断应⽤于各⾏各业已成为⼀种流⾏性趋势。同时,由于⼈们越来关注⽣活的质感,⼤家开始更偏向于将观看电影作为消遣娱乐的⽅式。多数⼈已经将观影作为娱乐⽣活中的⼀部分,观看电影不仅可以放松⼼情,还是⼀种增长知识的⽅法。观看不同类型的电影,可以让⼈们体验别具⼀格的⼈情⽂化。但⽹络上海量的电影信息已不能满⾜⼈们对它的需求,⼈们更希望快速地发现符合⾃⼰喜好的影⽚,⽽不是盲⽬的查,想要将节省出来的时间做更有意义的事情。
推荐系统则符合了⼈们的这⼀要求,主动向⽤户推送可能会喜欢的电影。类似于⾼校图书推荐系统,根据读者的阅读⾏为向其主动推荐书籍。
1.2 研究意义
上世纪90年代初兴起了推进系统的研究[2]。推荐系统涉及科学、管理、统计等多门学科的知识,发展迅速,在信息搜索、⽹络安全、数据挖掘、电⽹营销等领域运⽤⼴泛[3]。本⽂开发的系统主要具有三个重要的意义:
(1)从应⽤需求看[4]:推荐信息不需要⽤户⾃⼰去查,做到了真正意义上的主动推送。把⽤户忽略观看的电影推荐出来,引起⽤户的观看欲。
(2)从技术实现看:该算法实现相对简单,推荐结果较为合理。
(3)从⽤户⾓度看:为喜爱观影的⽤户节省搜索时间,为⽤户提供便利。
2 关键技术
2.1 开发语⾔
本⽂的开发语⾔是Python。它是⼀个强类型脚本语⾔,具有开源性,可进⾏移植,简洁性⾼,功能众多[5]。它的⼀⼤特点是能够和其他语⾔⼀起使⽤,扩展性⾼,动态特征明显,交互性灵活。Python语⾔⽐较容易理解,代码风格简洁,是初学者的优先选择。
2.2 计算平台
本⽂使⽤ Spark作为平台,⽤于计算。它是⼀个数据框架,可进⾏⼤量数据处理。速度上,能够更加迅速的进⾏数据分析,并⽀持多种类型的计算。通⽤性上,Spark可单独完成分布式任务。此外,Spark⽀持多种任务,具有⾼容错性,⽅便操作。
2.3 Python QT5
Python QT5是常⽤的框架,跨平台性强,具有扩展性语⾔模块。可⽤于GUI可视化操作页⾯的制作。QT5可⽣成拓展和宏,允许组件编程。QT5功能完善且附带⽂档,可⾃主学习。
2.4 数据库MySQL
2.4 数据库MySQL
MySQL拥有⼤规模数据中⼼,可以在不同的表中存储数据,灵活性⾼,可进⾏数据库搭建;SQL是⼀
种查询语⾔,具备源码开放性,管理员可直接下载使⽤;MySQL体积⼩,造价低、性能好、灵活性强、安装简单[6];MySQL进⾏集合函数操作,通过类库形式调⽤,可与开发语⾔不同的平台结合使⽤,跨平台性好[7]。
2.5 Pycharm开发⼯具
本⽂的开发⼯具使⽤的是Pycharm。它是⼀种Python IDE,带有⼀整套可以帮助⽤户在使⽤Python语⾔开发时提⾼其效率的⼯具。
3 推荐系统基本理论
对⽹络信息的需求是⽤户们的初衷,推荐系统在被提出后,在⼤量⽤户当中渐渐流⾏起来。它主要包栝三部分:⽤户,项⽬及推荐⽅法。在⽤户未向系统提供任何如关键词等具有参考价值的信息时,系统能够主动记录⽤户进⾏过的历史操作并记录,经过预先设定的推荐⽅法进⾏计算,把认为对⽤户有⽤的或者⽤户⾃⼰感兴趣的信息提交系统,⽅便查看结果信息[8]。例如,⽤户A预想在⼀个⽉内购买某品牌运动鞋,关注了⼏家鞋类店铺,浏览了运动鞋的销售情况,下次该⽤户登陆账户时,系统会推荐此类运动鞋供⽤户参考并选择。
推荐系统发展迅速,每⼀个阶段都会根据发展需要进⾏技术上的改进。现阶段,根据对数据的不同操
作⽅式和系统实现形式的差异,主要基于四类推荐:1)⼈⼝统计学;2)内容;3)关联规则;4)协同过滤[2]。本⽂我们运⽤协同过滤算法,对系统进⾏设计。
3.1 协同过滤算法简介
推荐系统在时代发展潮流中,有着不可估量的作⽤,为⼈们的⽣活、学习、⼯作等都提供了帮助。其中,协同过滤算法是使⽤较多,青睐度较⾼的。它的关键在于了解正在使⽤该系统的⽬标⽤户的特征,通常指的是相似⽤户的属性。属性也就是说两⽤户看待同⼀个事物,有着相同或相似的喜爱程度。该算法使⽤K近邻技术实现,要求计算得到的相似⽤户的数⽬为个,这些⽤户按类似程度的⾼低进⾏排列[9]。
该算法实现⼤致分为四部分:⼀、要获取⽤户对系统设计主题项⽬的评分存储数据;⼆、进⾏相似度的计算,按相似度的⼤⼩排列顺序,选取个作为邻居;三、预计算⽤户的评分情况,这些被评分的项⽬⼀般指的是⽤户未接触过的事物,因为⽤户并不⼀定关注过其相似⽤户喜爱的东西;四、将第三步的计算结果进⾏数值⼤⼩排序,从结果项⽬⾥选取个,推荐给⽤户。例如,⽤户A对已观看过的⼀部电影持8分好评,⽤户B对这部电影持7分好评,则可以认为⼆者具有⼀定程度上的雷同。⽤户A可以从⽤户B的观影评分中,到⾃⼰喜欢观看的影⽚。
3.2 基于⽤户的协同过滤算法
本⽂是利⽤⼀些具有相同或相似爱好的体,为当前主体⽤户进⾏推荐。以项⽬作为特征的协同过滤算法,是由数据库中⽤户对之前项⽬所评分数预计可能青睐的项⽬,在⽤户数明显多于项⽬数的情况下,可以选择使⽤[3]。由于本次系统设计主要针对少量⽤户试运⾏,所以这⾥我们先考虑采⽤以⽤户属性为特征的算法,只要⽤户们对某些事物有相同或者类似的喜爱程度,则可以假设他们在其他项⽬上也有相似的兴趣。以电影推荐为主题进⾏设计,推荐计算模块需要调⽤该算法,该算法实现步骤图如下:
(1)⽣成⽤户-电影项⽬评分矩阵
表1 ⽤户电影评分矩阵
I1 I2 …… In
A1 i11 I12 (1)
A2 I21 I22 (2)
…… …… …… ……
A3 Im1 Im2 imn
A、、分别指代⽤户、电影和⽤户对电影的评分。个⽤户,部电影,有个评分值。依据这些评分数据得出⼀个评分矩阵。、和分别表⽰⽤户A1、A2和An对数据库内电影项⽬的评分,、和分别表⽰⼀部电影获得的所有评分。
(2)相似度计算
本⽂使⽤了修正的余弦相似度进⾏系统的算法计算。这⼀⽅法尽量避免了⽤户⾃⾝评价标准的差异性,例如,有⼈认为评价8分以上就是⾼的,有的则认为评价6分就是⾼的。此外,在设计电影评分环节时,添加了“评论内容”这⼀功能,规避了余弦相似度对评分不能及时作出
回应的问题[10]。该⽅法的计算公式如下:
其中,表⽰⽤户,表⽰和均已评分过的项⽬,、分别表⽰、评价得分的平均值。
评价最高的电影(3)寻最近邻居
系统内有很多个⽤户,要构建主体⽤户的最近邻居,需知道该⽤户和系统⽤户之间的相似度数值⼤⼩,计算公式如(1),将这些对电影评
系统内有很多个⽤户,要构建主体⽤户的最近邻居,需知道该⽤户和系统⽤户之间的相似度数值⼤⼩,计算公式如(1),将这些对电影评分数值放在⼀个集合中。再从该集合⾥选出数值相对较⾼的前个⽤户,作为最近邻居。
(4)预测评分及⽣成推荐结果
经过计算到主体⽤户的类似体后,该类似体观看的电影中存在主体⽤户未参与打分的影⽚。如果主体⽤户想要获得推荐,需要从类似体的观看影⽚⾥选取[11]。全部推荐给主体⽤户的⽅案不可取,因此需要从类似体观看的影⽚进⾏预计算数值排名,向⽤户推荐预测分
数靠前的电影项⽬。预测公式如下:
表⽰⽬标⽤户,表⽰系统⽤户,表⽰未被打分的电影,表⽰对电影的平均评分,邻居集合⽤表⽰,是邻居集合⾥的⼀个⽤户,引⽤和为了减少评分误差。
4 系统分析
4.1可⾏性分析
(1)技术可⾏性
本⽂所使⽤的开发语⾔、开发环境和数据库都采⽤普遍适⽤的技术⼿段,具有可⾏性。同时,在满⾜⽤户需求的基础,代码运⾏更有效率。Mysql对于使⽤者来说是开源的,开发者可免费使⽤,⽽且它能够存储⼤量的信息记录,⽅便系统数据统计与设计。总之,达到了电影推荐系统设计的技术需求。
。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。