Advertisement

python推荐系统-基于Python的推荐系统的设计与实现

阅读量:

本文介绍了一个基于Python语言实现的基于物品的协同过滤算法的电影推荐系统。该系统利用协同过滤算法,通过分析用户的历史评分记录,计算电影之间的相似度,并推荐用户感兴趣的电影。实验使用MovieLens 1M数据集,展示了系统的实现过程和效果。该推荐系统具有普适性,可应用于音乐推荐、图书推荐等场景,具有广阔的应用前景。

张玉叶

qkimagesjsjsjsjs201906jsjs20190617-1-l.jpg
qkimagesjsjsjsjs201906jsjs20190617-2-l.jpg
qkimagesjsjsjsjs201906jsjs20190617-3-l.jpg

摘要

关键词: 大数据; 推荐系统; 协同过滤; Python

中图分类号:TP391.1 文献标志码:A 文章编号:1006-8228(2019)06-59-04

The recommendation system in the era of big data empowers users to efficiently retrieve their potential needs from vast quantities of information, representing a prevalent application of big data in internet-based services. This paper introduces a recommendation system developed using an object-based collaborative filtering approach and implemented using the Python programming language. The paper details the system's foundational architecture, the step-by-step implementation process, and the corresponding code implementation.

Key words: 大数据; 推荐系统; 协同过滤; Python

0 引言

随着网络技术的迅速发展,网络信息量呈现快速增长趋势。为了以满足用户个性化需求为目标,多种推荐系统应运而生。这些系统通过深入分析用户的兴趣偏好,自动构建起用户与信息之间的关联网络,从而帮助用户在海量信息中精准定位自身潜在的需求。推荐系统的核心在于推荐算法,目前广泛采用的推荐算法主要包括基于专家知识的推荐、基于统计数据分析的推荐、基于内容特征的推荐以及协同过滤推荐等方法。Python语言作为一种开源、免费且跨平台的解释性高级动态编程语言,在其简洁易用的编程特性以及强大的功能支持下,已成为现代互联网应用系统开发的首选工具。本文采用Python语言开发了一个基于物品的协同过滤算法的推荐系统。

1 推荐系统

推荐系统是基于海量数据挖掘的支撑构建起来的,通过分析用户的使用数据来深入挖掘用户的兴趣和偏好,从而实现对用户感兴趣的信息、物品等的主动推荐。这种推荐机制的本质是建立用户与物品之间的关联关系。一个完整的推荐系统通常由三个核心模块组成:用户建模模块、推荐对象建模模块和推荐算法模块。在推荐系统中,首先会对用户进行建模,通过分析用户的使用数据和属性信息来识别用户的兴趣和需求。同时,也会对推荐对象进行建模。接着,基于用户特征和推荐对象特征,采用先进的推荐算法计算出用户可能感兴趣的推荐对象,然后根据具体的推荐场景对推荐结果进行必要的优化和调整,最终将优化后的推荐结果展示给用户。这种架构化的推荐系统设计如图1所示[1]。

2 协同过滤算法

协同过滤算法主要包含以用户为中心的和以物品为中心的两种类型[1]。

基于用户的协同过滤算法(简称UserCF)是以用户行为数据为基础,通过分析不同用户对物品的评分数据,计算用户间的相似度,进而基于计算出的用户相似度,进行个性化推荐。简单来说,就是根据用户的兴趣偏好,推荐那些与他互动过的用户也喜欢的物品。

基于物品的协同过滤算法(简称ItemCF),利用用户的评分数据测定物品间的相似性,基于物品间的相似度进行推荐。简单来说,就是给用户推荐那些与他之前喜欢的物品相似的物品。

UserCF和ItemCF算法在核心理念上具有相似性,它们的具体步骤也基本一致,唯一的区别在于前者基于用户间的相似度计算,而后者则基于物品间的相似度计算。

UserCF算法与ItemCF算法的主要区别在于,UserCF算法旨在为那些与目标用户具有相似兴趣爱好的其他用户推荐他们可能感兴趣的商品,而ItemCF算法则通过分析用户 previously喜欢的物品来推荐具有相似特征的其他物品。因此,UserCF算法的推荐策略更倾向于社会化的应用,适用于新闻推荐、微博话题讨论等场景;相比之下,ItemCF算法的推荐则更注重个性化,适用于电子商务、电影推荐、图书销售等个性化需求较高的领域。

3 推荐系统的设计与实现

3.1 推荐算法

