您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 基于hadoop作品推荐系统设计说明书
基于hadoop作品推荐系统设计说明书1.引言1.1编写目的Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算,同时它也是当前最流行的云计算平台,作为IT界的开发人员,我们也要跟上节奏,抓住机遇。本文通过Hadoop云计算平台实现一个推荐系统,希望通过编写本文,能够对Hadoop有一个基本的了解。1.2背景随着互联网技术的兴起,视频网站、社交网站、微博等广泛应用,用户在上网体验的过程中,产生了大量的用户信息移动互联网的迅速发展,使得用户随时随地的产生海量数据。面对海量数据,单机运行处理的模式不论从效率或处理能力上来讲,都已经满足不了如今数据挖掘的需求。在信息过载的大背景下,本文研究内容应运而生。我们选取ApacheHadoop作为本应用系统的分布式计算平台。Hadoop主要由两大核心模块组成:分布式文件系统HDFS和分布式批处理框架MapReduce两部分组成。HDFS为我们提供了包括大规模文件存储系统以及对应可靠的备份管理机制的高容错性、高吞吐量的海量数据存储解决方案,而MapReduce编程模型为开发人员提供便利的分布式应用开发接口,如通信、同步、调度计算、负载均衡、处理机器异常等分布式计算和分布式系统常常遇到的复杂难题则交由Hadoop平台解决,对于上层开发人员来说是透明的。Hadoop是一个可靠、高效、可扩展的开源分布式软件框架解决方案和工业级应用,主要用于大规模数据的存储和离线业务计算处理,目前被很多大型网站和公司支持和采用,并取得很好的应用效果。本项目名称为:基于hadoopmapreduce的作品推荐系统开发者:杨建拙,张镇,胡志伟,王政。1.3定义MapReduce:MapReduce是Google于2004年出的一个软件架构,此概念首次出现在JeffreyDean和SanjayGhemawat发表的论文“MapReduce:SimplifiedDataProcessinginLargeClusters”中。MapReduce编程模型主要用于大规模数据集的并行计算,其中Map表示Reducer映射,表示化简。Hadoop:是MapReduce编程模型的开源实现。1.4参考资料[1]JeffreyDean,SanjayGhemawat,USENIXAssociationetal.MapReduce:SimplifiedDataProcessingonLargeClusters[C].ProceedingsoftheSixthSymposiumonOperatingSystemsDesignandImplementation(OSDf04).2004:137-149.[2]杨婷基于MapReduce的好友推荐系统的研究与实现。2.系统的结构推荐系统模型图Hadoop平台硬件部署图3.Mahout推荐算法模块设计说明3.1模块描述推荐算法计算层是整个系统的核心模块,主要组成是Hadoop平台以及部署在平台上的已经MapReduce并行化的一系列抽象算法的集成,计算层不关心具体的业务逻辑的流程,而只负责用户历史日志数据的处理。例如物质扩散算法,计算输入为(用户ID,作品ID,评分数)三元组,在后台进行MapReduce并行化计算,然后将计算结果保存在存储层,以便让用户对结果进行请求,返回推荐结果。Mahout是ApacheSoftwareFoundation顶级的免费开源项目,它是从Lucene发展而来的,是一个数据挖掘、机器学习、个性化推荐等若干算法库,为程序员提供了高效算法实例。Mahout中实现了很多算法,如分类聚类、推荐技术、频繁项挖掘等。经过调用Hadoop库,它能够有效的在Hadoop云计算平台上运行。为了提高算法的处理性能,Mahout把运行于单机中的算法转变成MapReduce计算的模式。Mahoutt推荐算法,从数据处理能力上,可以划分为2类:单机内存算法实现基于Hadoop的分步式算法实现1).单机内存算法实现单机内存算法实现:就是在单机下运行的算法,是由cf.taste项目实现的,像我的们熟悉的UserCF,ItemCF都支持单机内存运行,并且参数可以灵活配置。单机算法的基本实例,请参考文章:用Maven构建Mahout项目单机内存算法的问题在于,受限于单机的资源。对于中等规模的数据,像1G,10G的数据量,有能力进行计算,但是超过100G的数据量,对于单机来说是不可能完成的任务。2).基于Hadoop的分步式算法实现基于Hadoop的分步式算法实现:就是把单机内存算法并行化,把任务分散到多台计算机一起运行。Mahout提供了ItemCF基于Hadoop并行化算法实现。基于Hadoop的分步式算法实现。分步式并行算法的问题在于,如何让单机算法并行化。在单机算法中,我们只需要考虑算法,数据结构,内存,CPU就够了,但是分步式算法还要额外考虑很多的情况,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储等等的很多问题。3.2功能用Mahout来构建推荐系统。Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;但因为我们不了解算法细节,很难去根据业务的场景进行算法配置和调优。该模块使用Mahout基于Hadoop的分步式算法实现:就是把单机内存算法并行化,把任务分散到多台计算机一起运行。Mahout提供了ItemCF基于Hadoop并行化算法实现。3.3性能Mahout提供了2个评估推荐器的指标,查准率和召回率(查全率),这两个指标是搜索引擎中经典的度量方法。相关不相关检索到AC未检索到BDA:检索到的,相关的(搜到的也想要的)B:未检索到的,但是相关的(没搜到,然而实际上想要的)C:检索到的,但是不相关的(搜到的但没用的)D:未检索到的,也不相关的(没搜到也没用的)被检索到的越多越好,这是追求“查全率”,即A/(A+B),越大越好。被检索到的,越相关的越多越好,不相关的越少越好,这是追求“查准率”,即A/(A+C),越大越好。在大规模数据集合中,这两个指标是相互制约的。当希望索引出更多的数据的时候,查准率就会下降,当希望索引更准确的时候,会索引更少的数据。3.4输入项Mahout的推荐引擎实际接受的输入是DataModel,它是对用户偏好数据的压缩表示,通过创建内存版DataModel的语句我们可以看出:DataModelmodel=newGenericDataModel(FastByIDMapPreferenceArraymap);他保存在一个按照用户ID或者物品ID进行散列的PreferenceArray,而PreferenceArray中对应保存着这个用户ID或者物品ID的所有用户偏好信息。DataModel是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息,具体实现包括内存版的GenericDataModel,支持文件读取的FileDataModel和支持数据库读取的JDBCDataModel,下面我们看看如何创建各种DataModel。创建各种DataModel3.5输出项3.6设计方法(算法)Mahout提供的协同过滤的推荐策略最经典的三种:UserCF,ItemCF和SlopeOne。现对这两种算法进行简单的说明:基于用户的CF的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图2给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居–用户C,然后将用户C喜欢的物品D推荐给用户A。基于物品的CF的原理和基于用户的CF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图3给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A的用户都喜欢物品C,得出物品A和物品C比较相似,而用户C喜欢物品A,那么可以推断出用户C可能也喜欢物品C。UserCF和ItemCF是最常用最容易理解的两种CF的推荐策略,但在大数据量时,它们的计算量会很大,从而导致推荐效率较差。因此Mahout还提供了一种更加轻量级的CF推荐策略:SlopeOne。SlopeOne是有DanielLemire和AnnaMaclachlan在2005年提出的一种对基于评分的协同过滤推荐引擎的改进方法,假设系统对于物品A,物品B和物品C的平均评分分别是3,4和4。基于SlopeOne的方法会得到以下规律:用户对物品B的评分=用户对物品A的评分+1用户对物品B的评分=用户对物品C的评分基于以上的规律,我们可以对用户A和用户B的打分进行预测:对用户A,他给物品A打分4,那么我们可以推测他对物品B的评分是5,对物品C的打分也是5。对用户B,他给物品A打分2,给物品C打分4,根据第一条规律,我们可以推断他对物品B的评分是3;而根据第二条规律,推断出评分是4。当出现冲突时,我们可以对各种规则得到的推断进行就平均,所以给出的推断是3.5。这就是SlopeOne推荐的基本原理,它将用户的评分之间的关系看作简单的线性关系:Y=mX+b;当m=1时就是SlopeOne,也就是我们刚刚展示的输入输出。3.7流程逻辑1.根据DataModel创建数据之间线性关系的模型DiffStorage。2.基于DataModel和DiffStorage创建SlopeOneRecommender,实现SlopeOne推荐策略。3.8接口算法API:org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender3.9存储分配并没有统计3.10注释设计无3.11限制条件ApacheMahout作为海量数据上的机器学习经典算法的高效实现,其中对基于协同过滤的推荐方法也提供了很好的支持,基于Mahout你可以轻松的体验高效推荐的神奇。但我们也发现了在海量数据上高效的运行协同过滤算法以及其他推荐策略这样高复杂的算法还是有很大的挑战的。在面对这个问题的过程中,大家提出了很多减少计算量的方法,而聚类无疑是其中最优的选择。3.12测试计划小组每人对数据测试一次3.13尚未解决的问题海量数据上高效的运行协同过滤算法这样高复杂的算法还是有很大的挑战的
本文标题:基于hadoop作品推荐系统设计说明书
链接地址:https://www.777doc.com/doc-7342581 .html