基于协同过滤的电影推荐系统的设计与实现
2019-05-22张玉叶
张玉叶
摘要:随着在线电影数量的飞速增长,要想从众多的电影中选择一部自己想看的电影变得越来越困难。为了更好地满足用户的观影需求,电影推荐系统应运而生,它通过用户的观影记录来发现用户的兴趣,从而帮助用户在众多电影中筛选到自己感兴趣的电影。基于物品的协同过滤算法是电影推荐系统中最常用的推荐算法,该算法的关键是计算物品的相似度及推荐评分,相似度矩阵是一稀疏矩阵,已有的一些电影推荐系统中通常采用二维数组来存放相似度矩阵,利用第三方扩展库Numpy来计算推荐评分,时间空间效率相对较低,该文利用Python内置的序列字典来存放稀疏矩阵,自行编写相应的代码来求解相似度和推荐评分,可有效提高算法的时间、空间效率。
关键词:推荐系统;协同过滤;Python;稀疏矩阵
中图分类号:TP391.1 文献标识码:A 文章编号:1009-3044(2019)06-0070-04
Design and Implementation of Movie Recommendation System Based on Collaborative Filtering
ZHANG Yu-ye
(Dept. of computer, Jinan Vocational College, Jinan 250014, China)
Abstract: With the rapid increase in the number of online movies, it is increasingly difficult to choose from among the many movies you want to watch. In order to better meet the user's viewing needs, the film recommendation system came into being. It discovered the user's interest through the user's viewing video record, thus helping users to select movies of interest in many movies. The object-based collaborative filtering algorithm is the most commonly used recommendation algorithm in the movie recommendation system. The key of the algorithm is to calculate the similarity of the item and the recommended score. The similarity matrix is a sparse matrix. Some existing movie recommendation systems usually use two-dimensional arrays to store similarity matrices, use third-party extension library Numpy to calculate the recommended score, which leads to the low efficiency of time and space. This article uses Python's built-in sequence dictionary to store sparse matrices and gives the corresponding code to solve the recommended score, which improves the algorithm efficiency of time and space.
Key words: recommender system; collaborative filtering; Python; sparse matrix
1 背景
隨着在线电影数量的飞速增长,要想从众多的电影中选择一部自己想看的电影变得越来越困难。当用户有明确观影需求时可利用搜索引擎来查找自己想看的电影,但当用户没有明确需求时,就很难利用搜索引擎来查找自己想看的电影,此时电影推荐系统应运而生,它通过用户的观影记录来发现用户的兴趣,从而帮助用户在众多电影中筛选到自己感兴趣的电影。基于物品的协同过滤算法是电影推荐系统中最常用的推荐算法,该算法的关键是计算电影的相似度及推荐评分,在计算时需要用到矩阵的一些运算,Python的第三方扩展库Numpy提供了大量的数组及矩阵运算,因此已有的一些电影推荐系统中多是利用Numpy来实现协同过滤算法,但因协同过滤算法中涉及到的矩阵多是稀疏矩阵,采用普通的二维数组存放存在大量的无效存储,空间利用率较低,同时利用Numpy扩展库也无法进行算法的优化,因此本文利用Python的内置序列字典来存放稀疏矩阵,自行编制相应的代码来求解相似度及推荐评分,可有效提高算法的时间空间效率。
2 推荐系统
推荐系统是建立在海量数据挖掘基础上的,它通过分析用户的历史数据来了解用户的需求和兴趣,从而将用户感兴趣的信息、物品等主动推荐给用户,其本质是建立用户与物品之间的联系。一个完整的推荐系统通常包含3个模块:用户建模模块、推荐对象建模模块和推荐算法模块。推荐系统首先对用户进行建模,根据用户行为数据和属性数据来分析用户的兴趣和需求,同时也对推荐对象进行建模。接着,基于用户特征和物品对象特征,采用推荐算法计算得到用户可能感兴趣的物品,然后根据推荐场景对推荐结果进行一定的推荐和调整,最终将推荐结果展示给用户[1]。
3 协同过滤算法
协同过滤算法分为基于用户的协同过滤算法和基于物品的协同过滤算法[2]。
基于用户的协同过滤算法(简称UserCF),通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于物品的协同过滤算法(简称ItemCF),通过用户对不同物品的评分来评测物品之间的相似性,基于物品之间的相似性做出推荐。简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。
UserCF算法和ItemCF算法思想类似,其实现过程也基本类似,唯一不同的是一个是计算用户相似度,一个是计算物品相似度。
UserCF算法和ItemCF最主要的区别在于:UserCF推荐的是那些和目标用户有共同兴趣爱好的其他用户所喜欢的物品,ItemCF算法则推荐那些和目标用户之前喜欢的物品类似的其他物品。因此,UserCF算法的推荐更偏向社会化,适合应用于新闻推荐、微博话题推荐等应用场景;而ItemCF算法的推荐则是更偏向于个性化,适合应用于电子商务、电影、图书等应用场景。
4 电影推荐系统的设计与实现
4.1 推荐算法
根据前面对协同过滤算法的分析,电影推荐系统适合采用基于物品的协同过滤算法(简称ItemCF)。基于物品的协同过滤算法是给目标用户推荐那些和他们之前喜欢的物品相似的物品。此算法并不利用物品的内容属性计算物品之间的相似度,而主要通过分析用户的行为记录来计算物品之间的相似度。ItemCF算法主要包括两步:
4.5计算推荐评分及推荐结果
计算每个用户的未曾看过的电影的推荐评分(也即兴趣度)。推荐评分=同现矩阵M*评分向量R。
评分向量即用户对所有物品(电影)的评分,由评分记录表可得出。
4.6 输出推荐结果
推荐结果的输出可根据需要自由构造,既可以只生成某一指定用户的推荐列表,也可生成所有用户的推荐列表,如要生成对所有用户推荐1部未曾看过的电影,其对应的代码为:
5 测试分析
前面给出的测试数据集数据很少,主要应用于系统开发测试中。实际应用中推荐系统所用的数据集通常为海量数据,为验证系统在海量数据中的使用,可以MovieLens(http://grouplens.org/datasets/movielens)作为电影推荐系统中的实验数据来测试系统。MovieLens是GroupLens Research实验室的一个非商业性质、以研究为目的的实验性项目,采集了一组从20世纪90年代末到21世纪初的电影评分数据,包含大小不同的数据集,每个数据集中包括电影信息数据及电影评分记录等。如MovieLens 1M数据集中存放了1000多名用户对近2000部电影的评分记录,每个用户至少对20部电影进行过评分,一共有100000多条电影评分记录,能够模拟出海量数据的推荐。如采用MovieLens 1M数据集来使用本系统来为用户1推荐5部想看的电影,其推荐结果如图7所示。
6 结束语
电影推荐系统可帮助用户从海量电影中获取自己想看电影,是大数据在互联网领域的典型应用,通过分析用户的历史观影记录来了解用户的喜好,从而主动为用户推荐其感兴趣的电影,满足了用户的个性化观影需求。该文利用Python语言实现的基于物品的协同过滤算法的电影推荐系统,利用了Python内置的序列字典来存放稀疏矩阵,自行编写相应的代码实现矩阵运算及求解推荐评分,相比于利用Numpy第三方扩展库,其算法时间空间效率相对较高。
参考文献:
[1] 查鲁 C 阿加沃尔. 推荐系统:原理与实践[M]. 北京: 机械工业出版社, 2017.
[2] 项亮. 推荐系统实践[M]. 北京: 人民邮电出版社, 2012.
[3] 王建芳. 机器学习算法实践[M]. 北京: 清华大学出版社, 2018.
[4] 董付国. Python程序设计开发宝典[M]. 北京: 清华大学出版社, 2017.
[5] 林子雨. 大数据技术原理与应用[M]. 北京: 人民邮电出版社, 2017.
【通联编辑:謝媛媛】