本推荐系统以电影推荐系统为例,因此采用基于物品的协同过滤算法(简称ItemCF)。该算法旨在为目标用户推荐与其之前喜欢的物品相似的物品。值得注意的是,此算法不依赖于物品内容属性来计算物品间相似度,而是主要依据用户行为记录进行计算。该算法基于以下假设:物品I1和I2具有高度相似性,是因为喜欢I1的用户通常也会喜欢I2。ItemCF算法主要包含两个步骤。

step1:计算物品之间的相似度

在信息处理领域,计算相似度的算法种类繁多,其中一种常见的算法是泊松相关系数,另一种则是余弦相似度。在这一特定场景中,可以简便地通过构建同现矩阵[2,3]来计算相似度。

在本研究中,我们考虑了三个参与者u1、u2、u3和四个物品I1、I2、I3、I4,每个参与者对物品的偏好列表如图2(a)所示。

构建物品同现矩阵Mu,例如,用户u1喜欢物品I1和I3,则其物品同现矩阵中Mu1[I1][I3]和Mu1[I3][I1]的值为1,依次类推。基于用户的物品列表,可以得到每个用户的物品同现矩阵Mu,如图2所示。将所有用户的物品同现矩阵相加,得到最终的用户物品同现矩阵M。

基于物品的同现矩阵和用户的使用行为数据,从而得出推荐评分值,随后根据这些评分值生成推荐列表。推荐评分值等于物品同现矩阵与用户评分向量的乘积[4]。

3.2 数据准备

基于MovieLens(http://grouplens.org/datasets/movielens)作为本推荐系统中的实验数据。MovieLens属于GroupLens Research实验室,是一个非营利性质的研究项目,致力于收集涵盖20世纪90年代末至21世纪初的电影评分数据。该系统包含规模各异的数据集,每个数据集均包含电影信息数据及相应的电影评分记录。

本系统基于MovieLens 1M数据集进行开发。其中,电影评分数据文件名为ratings.csv。其数据格式如图3所示,每个条目由四个字段组成,分别对应用户ID、电影ID、评分值和评分时间戳。在本推荐系统中,我们仅提取前三个字段进行处理。

在数据集中,存储电影信息数据的文件名为“movies.csv”。其数据格式如图4所示,系统主要采用前两个字段:电影ID和电影名称(年份)。

基于该数据集,如何利用已知的用户评分记录来推断未知的用户评分?通过这些评分数据来推断用户是否会喜欢某部电影,从而决定是否推荐该电影给用户。采用Top-N推荐策略,为用户提供一个长度为N的推荐列表。

3.3 数据处理

在处理数据流程中,首先需要将所需的数据导入并执行预处理步骤。具体来说,需要提取评分数据中的前三项(用户ID、电影ID、评分)以及电影信息文件中的前两项(电影ID和电影名称),按顺序提取并存储于字典中。评分数据将用于计算电影相似度,而电影信息则将用于展示推荐结果。具体实现的Python代码[4-6]如下:

3.4 建立同现矩阵

在本实现中,我们采用同现矩阵这一稀疏矩阵结构。具体而言,我们利用Python内置的序列字典来存储相关数据,从而显著提升了算法的空间和时间效率。其实现代码如下:

3.5 计算推荐评分及推荐结果

在同现矩阵计算完成之后,通过同现矩阵与用户评分的数据,计算用户对未观看过的相似电影的推荐评分,这即代表用户的兴趣度。随后,根据推荐评分的高低来对用户进行电影推荐。其实现代码如下:

3.6 输出推荐结果

根据需要来输出某个用户的Top-N推荐结果,其代码如下:

执行主函数main并传递参数"ratings.csv"、"movies.csv"、"2"和"10",为用户2推荐10部未看过的新电影,并显示在图5中。

4 结束语

推荐系统能够快速帮助用户从海量信息中高效地获取自己潜在的需求,是大数据技术在互联网行业的代表性应用之一。通过研究用户的使用记录,以了解用户的兴趣偏好,进而根据用户的喜好进行推荐。本文开发的基于物品的协同过滤模型用于电影推荐,该系统具有广泛的适用性。在现有系统基础上稍作调整,即可应用于音乐推荐、图书推荐、商品推荐等多种场景,具有广阔的应用前景。

参考文献(References):

[1] [美]查鲁.C.阿加沃尔.推荐系统:原理与实践[M].机械工业出版社,2018.

[2] 项亮.推荐系统实践[M].人民邮电出版社,2012.

[3] 林子雨.大数据技术原理与应用[M].人民邮电出版社,2017.

[4] 王建芳.机器学习算法实践[M].清华大学出版社,2018.

[5] 黑马程序员.Python实战编程[M].中国铁道出版社,2018.

[6] 董付国.Python程序设计开发宝典[M].清华大学出版社,2017.

全部评论 (0)

还没有任何评论哟~