1、本科毕业论文 (20 届) 基于 Hadoop 的协同过滤电商数据推荐研究 所在学院 专业班级 电子商务 学生姓名 指导教师 完成日期 摘 要 随着电子商务的快速发展,电子商务系统中的数据量不断增多,用户如何从海量的数 据中找出自己所需要的信息是一件很困难的事情,通过数据推荐系统可以显著地帮助用户 解决这一个问题。然而传统的推荐系统中在具体的运作中面临了诸多问题,比如冷启动、 数据稀疏性问题、用户评价不准确、可扩展性等。 基于这个前提,为了提高在电子商务系统中的商品推荐准确率,本文提出了一种新型 的基于 Hadoop 框架的协同过滤推荐算法,试图通过优化传统协同过滤算法中用户评价不 准确的问题
2、,为此本文从实验的角度来着手论证,利用三台装有 Linux 操作系统的主机, 采用 Hadoop 框架进行分布式系统模拟计算,并采用这个算法来开发商品数据处理系统。 通过 Hadoop 构建的系统,配合模拟的实验数据,在实验中进行开发运算,利用 MAE 来进 行数据结果评估。经过实验证明,该算法在 Hadoop 的平台上,比起传统的推荐算法,在 用户评价不准确问题上有明显改进,它能够有效提高商品数据推荐的准确率和计算效率, 从而提高用户购买量。 关键词 Hadoop, MapReduce, 大数据, 协同过滤 Abstract With the rapid development of ele
3、ctronic commerce, the increasing amount of data in the electronic commerce system, the user how to find out what they need from the vast amounts of data information is a very difficult thing, through data recommendation system can significantly help user to solve this problem. However, traditional r
4、ecommendation system faced many problems in the concrete operation, such as cold start data sparseness, user evaluation, data is not accurate, scalability, etc. Based on this premise, in order to improve the recommendation accuracy in e-commerce systems, this paper puts forward a new kind of collabo
5、rative filtering recommendation algorithm based on Hadoop framework, tries to optimize the traditional collaborative filtering algorithm of user evaluation the problem of inaccurate, therefore this text set about from the point of view of the experimental demonstration, using three host containing t
6、he Linux operating system, a distributed system is simulated using the Hadoop framework, and the algorithm is used to develop commodity data processing system. Through the Hadoop build system, coordination with the experiment data of simulation in the experiment of development operations, use of MAE
7、 for data result evaluation. After the experiment proved that this algorithm on Hadoop platform, compared to traditional recommendation algorithm was proposed, which has obvious improvement on user evaluation is not accurate, it can effectively increase the commodity data accuracy and computational
8、efficiency, recommended by so as to improve the user purchases. Keywords Hadoop,MapReduce,Big data ,Collaborative filtering 目 录 第一章 引言 1 1.1 研究背景 .1 1.2 国内外研究现状 .2 1.3 推荐技术存在的问题 .3 1.4 研究内容和意义 .3 第二章 Hadoop 平台系统的简介 .4 2.1 Hadoop 平台的简介 .4 2.2 并行计算框架 MapReduce .5 2.3 分布式文件系统 HDFS .5 第三章 推荐系统的设计 7 3.1
9、推荐技术简介 .7 3.2 协同过滤推荐技术 .7 3.3 推荐算法评价与比较 .9 第四章 基于 hadoop 的商品大数据系统的实现 .10 4.1 推荐算法的选取 .10 4.2 优化推荐算法过程 .10 4.3 数值计算 .11 4.4 实验环境 .14 4.5 实验过程 .16 4.6 实验结果 .18 第五章 总结与展望 19 5.1 总结 .19 5.2 展望 .19 参考文献 21 致谢 22 第 1 章 引言 1.1 研究背景 1.1.1 数据规模过大 随着电子商务的快速发展,电子商务系统中的数据量不断增多,一方面给用户提供越 来越多不一样的商品和资源,另一方面由于信息的增多
10、,大型电子商务系统中的电商数据 量和用户访问量不断增多,数据规模正呈现出爆炸式增长,用户如何从海量的数据中找出 自己所需要的信息是一件很困难的事情,信息被广泛地分布也形成了信息超载的现象。这 也是当今互联网中迫切需要解决的问题。 为解决由数据规模过大引发的一系列问题,出现了诸如云计算、大数据的解决办法, 而在这些解决办法中,由 Apache 软件基金会推出的开源平台 Hadoop 最为突出,Hadoop 是一个用在大规模数据处理和分析的高效的工具,电子商务系统可以通过在 Hadoop 上开 发相应的应用程序来处理大规模数据。 在当前数据规模越来越大的情况下,传统的被动搜索服务模式虽然能够在一定
11、程度上 解决用户获取信息的问题,但是这种获取方式是一种过于被动的服务模式,对于如今的互 联网而言,用户更迫切需要一种主动式的推送信息服务,这必将是个性化的推荐服务,个 性化推荐 1就是通过建立用户与信息产品之间的二元关系,利用已有的选择过程或相似性 关系挖掘每个用户潜在感兴趣的对象,进而进行个性化推荐,其本质就是信息过滤。 1.1.2 个性化推荐服务 推荐系统是个性化服务技术在 Web 应用中最重要的形式之一 ,它融合了搜索引擎、数 据挖掘、机器学习等技术,是一种重要的信息过滤机制 2,它能够有效地解决信息过载问 题。它被广泛地用在各大电商系统平台中,比如淘宝、亚马逊、当当等。早期的推荐系统
12、并不是个性化的推荐系统,它的推荐效果往往不够准确,不能区分不同的用户群体。 随着信息商品数据信息量不断扩大,信息过载问题的不断加大,一种新型的建立在大 规模数据上的个性化推荐系统出现了。它通过电子商务网站向不同的客户提供不同的商品 信息,通过收集用户的信息来向用户推送符合用户消费水平和消费习惯的商品。 一般的 推荐系统通常由这几个部分组成,包括用户的模型,推荐的对象的模型、推荐算法。推荐 系统 3把用户模型中兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推 荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。 常见的个性化推荐主要有这么几个:基于关联规则的推荐、基于内
13、容的推荐、协同过 滤推荐(包括基于用户的协同过滤和基于物品的协同过滤)、混合推荐 4等。 1.1.3 协同过滤推荐 目前存在的大部分协同过滤推荐,主要是通过某一用户对未评分项目的预测评分并以 此作为主要依据来向该用户进行推荐的 5,协同过滤推荐包括三步: 数据表达、计算项目或 用户相似性和预测项目评分,产生推荐列表。目前应用比较广的协同过滤推荐算法中主要 有:基于用户(User-based)的协同过滤、基于物品 (Item-based)的协同过滤算法。很多大型的 电子商务系统都是采用这两者,或者是混合协同过滤。 1.2 国内外研究现状 在推荐系统的实际应用中比较广泛的非电商巨头的亚马逊了,亚马
14、逊很早的就将推荐 技术运用到自己的网站上去。亚马逊根据用户的浏览行为和购买行为,然后结合自己的大 数据处理系统,再推送给用户相关联的商品。同时亚马逊的官方网站上不仅仅只有一种推 荐方式,而是结合多种推荐算法和多种用户行为给用户推荐不一样的信息。用户可以对推 荐的信息进行反馈,亚马逊根据用户的反馈来修正自身的推荐系统。 Goldberg 等人在 1992 年首次提出了 “协同过滤” 的概念,并创建了最早的推荐系统 6。 后来随着科技的发展,越来越多的学者和专家、企业都在不停地研究相关的技术。在 2000 年,Sarwar 提出了基于矩阵分解( SVD)的协同过滤算法 7,给出了一种新的理念, 现
15、如今大多数协同过滤算法皆采用矩阵分解的思路。该理念所提出的是将用户-评分矩阵 中评分为空的项目赋予一个固定的缺省值,然后利用矩阵的算法,预测目标用户对项目的 评分,最后向用户推荐。在此基础上,国内也有一些学者对此做过相应的优化,比如接下 来的这篇文献 8,基于项目评分来预测缺省值,最后采用矩阵计算,推荐目标项目给用户, 可以有效地提高协同过滤的准确度。 在国外,Yahoo!曾搭建过很大规模的 Hadoop 应用系统平台,它们利用 Hadoop 平台 系统去收集 Yahoo!搜索旗下中的大量用户数据,并进行数据分析,这些资料压缩后都超 过 300TB。Yahoo!利用这套系统为公司带来了很大的收
16、入。 在国内,中国最大的电商公司阿里巴巴也举办过相应的大数据比赛,通过 Hadoop 相 关技术对阿里巴巴旗下淘宝网的部分信息进行数据挖掘,再进行相应的数据分析,推荐给 不同的用户。阿里巴巴通过各类比赛与高校合作,也从全球引进了很多技术大牛,搭建出 了能够在双十一顺利运转的大数据平台。 1.3 推荐技术存在的问题 通过数据推荐系统可以显著地帮助用户解决信息过载问题。然而推荐系统中在具体的 运作中也面临了诸多问题,主要问题如下: (1)冷启动 9:这是协同过滤中比较普遍的一个问题,该推荐方法是基于用户的, 如果新增加用户没有任何信息,如何产生推荐,怎样解决推荐信息,都是需要面对的重大 问题。 (
17、2)数据稀疏性问题 10:推荐系统中的数据量往往比较大,而用户对资源的评价相 对来说比较少,这使得评分数据比较缺少,影响用户的相似性计算,在一定程度上会影响 推送系统的准确性,导致算法结果不理想。 (3)用户评价不准确:不同的用户对资源的评分可能不准确,比如在相同的心理评 价下,A 和 B 用户认为某商品是最好的,用户 A 可能只给出 4 分评价,而用户 B 可能会 打出 5 分评价(满分),这样的数据对实验的准确性造成具大的影响。 (4)系统实时性:对于系统而言,系统所运行的每一刻都会有大量的数据信息在不 断增加,大量的数据给推荐算法提出了较高的时间复杂度要求,获取推送信息的计算不能 够过长
18、。 1.4 研究内容和意义 本文主要通过对协同过滤推荐技术进行深入研究,根据其中已存在的部分问题提出相 应的解决办法,并在前人的基础上加以优化改进。基于这个前提,为了提高在电子商务系 统中的商品推荐准确率,本文提出了一种新型的基于 Hadoop 框架的协同过滤推荐算法, 试图通过优化传统协同过滤算法中用户评价不准确的问题,为此本文从实验的角度来着手 论证,利用三台装有 Linux 操作系统的主机,采用 Hadoop 框架进行分布式系统模拟计算, 并采用这个算法来开发商品数据处理系统。通过 Hadoop 构建的系统,配合模拟的实验数 据,在实验中进行开发运算,利用 MAE 来进行数据结果评估。经
19、过实验证明,该算法在 Hadoop 的平台上,比起传统的推荐算法,在用户评价不准确问题上有明显改进,它能够 有效提高商品数据推荐的准确率和计算效率,从而提高用户购买量。 第 2 章 Hadoop 平台系统的简介 2.1 Hadoop 平台的简介 Hadoop 是一个运行在大量服务器集群中的分布式存储和并行计算系统,其中两个核 心部分分别是分布式系统 HDFS 和并行计算框架 MapReduce 编程模型。MapReduce 并行 编程框架可以大批量、分布式地处理大数据,在程序执行时,MapReduce 11并行计算框架 负责调度和分配计算资源,划分和输入输出数据,调度程序的执行,监控程序的执行
20、状态, 并负责程序执行时隔计算节点的同步以及中间结果的手机整理。HDFS 12是一个分布式存 储存储管理系统,专门用于大规模的数据处理,它采用了数据冗余存储机制,并提供了有 效的数据出错检测和数据恢复机制,提高了数据存储的可靠性。 2.1.1 基础理论与相关技术 Hadoop 已经发展成为包含多个子项目的集合,虽然核心项目内容是 MapReduce 和 Hadoop 分布式文件系统,但 Hadoop 下的 Common、Avro、ChuKwa 、Hive、HBase 等子 项目也是不可获取的 13。如图展示了 Hadoop 的子项目: Pig Chukwa Hive Hbase MapRedu
21、ce HDFS ZooKeeper Common Avro 图 2-1 Hadoop 子项目 2.1.2 Hadoop 的安装模式 Hadoop 集群主要分为三种:单机模式、伪分布模式、完全分布式模式 14。 单机模式就是在一台电脑的 JVM 上运行所有的任务,该模式没有守护进程,而且不 使用 HDFS,适用于调试部分。 伪分布模式是指 Hadoop 守护进程运行在本地机器上,模拟一个小规模的集群。该模 式在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS 输入输出,以及 其他的守护进程交互 15。 完全分布式模式是指真正意义上的分布式,多台机器建立一个完全的集群,本文实验 环境
22、采用的是三台机器模拟的全分布式环境。 2.2 并行计算框架 MapReduce Hadoop 的 MapReduce 是对 Google 所提出的 MapReduce 框架的开源实现,为用户提 供了并行化计算框架。MapReduce 框架 16是由一个单独运行在主节点 master 的 JobTracker 和运行在每个集群从节点 slave 上的 TaskTracker 共同组成的, master 负责调度构成一个作 业的所有任务,这些任务分布在不同的 slave 上,master 监控它们的执行情况,并重新执 行已经失败的任务,而 slave 仅负责执行 master 指派的任务。 在 H
23、adoop 中,每个 MapReduce 任务都会被初始化一个 Job,每个 Job 又可以分为两 个阶段:map 阶段和 reduce 阶段,这两个阶段分别用两个函数来表示,即 map 函数和 reduce 函数,map 函数接收一个 形式的输入,然后同样产生一个 形式的中间输出,Hadoop 会负责将所有具有相同中间 key 值的 value 集合到一起传递给 reduce 函数,reduce 函数接收一个如形式的输入,然后对这个 value 集合进行处理,每个 reduce 产生 0 或 1 个输出,reduce 的输出也是形式的 17。 在 Hadoop 上运行的作业标出了应用程序相应
24、的 Input/Output 位置,并借用实现适当 的 Port 或 Abstract 类来提供 map 和 reduce 函数。再利用给出的应用程序的其他参数,构 成作业配置(job configuration) 。在 Hadoop 的 jobclient 提交作业和配置信息给 JobTracker 之后,JobTracker 会负责发送配置消息给 slave 及调度任务。并监控它们的具体运作,并 且给出具体的状态消息给 jobclient。 图 2-2 MapReduce 框架 Client JobTracker InputSplit InputSplit TaskTracker Mape
25、per Mapeper MapOutPut MapOutPut TaskTracker Reducer Output 2.3 分布式文件系统 HDFS HDFS(Hadoop Distributed File System)是 Hadoop 最重要的子项目之一,全称叫 Hadoop 分布式文件系统,主要用来给 Hadoop 提供相应的分布式系统支持。它的主要作用 在处理大规模文件,它可以运行于便宜的服务器集群。HDFS 的主要特点为:操作大量巨大 的文件、流式地访问数据、运行于便宜的商用服务器机器集群上。它的局限性在于:不适 合低延迟数据访问、无法高效存储大量小文件、不适合大量用户操作和随意修
26、改文件。 HDFS 采用了主从结构,即 Master/Slave 模式,NameNode 为主节点,DataNode 为子 节点。一个 HDFS 集群包含有一个 NameNode 和相应数量的 DataNodes,NameNode 是一 个中心服务器,负责管理文件系统的名字空间(Namespace)以及客户端对文件的访问。集 群中的 DataNode 一般是一个节点运行一个 DataNode 进程,负责管理它所在节点上的存储。 HDFS 展示了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看, 一个文件其实被分成了一个或多个数据块,这些块存储在一组 DataNode 上。Nam
27、eNode 执行文件系统的名字空间操作,比如打开、关闭、重命名或目录。它也负责确定数据块到 具体 DataNode 节点的映射。 DataNode 负责处理文件系统客户端的读 /写请求,在 NameNode 的统一调度下进行数据块的创建、删除或复制。 HDFS 为开发者提供了丰富的接口,包括命令行接口和各种方便使用的 Java 接口,可 以通过 Java API 对 HDFS 的文件执行常规的文件操作,并进行较为复杂的目录操作等操作。 客户端 NameNode DataNode DataNode DataNode DataNode DataNode DataNode 客户端 read 备份 w
28、rite write 数据请求 图 2-3 HDFS 架构 第三章 推荐系统的设计 3.1 推荐技术简介 目前的推荐算法主要分为协同过滤推荐算法、基于内容的推荐算法、混合推荐算法、 基于模型的推荐算法等。 协同过滤算法又分为基于用户的协同过滤算法和基于项目的协同过滤算法。在基于用 户的协同过滤算法中,假如用户甲喜欢物品 A 和 B,另一用户乙喜欢物品 A 和 B 还有 C,此时就可以判断用户甲和用户乙也许有相同的喜好,因此就可以把用户乙喜好的物品 C 推荐给用户甲,这就是基于用户推荐的算法思想。 基于项目的协同过滤算法,通过用户对不同项目的评分来评判物品之间的相似性,基 于项目之间的相似性做出
29、推荐。简单来讲就是:给用户推荐和他曾经喜欢的物品相似的物 品。若用户甲和乙都喜欢物品 A、物品 B,,说明物品 A 和物品 B 有相似之处,则可以将 物品 B 推荐给喜欢物品 A 的用户丙,就是基于项目之间的相似性,从而推荐给用户。 基于内容的推荐就是根据商品的属性进行先分类,比如裙子这一大类就可以按照裙子 的长度分为长裙、中裙、短裙、超短裙,如果一个客户一直在网上浏览长裙,我们就可以 推荐同一样类型的长裙给他,这就是基于内容的推荐在商品大数据处理的简单应用模型。 最后就是基于用户的社交系统推荐,比如在微信、QQ 等社交网络中,我们经常会看 到系统会自动地向你推荐一些你可能认识的朋友,这就是基
30、于用户的社交系统的推荐。 在本文接下来的章节中,主要论述协同过滤推荐算法。 3.2 协同过滤推荐技术 协同过滤是一种基于一组兴趣相同的用户或项目进行的推荐,它根据邻居用户的偏好 信息产生对目标用户的推荐列表。其中邻居用户指的是与目标用户兴趣相似的用户,协同 过滤算法主要分为基于用户的协同过滤算法和基于项目的协同过滤算法。 3.2.1 基于用户的协同过滤 基于用户的(User-based)协同过滤的主要思想就是,根据邻居用户的偏好信息产生对目 标用户的推荐。它基于这样一个假设:如果一些用户对某一类项目的打分比较接近,则他 们对其它类项目的打分也比较接近。协同过滤推荐系统采用统计计算方式搜索目标用
31、户的 相似用户,并根据相似用户对项目的打分来预测目标用户对指定项目的评分,最后选择相 似度较高的前若干个相似用户的评分作为推荐结果,并反馈给用户。这种算法不仅计算简 单且精确度较高,被现有的协同过滤推荐系统广泛采用。基于用户的(User-based)协同过滤 推荐算法的核心就是通过相似性度量方法计算出最近邻居集合,并将最近邻的评分结果作 为推荐预测结果返回给用户。 在真实的预测中,推荐系统只对前若干个邻居进行搜索,并根据这些邻居的评分为目 标用户预测指定项目的评分。基于用户的(User-based)协同过滤推荐算法的主要工作内容是 用户相似性度量、最近邻居查询和预测评分。 3.2.2 基于项目
32、的协同过滤 基于项目的(Item 一 based)协同过滤是根据用户对相似项目的评分数据预测目标项目 的评分,它是建立在如下假设基础上的:如果大部分用户对某些项目的打分比较相近,则 当前用户对这些项的打分也会比较接近。Item-based 协同过滤算法主要对目标用户所评价 的一组项目进行研究,并计算这些项目与目标项目之间的相似性,然后从选择前 K 个最 相似度最大的项目输出,这是区别于 User-based 协同过滤。 Item-based 协同过滤推荐算法的主要工作内容是最近邻居查询和产生推荐。因此, Item 一 based 协同过滤推荐算法可以分为最近邻查询和产生推荐两个阶段。最近邻查询
33、阶 段是要计算项目与项目之间的相似性,搜索目标项目的最近邻居;产生推荐阶段是根据用 户对目标项目的最近邻居的评分信息预测目标项目的评分,最后产生前 N 个推荐信息。 Item-based 协同过滤算法的关键步骤仍然是计算项目之间的相似性并选出最相似的项 目,这一点与 User-based 协同过滤类似。计算两个项目 i 和 j 之间相似性的基本思想是首 先将对两个项目共同评分的用户提取出来,并将每个项目获得的评分看作是 n 维用户空间 的向量,再通过相似性度量公式计算两者之间的相似性。 分离出相似的项目之后,下一步就要为目标项目预测评分,通过计算用户 u 对与项目 i 相似的项目集合的总评价分
34、值来计算用户 u 对项目 i 的预期。这两个阶段的具体公式和 操作步骤与基于用户的协同过滤推荐算法类似, 3.2.3 基于用户协同过滤和基于项目协同过滤对比 在众多基于协同过滤算法的项目中,Amazon 旗下的官方网站, Hulu 视频推荐网站均 采用了基于项目的协同过滤(Item-based )。而 Digg 等新闻推荐网站采用了基于用户的协 同过滤(User-based).下面将从不同角度来对比两者之间的区别。 第一,因为在新闻类网站中,用户的兴趣爱好往往比较粗粒度,很少会有用户说只看 某个话题的新闻,往往某个话题也不是天天会有新闻的。个性化新闻推荐更强盗新闻热点, 热门程度和时效性是个性
35、化新闻推荐的重点,个性化是补充,所以 UserCF 给用户推荐和 他有相同兴趣爱好的人关注的新闻,这样在保证了热点和时效性的同时,兼顾了个性化。 另外一个原因是从技术上考虑的,作为一种物品,新闻的更新非常快,而且实时会有新的 新闻出现,而如果使用 ItemCF 的话,需要维护一张物品之间相似度的表,实际工业界这 表一般是一天一更新的,这在新闻领域是万万不能接受的。 第二,在图书,电子商务和电影网站等方面,ItemCF 则能更好的发挥作用。因为在 这些网站中,用户的兴趣爱好一般是比较固定的,而且相比于新闻网站更细腻。在这些网 站中,个性化推荐一般是给用户推荐他自己领域的相关物品。另外,这些网站的
36、物品数量 更新速度不快,一天一次更新可以接受。而且在这些网站中,用户数量往往远远大于物品 数量,从存储的角度来讲,UserCF 需要消耗更大的空间复杂度,另外,ItemCF 可以方便 的提供推荐理由,增加用户对推荐系统的信任度,所以更适合这些网站。 3.3 推荐算法评价与比较 通过上文的说明,我们已经介绍了基于用户的协同过滤和基于物品的协同过滤两种推 荐技术的优劣,但是在具体的实际应用中,我们要选取最合适的推荐算法,或者根据算法 的实验数据来比较不同的推荐技术,都需要对算法的具体的结果进行评估。而选定一个合 适的评定标准至关重要,需要一个统一的评价标准,来衡量不同的算法的适用性,这也可 作为后
37、续研究中对算法进行改进的一个具体参考。 对于推荐技术的评价主要通过在相同的测试数据下通过实验论证以后完成推荐的准确 度来衡量。准确度反映了用户真实项目评分与预测结果之间的差异。最常用的来衡量推荐 算法的推荐质量的方法是 MAE(平均绝对偏差),MAE 比较的是推荐系统预测的评分值与 用户真实评分值的差异,是各种评估标准中使用最为广泛的一个准确性评价标准。MAE 与推荐的预测准确值成反比,类似于方差的形式,MAE 数值越小,推荐的预测准确性越 高,MAE 越大,推荐的准确性越低。 18 第 4 章 基于 hadoop 的商品大数据系统的实现 4.1 推荐算法的选取 由上文的分析可得,Item_b
38、ased 协同过滤推荐算法的主要工作内容是最近邻居查询和 产生推荐。因此,Item_based 协同过滤推荐算法可以分为最近邻查询和产生推荐两个阶段。 最近邻查询阶段是要计算项目与项目之间的相似性,搜索目标项目的最近邻居。产生推荐 阶段是根据用户对目标项目的最近邻居的评分信息预测目标项目的评分,最后产生前 N 个推荐信息。 通过分析,本文将采用 Mahout 的物品系统过滤模型 ,根据具体数据来设计和优化推荐 算法:item-based CF,基于 item 的协同过滤,通过用户对不同 item 的评分来评测 item 之间 的相似性,基于 item 之间的相似性做出推荐。 4.2 优化推荐算
39、法过程 4.2.1 最近邻居查询优化 传统的最近邻居查询算法设计是: 基于余弦的相似度计算 ,通过计算两个向量之间的夹 角余弦值来计算商品之间的相似性,公式如下: jijiji ),cos(),(sm 公式 4.1 余弦的相似度计算 其中分子为两个向量的内积,即两个向量相同位置的数字相乘。 4.2.2 改进后的邻居查询优化 传统的余弦相似度未考虑到用户评分尺度问题,如在评分区间1 一 5的情况下,对用 户甲来说评分 3 以上就是自己喜欢的,而对于用户乙,评分 4 以上才是自己喜欢的。通过 减去用户对项的平均评分,修正的余弦相似性度量方法改善了以上问题。 我们通过是采用皮尔森(Pearson)
40、相关系数来进行度量。设 Iij 表示用户 i 和用户 j 共同 评分过的项目集合,则用户 i 和用户 j 之间相似性为: jiji IcjcIcicI jjii RRji 2,2, , )()(),(sm, 公式 4.2 改进后的余弦相似度计算 4.2.3 产生推荐 在得到目标用户的最近邻居以后,接着就要产生相应的推荐结果。设 为用户 uuNBS 的最近邻居集合,则用户 u 对项目 i 的预测评分 计算公式如下:iP,uuuNBSn niui simRRP),(,n,u 公式 4.3 推荐计算公式 4.3 数值计算 4.3.1 算法模型:Hadoop 并行算法 在 本 文 中 , 所 采 用
41、的 是 测 试 数 据 集 : itemdata.csv,如 表 4-1 所 示 , 该 测 试 数 据 集 由 三 个 部 分 组 成 , 分 别 表 示 购 买 商 品 的 用 户 ID, 商 品 自 身 的 ID, 已 经 单 个 用 户 对 单 个 商 品 的 评 分 。 表 4-1 测 试 数 据 集 用户 ID 商 品 ID 用 户 对 商 品 的 评 分 1 101 5.0 1 102 3.0 1 103 2.5 2 101 2.0 2 102 2.5 2 103 5.0 2 104 2.0 3 101 2.0 3 104 4.0 3 105 4.5 3 107 5.0 4 10
42、1 5.0 4 103 3.0 4 104 4.5 4 106 4.0 5 101 4.0 5 102 3.0 5 103 2.0 5 104 4.0 5 105 3.5 5 106 4.0 测试数据中每行三个字段,分别表示用户 ID,商品 ID,用户对商品喜好的评分(0-5 分,每 0.5 分为一个评分点) 算法思想: 1 建立物品的同现矩阵 2 建立用户对物品的评分矩阵 3 矩阵计算推荐结果 4 建立物品的同现矩阵 按用户分组,找到每个用户所选的物品,单独出现计数及两两一组计数。 表 4-2 物品的同现矩阵 商 品 ID 101 102 103 104 105 106 107 101 5
43、3 4 4 2 2 1 102 3 3 3 2 1 1 0 103 4 3 4 3 1 2 0 104 4 2 3 4 2 2 1 105 2 1 1 2 2 1 1 106 2 1 2 2 1 2 0 107 1 0 0 1 1 0 1 建立用户对物品的评分矩阵,按 用 户 分 组 , 找 到 每 个 用 户 所 选 的 物 品 及 评 分 , 如 表 4-3 所 示 的 是 用 户 3 对 物 品 的 评 分 。 表 4-3 单个用户对物品的评分 物 品 ID 评 分 101 2.0 102 0.0 103 0.0 104 4.0 105 4.5 106 0.0 107 5.0 矩 阵 计
44、 算 推 荐 结 果 , 同 现 矩 阵 *评 分 矩 阵 = 推 荐 结 果 图 4-3 矩阵计算推荐结果 4.3.2 MapReduce 的任务 MapReduce 的具体步骤如下: 步骤 1: 按用户分组,计算所有物品出现的组合列表,得到用户对物品的评分矩阵 步骤 2: 对物品组合列表进行计数,建立物品的同现矩阵 步骤 3: 合并同现矩阵和评分矩阵 步骤 4: 计算推荐结果列表 在本文前面已经介绍了 MapReduce 的相关原理,在实验过程中将利用 Hadoop 与 MapReduce 框架来结合改进后的算法来进行运算操作。为了能够将两者具体的结合使用, 本文实验设计了 Map 和 R
45、educe 任务的键值对类型,用于 Map 和 reduce 函数中传递数据。 MapReduce 的运算结果是从输入的键值对,通过运算得到输出的键值对。在该实验中,我 们定义输入的是 ,输出的是 。整个算法结 合 MapReduce 的流程图如图所示。 图 4-4 MapReduce 流程图 4.3.3 MapReduce 程序实现 新建 java 类: Recommend.java 主任务启动程序 item1.java 按用户分组,计算所有物品出现的组合列表,得到用户对物品的评分矩阵 item2.java 对物品组合列表进行计数,建立物品的同现矩阵 item3.java 合并同现矩阵和评分
46、矩阵 测试数据集 Key:用户 Value:评分 Map 任务 Key:用户 Value: 预测值Reduce 任务推荐结果列表 ResultView.java 计算推荐结果列表 HdfsDAO.java HDFS 操作工具类 ResultView.java 部分代码如下: package org.conan.myhadoop.recommend; Import java.io.IOException; Import java.util.HashMap; Import java.util.Iterator; Import java.util.Map; Import org.apache.had
47、oop.fs.Path; Import org.apache.hadoop.io.LongWritable; Import org.apache.hadoop.io.Text; Import org.apache.hadoop.mapred.JobConf; Import org.apache.hadoop.mapreduce.Job; Import org.apache.hadoop.mapreduce.Mapper; Import org.apache.hadoop.mapreduce.Reducer; Import org.apache.hadoop.mapreduce.lib.inpu
48、t.FileInputFormat; Import org.apache.hadoop.mapreduce.lib.input.FileSplit; Import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; Import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; Import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; Import org.conan.myhadoop.hdfs.reco
49、mmend; 4.4 实验环境 本文所采用的实验环境是基于 Linux 平台的三台电脑主机模拟的分布式环境,硬件环 境都是采用普通笔记本的配置,操作系统采用的是 Linux/Ubuntu 最新版。该环境都是通过 VMware Workstation 来搭建虚拟机,然后在其平台上搭建 Linux 操作系统。软件方面采取 的是 hadoop-0.20.2、SSH 采用的是 OpenSSH,java 版本为 JDK6.0,并采用 Mahout 的算 法模型。 通过上文所提到的,采用三台主机进行模拟的分布式系统,分配不同的 IP 地址,进行 协同计算。 4.4.1 Linux 与 java 环境的安装与配置 Linux 的安装比较简单,本实验过程直接采用 VMware Workstation 来搭建虚拟机环境, 然后在其中安装 Ubuntu 版本的 linux 操作系统。 安装好 linux 平台以后,导入 java 的安装包 JDK6.0,打开终端,利用命令行进行 java 的安装。为了检验 java 的安装是否成功,通过在终端输入 java -version 可以看到 java 的版 本信息。 安装好 java 以后,接下来要进行环境变量的配置,在终端中输入命令 s