基于图数据库的电影推荐系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于图数据库的电影推荐系统设计

作者:字凤芹牛进毕柱兰沈加敏

来源:《软件导刊》2016年第01期

摘要摘要:随着互联网的快速发展,信息过载现象越来越严重,当通过搜索引擎输入的内容关键词较模糊时,很难找到真正需要的信息。为了解决信息过载导致难以查询的问题,将图数据库应用于电影推荐系统,采用图数据库进行存储,通过余弦相似度和KNN算法找到适合的电影。

关键词关键词:图数据库;电影推荐;余弦相似度;KNN算法

DOIDOI:10.11907/rjdk.1511121

中图分类号:TP392

文献标识码:A文章编号文章编号:16727800(2016)001014403

0引言

在淘宝购物时,当点击一件商品后,会在网页上出现很多同类商品的图片,还会附加“看过该件商品的人还看过些什么”,这是一种很有效的营销方式。这样的推荐方式也可以用到其它地方,比如美国超市里奶粉和啤酒的搭配,看似毫无关系的两件商品能被有效搭配,究其原因就是相似度。因为在美国,买奶粉的基本是奶爸,美国男性喜欢喝啤酒,这种相似度使得这两种搭配给商家带来了商机。当需要将某些数据与另一些数据建立关系时,首先需要存储这些数据,然后建立数据关系,在关系数据库中,用外键将不同的表格联系到一起,当关系较多时,数据库会越来越大、越来越复杂,当对某个关系进行操作时,就会出现很多问题,所以不能完全依赖于关系型数据库,可以把目标转向NoSQL。

1NoSQL

在信息技术高速发展的今天,数据被赋予了更大的价值。面对庞大的数据,首先考虑的是如何存储,其次才是如何挖掘、如何分析,最后得到需求价值。对于数据存储,选择一个好用的数据库是关键。传统的关系型数据库伸缩性不强,不能有效处理阻抗失谐带来的问题。NoSQL的出现并没有取代传统的关系型数据库,只是采用了一种非关系型的方式来解决数据的存储和计算问题。[1]

NoSQL是一项全新的数据库革命性运动,其核心是运用非关系型的数据存储。需要注意的是NoSQL不是NO SQL,而是Not Only SQL,意思是“不仅仅是SQL”。两者显著的不同点

是NoSQL不使用SQL作为查询语言。目前,NoSQL数据库有很多,如Cassandra、MongooDB、Neo4J和Riak等。

2图数据库

作为一种通用的数据结构,图可以用来表示数据对象之间的各种复杂关系[2]。图数据库用图来存储数据,是最接近高性能的一种用于存储数据的数据结构方式之一[3] 。

图数据库可存放实体及实体间的关系,实体用节点来表示,实体间的关系用边来表示,众多的节点和众多的边可连接成图。常见的图数据库有Neo4J、Infinite Graph、OrientDB、FlockDB等,比较常用的图数据库是Neo4J。

2.1Neo4J

Neo4J是一个可扩展的和高性能的数据库,适用于企业部署,具有以下特性:

(1)真正的ACID事务,Neo4J在修改节点或向现有节点新增关系前,需要先启动事务。

(2)高可用性。

(3)可以扩展到数十亿的节点和关系。

(4)通过遍历高速查询,可以从指定的起始节点开始,以任意的深度来遍历图。

(5)使用声明查询语言,使用Cypher查询语言来查询图,还可以按照节点属性值查询图、遍历图或通过“语言绑定”浏览节点关系[4]。

2.2余弦相似度(Cosine Similarity)算法

在使用图数据库设计电影推荐系统时,首先应了解两种算法,余弦相似度(Cosine Similarity)算法和KNN(k-Nearest Neighbors)算法。余弦相似度又叫余弦距离,使用向量空间中两个向量夹角的余弦值来衡量两个个体之间的差异大小。如果两个向量方向一致,即夹角接近零,表示这两个个体非常相似;夹角越大,表示这两个个体之间差异越大。

余弦相似度计算如公式(1)所示:

sim(X,Y)=c osθ=b2+c2-a22bc=·(1)

等价于公式(2):

cosθ=A·BAB=∑ni=1Ai×Bi∑ni=1(Ai)2×∑ni=1(Bi)2(2)

通过余弦相似度计算,可得出一个[-1,1]的值,当值为-1时,A和B为负的完全相似;当值为1时,A与B完全相似;当余弦值为0,则表示A与B基本没有相似点。

2.3KNN(kNearest Neighbors)算法

KNN (k-Nearest Neighbors)算法,也称最近邻居算法,是机器学习中的经典算法。K表示最接近个体的K个数据样本。KNN算法和K-Means算法不同,K-Means算法用来聚类,判断哪些是比较相近的类型,而KNN算法是用来归类,将一个样本空间中的样本分成几个类型,然后给定一个待分类的数据,通过计算离个体最近的K个样本来判断这个待分类的数据属于哪类。可简单理解为由那些离个体最近的K个点投票来决定待分类数据归为哪一类。KNN分类算法的主要思想是:先计算待分类样本与已知类别训练样本之间的距离,从中找出距离最近的K个邻居,再根据这K个邻居样本所属的类别来判断待分类样本数据的类别,K 个样本中的大多数属于某一个类别,则该样本也属于此类别[5]。

Wikipedia上的KNN词条经典图,如图1所示。

3基于图数据库的电影推荐系统设计

由于图数据库存储、处理数据的方式与数据结构中的图结构非常相似,不同实体可以用不同的节点表示,节点可以有类别信息,节点之间的关系直接用有向边或无向边表示,这样一组复杂的数据就可以用简洁直观的图结构来存储和表示,有利于理解和分析数据。

在电影推荐系统中,面临着多种实体以及复杂的实体间关系,如用户、电影、导演、演员、电影类别等信息;实体间关系有用户对电影的评分,电影与导演及演员的协作等关系,相比其它数据结构和关系来说更为复杂,所以本文使用图数据库来存储和处理数据。

本文中的数据主要来自MovieLens的数据集,这是一个在推荐系统领域相对权威的数据集,但由于数据量较大,下文中将使用一个从MovieLens中精简出来的数据集来阐述使用Neo4J以及一些经典算法组成的推荐系统算法。

算法过程如下:

(1)根据用户电影评分记录,使用余弦相似度算法计算相关用户(即看过相同电影的用户)的相似度。

(2)根据用户之间的相似度,使用KNN算法计算待推荐用户的k个最相近用户,并且将这些用户看过但自己没看过的电影作为待推荐电影。

相关文档
最新文档