一种推荐系统大数据处理方法与流程

文档序号:11864883阅读:269来源:国知局
本发明涉及推荐系统
技术领域
:,具体的说,涉及一种推荐系统大数据处理方法。
背景技术
::推荐系统,也就是指个性化推荐,其根本实质就是根据用户的兴趣特点与历史行为记录,向用户推荐推荐用户感兴趣的商品或者项目信息。随着互联网的规模不断扩大,移动互联网的无所不在,用户体现在互联网中的信息也呈多样化发展,从基本的人口学信息到动态变化的地理位置信息,从简单的内容浏览者到成为内容的提供者。现实中的个人也将在互联网中成为真实的“虚拟人”。如何将用户大量的非结构化异构信息进行有效的分析并得出可靠满意的结果并且解决信息超载问题,从而诞生了个性化推荐系统。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,核心是通过用户的大量信息建立起用户与项目之间的联系,从而达到一种信息发现的目的。推荐系统本质更多是指一种服务,是帮助用户从海量数据中解放出来,提供适合让用户更好决策的推荐服务,并且这种服务将会渗透到整个互联网世界以至未来人们生活的方方面面,比如新闻,旅行,饮食等。推荐系统是云计算本质即提供弹性服务的一个子集。推荐系统的实现必须依靠大数据处理支撑,而不再是一种传统的算法实现,将收集到的数据通过一个可扩展平台进行处理并得到一个可靠的模型,便是大数据处理在推荐系统中的根本所在。目前,开发推荐系统大数据处理的平台有较多选择,但是都需要比较复杂的编程技巧与体系架构,对开发人员要求高,需要开发者控制大量的设计细节,难度大,并且计算效率较低。技术实现要素:本发明的目的在于提供一种推荐系统大数据处理方法,以解决的传统的推荐系统大数据处理方法开发难度大,效率较低的技术问题。本发明提供一种推荐系统大数据处理方法,该方法包括:获取用户偏好效用矩阵和项目数据;基于所述效用矩阵进行分布式数据处理获得效用矩阵内用户评价的项目列表和每个项目对应的评价用户及其评分值列表,基于所述项目数据进行分布式数据处理获得每个项目的相似项目列表;基于每个项目对应的评价用户及其评分值列表和每个项目的相似项目列表进行分布式数据处理获得用户的推荐项目及其预测权重列表;基于用户评价的项目列表和用户的推荐项目及其预测权重列表进行分布式数据处理获得用户的项目推荐结果。本发明提供的推荐系统大数据处理方法,还包括:基于效用矩阵内用户评价的项目列表进行分布式数据处理获得用户的相似用户列表;基于用户的相似用户列表与项目数据进行分布式数据处理获得用户的项目推荐结果。本发明提供的推荐系统大数据处理方法,还包括:获取用户数据并进行分布式聚类处理获得聚类结果;基于所述聚类结果、所述用户评价的项目列表和项目数据进行分布式数据处理获得每个聚类的物化特征;基于每个聚类的物化特征数据根据新用户的聚类选择获得新用户的物化特征;基于新用户的物化特征对项目索引进行分布式检索获得新用户的项目推荐结果。本发明提供的推荐系统大数据处理方法,还包括:获取包含有项目ID、对该项目评分的用户ID以及评分值信息的训练数据集与包含有用户ID和该用户要预测的项目ID信息的测试数据集;根据训练数据集进行分布式数据处理统计其中的项目对及其差值和产生差值的用户列表;基于训练数据集中的项目对及其差值和产生差值的用户列表进行分布式数据处理统计训练数据集中有差值关系的项目对、总用户数量、评分和以及平均差值;根据训练数据集和测试数据集进行分布式数据处理获得用户已经评分过的项目及其评分以及要预测的项目;基于训练数据集中有差值关系的项目对、总用户数量、评分、平均差值、用户已经评分过的项目及其评分和要预测的项目进行分布式数据处理获得SlopeOne预测计算所需的值;基于SlopeOne预测计算所需的值进行分布式数据处理计算用户需要预测的项目的预测值。在基于效用矩阵和项目数据进行分布式数据处理的步骤中包括:基于所述效用矩阵通过第一映射-归约模块获得键值对为用户:用户评价的项目列表的第一输出数据;基于所述效用矩阵通过第二映射-归约模块获得键值对为项目:项目对应的评价用户及其评分值列表的第二输出数据;基于所述项目数据通过第三映射-归约模块获得键值对为项目:项目的相似项目列表的第三输出数据;在获得用户的推荐项目及其预测权重列表的步骤中包括:基于所述第二和第三输出数据通过第四映射-归约模块获得键值对为用户:用户的推荐项目及其预测权重列表的第四输出数据;在获得用户的项目推荐结果的步骤中包括:基于所述第一和第四输出数据通过第四映射-归约模块获得键值对为用户:用户的项目推荐结果列表的输出结果。在获取用户的相似用户列表的步骤中包括:基于所述用户评价的项目列表通过第六映射-归约模块获得键值对为用户:用户的相似用户列表的第五输出数据;在基于用户的相似用户列表与项目数据进行分布式数据处理的步骤中包括:基于所述第五输出数据与所述项目数据通过第七映射-归约模块获得键值对为用户:用户的项目推荐结果列表的输出结果。在获得每个聚类的物化特征的步骤中包括:基于所述用户评价的项目列表和聚类结果数据通过第八映射-归约模块获得键值对为输出键值对为聚类:聚类对应的项目列表的第六输出数据;基于第六输出数据和项目数据通过第九映射-归约模块获得键值对为聚类:聚类的物化特征列表的第七输出数据;在获得新用户的项目推荐结果的步骤中包括:基于新用户的物化特征通过第十映射-归约模块对项目索引进行检索获得键值对为用户:用户的项目推荐结果列表的输出结果。在所述根据训练数据集进行分布式数据处理的步骤中包括:根据训练数据集数据通过第一映射模块和混洗模块获得键值对为用户:用户评分项目以及相应的评分值列表的输出数据;基于所述键值对为用户:用户评分项目以及相应的评分值列表的输出数据通过第一归约模块获得键值对为项目对:其差值及产生该差值的用户的输出数据。在统计训练数据集中有差值关系的项目对、总用户数量、评分和以及平均差值的步骤中包括:基于键值对为项目对:其差值及产生该差值的用户的输出数据通过合并模块生成键值对为项目对:其差值及产生该差值的用户的统计个数列表的输出数据;基于键值对为项目对:其差值及产生该差值的用户的统计个数列表的输出数据通过第二归约模块获得键值对为项目:已计算标示、有差值关系的项目对、总用户数量、评分和以及平均差值的输出数据。在根据训练数据集和测试数据集进行分布式数据处理的步骤中包括:对训练数据集与测试数据集通过第三映射模块进行连接处理获得键值对为用户:该用户的连接记录列表的输出数据;基于所述键值对为用户:该用户的连接记录列表的输出数据通过第三归约模块获得键值对为用户:预测需求标识、用户已经评分过的项目及其评分以及要预测的项目。本发明实施例提供的推荐系统大数据处理方法通过Hadoop平台实现基于内容推荐的大数据处理设计方案、基于项目协同推荐的大数据处理设计方案、冷启动优化方案大数据处理设计以及SlopeOne算法的大数据处理设计方案,通过并行执行机制,大大提高大数据处理的计算效率。且本发明提供的SlopeOne算法的大数据处理设计方案可实现并行化后的增量计算,并解决中间计算过程中可能会出现的内存不足的问题,同时利用合并模块Combiner实现对于算法的进一步优化,进一步的提高计算效率和可靠性。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分的从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明为了更清楚的说明本发明实施例中的技术方案,下面将对实施例描述中所需要的附图做简单的介绍:图1是本发明实施例提供的推荐系统大数据处理方法的流程示意图;图2是本发明实施例提供的内容推荐大数据处理方案应用流程示意图;图3是本发明实施例提供的项目协同推荐大数据处理方案流程示意图;图4是本发明实施例提供的项目协同推荐大数据处理方案应用流程示意图;图5是本发明实施例提供的优化方案大数据处理方案流程示意图;图6是本发明实施例提供的优化方案大数据处理方案应用流程示意图;图7是本发明实施例提供的SlopeOne算法处理方案的流程示意图;图8是本发明实施例提供的SlopeOne算法处理方案的应用流程示意图。具体实施方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。本发明实施例提供一种推荐系统大数据处理方法,该方法基于大数据处理平台Hadoop实现,其中包括基于内容推荐的大数据处理设计方案、基于项目协同推荐的大数据处理设计方案、冷启动优化方案大数据处理设计以及SlopeOne算法的大数据处理设计方案。如图1个图2所示,本发明实施例提供的推荐系统大数据处理方法中基于内容推荐的大数据处理设计方案包括:步骤101至步骤103。其中,在步骤101中,获取用户偏好效用矩阵和项目数据。在推荐系统中,一般存在两类元素,第一类即用户,第二类即项目。用户会对某些项目有偏好信息,而这些用户的偏好信息从数据中梳理出来后被表示成效用矩阵的形式,在数据处理时只针对效用矩阵就可以了。一般效用矩阵的表示形式例如下表1:表1效用矩阵效用矩阵中每个数值表示的是用户对项目的喜好程度,空白表示用户对项目的喜好还不确定,这便是推荐系统所要达到的推荐目标。在步骤102中,基于效用矩阵进行分布式数据处理获得效用矩阵内用户评价的项目列表和每个项目对应的评价用户及其评分值列表,基于项目数据进行分布式数据处理获得每个项目的相似项目列表。更为具体的,在步骤102中,基于效用矩阵通过第一映射-归约模块获得键值对为用户:用户评价的项目列表的第一输出数据。映射-归约(Map-Reduce)处理架构主要用于大规模数据集的并行运算。其架构的主要思想来自于分治算法以及函数式编程,模型的核心方法是“映射”以及“归约”,即Map方法和Reduce方法,其过程具体为在开发过程指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,然后指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个都共享相同的键组,从而得到处理结果。具体来说,Map过程主要负责将数据进行切割然后收集各个输入的记录形成键值对key-value的形式,经过混洗与排序后输出到Reduce过程,由Reduce进行归约处理。整个Map-Reduce框架将大数据进行分割输送到不同机器处理。本步骤中将效用矩阵作为第一映射-归约模块的输入,在第一映射-归约模块进行相应的Map-Reduce处理后输出结果为<User:{Item1,Item2,Itemn,……}>,其中键Key为用户User,值为此用户所评价的项目Item列表,即获得效用矩阵中每个用户所评价了的项目信息。与上述过程并行的,基于效用矩阵通过第二映射-归约模块获得键值对为项目:项目对应的评价用户及其评分值列表的第二输出数据。将效用矩阵作为第二映射-归约模块的输入,在第二映射-归约模块进行相应的Map-Reduce处理后输出结果为<Item:{User1,User2……}>,其中键Key为项目Item,值为项目对应的评分用户User及其评分值列表。即获得效用矩阵中每个项目都有哪些用户进行了评分以及具体评分值信息。与上述过程并行的,基于项目数据通过第三映射-归约模块获得键值对为项目:项目的相似项目列表的第三输出数据。第三映射-归约模块有两个项目数据输入接口,第一个是标准的Map的输入,第二个是在Map计算时第三映射-归约模块同时读入的数据,第三映射-归约模块基于标准的Map的输入的项目对Map计算时读入的整个项目数据进行扫描,通过项目之间的特征关系计算N个最相似的项目,进而输出结果:键Key为项目,值为该项目的相似项目列表,<Item1:{Item2,Item3,……}>。即获得效用矩阵中与Key项目最相似的那些项目信息。在步骤103中,基于每个项目对应的评价用户及其评分值列表和每个项目的相似项目列表进行分布式数据处理获得用户的推荐项目及其预测权重列表。具体处理过程为:首先,基于第二和第三输出数据通过第四映射-归约模块获得键值对为用户:用户的推荐项目和预测权重列表的第四输出数据。将第二映射-归约模块的输出<Item:{User1,User2……}>和第三映射-归约模块的输出<Item1:{Item2,Item3,……}>作为第四映射-归约模块的输入,第四映射-归约模块进行数据结合Join操作从而要进一步得到每个用户的推荐项目列表:<User:{predictItem,……}>,其中,键Key为用户User,值为用户的推荐项目predictItem和对应预测权重列表。然后,在步骤104中,基于用户评价的项目列表和用户的推荐项目及其预测权重列表进行分布式数据处理获得用户的项目推荐结果。基于第一和第四输出数据通过第五映射-归约模块获得键值对为用户:用户的项目推荐结果的输出结果。将第一映射-归约模块输出的第一输出数据<User:{Item1,Item2,Itemn,……}>与第一映射-归约模块输出的第四输出数据<User:{predictItem,……}>作为第五映射-归约模块的输入,第五映射-归约模块进行数据结合Join操作去除重复的项目得到最终的推荐结果,即将第四输出数据中某用户已经评价过的项目去除,进而获得最终该用户对于未评价项目的评价。如图3和图4所示,本发明实施例提供的推荐系统大数据处理方法中还包括:基于项目协同推荐的大数据处理设计方案,该方案包括步骤201至204。步骤201与步骤202与上述基于内容推荐的大数据处理设计方案的实施方法相同。将效用矩阵作为第一映射-归约模块的输入,在第一映射-归约模块进行相应的Map-Reduce处理后输出结果为<User:{Item1,Item2,Itemn,……}>,其中键Key为用户User,值为此用户所评价的项目Item列表,即获得效用矩阵中每个用户所评价了的项目信息。在步骤203中,首先基于效用矩阵内用户评价的项目列表进行分布式数据处理获得用户的相似用户列表。即基于用户评价的项目列表通过第六映射-归约模块获得键值对为用户:用户的相似用户列表的第五输出数据。第六映射-归约模块有两个数据输入接口,第一个是标准的Map的输入,第二个是在Map计算时第六映射-归约模块同时读入的数据,第六映射-归约模块基于标准的Map的输入的第一输出数据中的用户行为信息对Map计算时读入的第一输出数据中的所有用户行为信息进行扫描,通过用户行为的特征关系计算N个行为最相似的用户,进而输出结果:<User:{sUser……}>,其中键Key为用户User,值为与此用户的相似用户sUser的列表。最后,在步骤204中,基于用户的相似用户列表与项目数据进行分布式数据处理获得用户的项目推荐结果。基于第五输出数据与项目数据通过第七映射-归约模块获得键值对为用户:用户的项目推荐结果列表的输出结果。将第五输出数据作为第七映射-归约模块的输入,第七映射-归约模块对第五输出数据进行并行化处理,检索Hbase数据库中的项目数据,进而得到最终的用户的推荐结果<User:{rItem……}>,键Key为用户User,值为此用户的项目推荐结果rItem列表。如图5和图6所示,本发明实施例提供的推荐系统大数据处理方法中还包括:SlopeOne算法的大数据处理设计方案,该设计方案包括步骤401至404。在步骤301中,获取用户数据并进行分布式聚类处理获得聚类结果。本步骤中,可以采用开源的基于Hadoop机器学习库Mahout对用户数据进行分布式聚类处理得到的聚类结果。在步骤302中,基于聚类结果、用户评价的项目列表和项目数据进行分布式数据处理获得每个聚类的物化特征。其中用户评价的项目列表的获取方式与上述基于内容推荐的大数据处理设计方案和基于项目协同推荐的大数据处理设计方案中的获取方式相同。通过第一映射-归约进行处理得到输出结果为<User:{Item1,Item2,Itemn,……}>,其中键Key为用户User,值为此用户所评价的项目Item列表。然后,基于用户评价的项目列表和聚类结果数据通过第八映射-归约模块获得键值对为输出键值对为聚类:聚类对应的项目列表的第六输出数据。即通过第八映射-归约模块进行Join操作得到输出{<Cluster:<Item……>},其中键Key为聚类Cluster,值为该聚类所包含的的项目Item列表,表明每个集群有哪些项目列表。进而,基于得到的第六输出数据和项目数据通过第九映射-归约模块获得键值对为聚类:聚类的物化特征列表的第七输出数据。进行完Map-Reduce得到的第七输出数据{<Cluster:<feature……>},其中键Key为聚类Cluster,值为该聚的物化特征列表。在步骤303中,基于每个聚类的物化特征数据根据新用户的聚类选择获得新用户的物化特征。当新用户进入系统选择聚类中心后,参考步骤302中得到的每个聚类的物化特征获得新用户的物化特征。在步骤304中,基于新用户的物化特征对项目索引进行分布式检索获得新用户的项目推荐结果。基于新用户的物化特征通过第十映射-归约模块对在HDFS上项目索引进行分布式检索获得键值对为用户:用户的项目推荐结果列表的输出结果。如图7和图8所示,本发明实施例提供的推荐系统大数据处理方法中还包括:SlopeOne算法的大数据处理设计方案。目前SlopeOne算法只是通过在单机实现,因此本发明提出一种有效的SlopeOne并行计算方案,结合SlopeOne的简洁性和高效性,实现推荐系统大数据处理。本方案中将SlopeOne算法各个部分分解成Map-Reduce过程,让各个Map-Reduce负责SlopeOne并行计算过程,并且多个Map-Reduce存在串行的依赖关系,即后一个Map-Reduce需要多个前Map-Reduce的输出作为输入。Hadoop提供了专有编程接口JobControl与ControledJob进行相关Map-Reduce的依赖控制,最终形成串行结构,实现整个SlopeOne的算法。具体的,该方案包括步骤401至404。在步骤401中,获取包含有项目ID、对该项目评分的用户ID以及评分值信息的训练数据集与包含有用户ID和该用户要预测的项目ID信息的测试数据集。本发明中将并行SlopeOne的输入数据分为训练数据集与测试数据集,我们约定并行算法的训练数据集与测试数据集的格式如下,且都是文本类型:对于训练数据集:<项目ID用户ID用户对项目的评分时间>数据格式如:113881250949223891717742对于测试数据集:<用户ID要预测的项目ID>数据格式如:1112本发明中训练数据集采用Nexflix进行计算获取,测试数据集通过推荐系统获取,本发明中允许测试数据集出现训练数据集中已经存在的评分的<项目ID用户ID>对,这些重复的数据算法进行时会剔除,所以不会对结果产生影响。在获取训练数据集与测试数据集后,本方案设计为5个Map-Reduce的级联方案。首先读入训练数据集,统计出用户评分信息,同时因为SlopeOne需要同时利用训练数据集与测试数据集进行计算,所以需要在用训练集统计用户评分信息时,同步进行训练数据集与测试数据集进行连接操作。在统计出用户评分信息后,接下来统计各个项目之间的差值,以及个数,这一步将产生大量的中间数据,在完成后,对这些差值与连接操作的数据集进行装饰和Join操作,最后再采用SlopeOne的计算公式得出最终测试集中要计算的预测评分值。在步骤402中,根据训练数据集进行分布式数据处理统计其中的项目差值对及其差值和产生差值的用户列表。对于用户评分数据,即训练数据,我们首先全部读入到一个Map-Reduce中,通过第一映射Map模块输出用户的记录<User:Item>,即键值对为用户:用户评分项目以及相应的评分值,User与Item是两个自定义的Hadoop键值类型,其中键User保存的是用户的ID,值Item则保存着用户评分项目的ID以及相应的评分值。Map输出结果后,由混洗Shuffle过程将某个用户所有的评过分的项目进行收集,并将用户按ID自然顺序排序输入到第一归约reduce模块中。Reduce的输入格式为<User:List{Item,Item……}>,reduce输出为<KeyPair:KeyPairValue>,即键值对为项目差值对:差值Rating和产生差值的用户User列表,KeyPair记录的为项目差值对ID,KeyPairValue则是项目对之间的差值(包括产生差值的用户),为了减少中间数据,我们只计算矩阵的上三角,下三角直接忽略(在正常计算时把上三角直接取反就可以了)。这一步中因为存在List{Item,Item……}转为KeyPair的计算过程,而Hadoop中Reduce迭代并不支持重复使用,所以对于如果超过内存存储的<User:List{Item,Item……}>相关记录集,本发明提出如下解决办法:判断储存对象的大小,给定一个阀值(如0.9),如果储存对象超过此值则会将相关记录集写入本地硬盘,然后再迭代处理,这样会造成一定的性能损失,但不会导致任务失败。在步骤403中,基于训练数据集中的项目对及其差值和产生差值的用户列表进行分布式数据处理统计训练数据集中有差值关系的项目对、总用户数量、评分和以及平均差值的输出数据。本步骤基础是步骤402,本步骤的主要目的是计算训练集中所有的项目对的平均差值。步骤402中Reduce输出是的项目对,但其中有一个特点是此项目对是如下样子的:<Item1-Item2:{<User1,Rating>}>即项目差值对:其差值及产生该差值的用户。本步骤中将其生成为:<Item1-Item2:{<averageDiffRating>}>即项目差值对:其评分平均值。在Map阶段,我们对第一步数据不做任何处理,直接输出,但实际过程中,这会造成reduce过程数据量过大,因为网络传输的效率问题,导致reduce的压力更大,我们在这个过程我们要适当进行优化,提高reduce的效率。Hadoop中允许我们在处理每个机器上的Map函数后调用合并模块Combiner进行此Map所在机器上的初步Reduce计算。这步中,从Map输出的数据,真正有意义的是具有相同项目对的用户总数及评分和(如果直接取平均值并不合适因为局部平均不等于全局平均),在这一步调用合并模块Combiner,其作用就是统计总数与评分和,然后作为Reducer的输入。因此,基于键值对为项目差值对:其差值及产生该差值的用户的输出数据通过合并模块生成键值对为项目差值对:其差值及产生该差值的用户的统计个数列表的输出数据:<KeyPair,KeyPairValue>,KeyPair还是上一步骤的输出键key,而KeyPairValue项目对之间的差值(包括产生差值的用户)的个数则修改为Combiner的统计个数。此数据经过拷贝与混洗后作为Reducer的输入,复制后的输入为<KeyPair,List{KeyPairValue,KeyPairValue……}>。Reducer获取参数后,统计KeyPair,及其对应输出的值为KeyPairValue个数,和其平均值。在这个Map-Reduce,其实就是所有的训练数据的统计计算的终点,我们现在需要考虑如何保持这份计算结果而实现再次计算时不再计算这部分数据,即增量计算。本发明给出的方案是:把项目对的个数,以及当前评分总和写进每条记录,以在增量计算时可以还原上次计算的结果,从而可以方便的加入增量计算的项目对个数与评分和。另外,可选的我们将Reducer产生的记录加上特殊的标识:0,表明这是训练数据集中的数据。也就是说,基于键值对为项目对:其差值及产生该差值的用户的统计个数列表的输出数据<KeyPair,List{KeyPairValue,KeyPairValue……}>通过第二归约模块获得键值对为项目:已计算标示、有差值关系的项目对、总用户数量、评分和以及平均差值的输出数据。经过以上的处理我们最终输出的数据格式如下:<baseItemID:{<flag,compareid,totaluser,totalrating,averageRating>}>其中:baseItemID为项目ID,flag为已计算标识,compareid为有差值关系的项目id,其它totalusr为总用户数量,totalrating为评分和,averageRating为平均差值。这个地方键key已经不再采用项目对的形式了,主要是考虑后续与测试集进行join处理的问题,且因为在步骤402中项目对已经是上三角形式了,所以记录的本身已经是唯一的。在步骤404中,根据训练数据集和测试数据集进行分布式数据获得用户已经评分过的项目及其评分以及要预测的项目。本步骤与步骤402和步骤403进行并行计算,并不依赖于步骤402和步骤403计算过程。本步骤计算过程主要是处理训练数据集与测试数据集,并得到需要预测的项目。本步骤中,对训练数据集与测试数据集通过第三映射模块进行连接处理获得键值对为用户:该用户的连接记录列表的输出数据。在步骤一的SlopeOne设计中,训练数据集与测试数据集的数据格式是不一样的:训练数据集每行4个记录,而测试数据集每行只有2个记录。利用这两个数据集格式的不一致,来区分输入Map模块的数据是来自哪个数据集。Map输出为这个两个数据集的连接记录集:<LongWritable,ItemPredictStatus>,其中LongWritable为用户的ID,ItemPredictStatus表示该用户的连接记录列表,为自定义Hadoop值类型,可选的,其记录的数据为<item,tag,user,rating>,对于训练数据集标识tag为:0x0,同时另外三个值为读入的数据,对于测试数据集标识tag为:0x1,评分值rating全部设为0,其它两个为正常读入值。然后,基于键值对为用户:该用户的连接记录列表的输出数据通过第三归约模块获得键值对为用户:预测需求标识、用户已经评分过的项目及其评分以及要预测的项目。第三归约模块Reduce的输出是用户没有评分过的项目及其可能存在差值关系的已评分项目关系(因为Slopeone需要用户有评分记录),格式为:<userID:{<flag,basicid_has,rating,basicid_no>}>,其中预测需求标识flag标识设为1表示这条记录是此用户需要预测的,basicid_has表示用户已经评分过的项目,而basicid_no则是预测的项目id,rating为用户已经评分项目的评分,即basicid_has的评分。在步骤405中,基于训练数据集中有差值关系的项目对、总用户数量、评分、平均差值、用户已经评分过的项目及其评分和要预测的项目进行分布式数据处理获得SlopeOne预测计算所需的值,其中包括:用户已经评分过的项目、需要用slopeone计算评分的项目、已经评分过的项目的评分值、历史上所有用户评分差值、总用户数以及同时对已经评分过的项目与需要计算评分的项目进行了评分的用户。步骤405是根据步骤403与步骤404得到的结果计算用户对于哪些项目能进行评分预测,本方案在步骤403时已经针对训练集计算得到了项目对之间的差值关系,在步骤404时已经得出用户需要对哪些项目进行评分,但是对于以下情况:比如表1中Item1-Item4,假设他们之间的差值不存在,那任何用户都不能利用Item1的值来预测Item4或者Item4预测Item1,只能能过Item2,Item3等对Item1或Item4有差值的项目对才可以计算,我们在这步的目的就是处理这种情况。Map的输入为步骤403与步骤404的Reduce输出结果,输出键Key则根据步骤403与步骤404输出结果的flag进行标识还原的项目对,其形式为<KeyPair,value>,其中value不变,直接输出。Reduce输入为<KeyPair,List{<value>……}>,Reduce通过计算训练集中的数据项目对数据与测试集中的项目对的关系最后输出可计算的记录<userID,<basicItem,targetItem,user,basicRating,diffRating,totaluser>>,其中key为userID,值:basicitem是已经评分rate过的项目,targetItem是需要用slopeone计算评分rate的项目,basicRating是basicitem的rate值,diffRating则是历史上所有用户rate差值(target和basicitem的),totaluser是总用户数,user是同时对baiscItem与targetItem进行了rate的用户。在步骤406中,基于获得的SlopeOne预测计算所需的值进行分布式数据处理计算用户需要预测的项目的预测值。并行计算的最后一步,这步主要是根据步骤405的结果以及SlopeOne计算公式计算预测值。Map的输出键Key为:用户ID-要预测的项目ID,输出值不做处理,Reduce则是SlopeOne计算公式的实现,输出为<用户ID-要预测的项目ID,预测值>。Reduce关键代码如下:在上述SlopeOne大数据处理流程设计方案中,其中步骤402主要是训练数据集的统计处理,其会产生大量的中间数据,步骤403是整个算法的增量算法实现的地方,因为使用的密集存储,步骤403时会减少大量存存储空间,步骤404是对测试集处理的部分,同时步骤404也是后期优化测试数据集的地方,而步骤405则是将步骤403与步骤404的结果进行预测可行性的分析与计算,同样是解决SlopeOne稀疏性的计算节点。步骤406是整个算法产生预测结果的Map-Reduce。整个设计中,步骤403与步骤405因为hadoop迭代器的原因需要考虑内存不足的问题,我们都采用了溢出数据到磁盘的形形式用来解决这个问题。本发明实施例提供的推荐系统大数据处理方法通过Hadoop平台实现基于内容推荐的大数据处理设计方案、基于项目协同推荐的大数据处理设计方案、冷启动优化方案大数据处理设计以及SlopeOne算法的大数据处理设计方案,通过并行执行机制,大大提高大数据处理的计算效率。且本发明提供的SlopeOne算法的大数据处理设计方案可实现并行化后的增量计算,并解决中间计算过程中可能会出现的内存不足的问题,同时利用合并模块Combiner实现对于算法的进一步优化,进一步的提高计算效率和可靠性。虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属
技术领域
:内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1