SlideShare a Scribd company logo
1 of 42
Download to read offline
学号:2011013127
2015届本科生毕业论文(设计)
题 目:基于Mahout的推荐系统设计与实现
学院(系): 信息工程学院
专业年级: 软件工程 112 班
学生姓名: 翟轶凡
指导教师: 朱珊娜
完成日期: 2015 年 6 月
基于 Mahout 的推荐系统设计与实现
摘 要
当代互联网已步入大数据时代,资源和资讯多通过互联网呈献给大众。逐个查找信息的搜索导
致办事效率过低,基于 Mahout 的推荐系统能让计算机记住用户偏好,以此推荐给用户可能喜欢的信
息,极大的提高了人们在信息获取方面的效率。基于 Mahout 的推荐系统根据以上需求实现对科技资
源和成果资源信息的推荐。系统开发利用 Taste CF(Mahout 特性)四组件完成基于用户、基于物品
以及 Svd 推荐算法的设计与实现,并通过分析比较召回率和查准率选取三者中推荐性能相对较好的
做为系统的核心推荐算法。当用户登录系统进入科技资源或成果资源模块首页面后,页面右下角将
以弹窗形式显示给用户 5 条推荐信息。
推荐系统的开发可以极大程度的提高用户查阅信息的效率。但是目前很多推荐引擎的推荐结果
和实际用户喜好存在一定偏差,因此推荐算法尚有很大研究空间,是今后大数据研究的一个热门方
向。
关键字:推荐系统;Mahout;Taste;召回率;查准率
Design and implementation of recommendation system
based on Mahout
Abstract
Contemporary Internet has entered the era of big data, both resources and information are presented to
the public via the Internet. The research method of finding information individually will lead to low
efficiency, but recommendation system based on Mahout allows the computers to remember users’
preferences, then recommended the users the information that they might like, which greatly improves the
efficiency of people's access to information. Design and implementation of recommendation system based
on Mahout completes the recommendation function of technological resources and achievement resources
according to the above requirements. System Development uses the four components of Taste CF (Mahout
characteristics) to complete the recommendation algorithm which was based on users, based on goods and
Svd, then select the relatively good-performance algorithm as a core recommendation algorithm through
the analysis and comparison of recall and precision. When users log in and enter the homepage of
technology resources or achievements resources, they will show a pop page of five messages which were
recommended by the system at the lower right corner.
Development of recommendation system can greatly improve the users’efficiency to view the
information. However, there are many deviations between recommendation engine results and actual users’
preferences, as a result, there is still a considerable developing space for research recommendation
algorithm, and it is a popular direction for big data research in the future.
Keywords: recommended system; Mahout; Taste; recall; precision
I
目 录
第 1 章 绪 论........................................................................................................................- 1 -
1.1 研究目的与意义 .............................................................................................................................- 1 -
1.2 研究背景 .........................................................................................................................................- 1 -
1.3 研究内容 .........................................................................................................................................- 2 -
1.4 本章小结 .........................................................................................................................................- 2 -
第 2 章 相关技术介绍..........................................................................................................- 3 -
2.1 JSP 动态页面编程语言 ...................................................................................................................- 3 -
2.2 Struts2 框架......................................................................................................................................- 3 -
2.3 Mybatis 持久层框架 ........................................................................................................................- 4 -
2.4 Mahout..............................................................................................................................................- 4 -
2.5 本章小结 .........................................................................................................................................- 7 -
第 3 章 需求分析..................................................................................................................- 8 -
3.1 课题需求分析 .................................................................................................................................- 8 -
3.2 业务流程图 .....................................................................................................................................- 8 -
3.2.1 科技资源模块基本业务流程图..............................................................................................- 8 -
3.2.2 成果资源模块基本业务流程图..............................................................................................- 9 -
3.2.3 推荐功能业务流程图............................................................................................................- 10 -
3.3 本章小结 .......................................................................................................................................- 10 -
第 4 章 总体设计................................................................................................................- 11 -
4.1 系统总体设计 ...............................................................................................................................- 11 -
4.1.1 系统结构设计........................................................................................................................- 11 -
4.1.2 系统架构设计........................................................................................................................- 12 -
4.1.3 实现推荐功能模块总体设计................................................................................................- 12 -
4.2 科技资源模块数据库设计 ...........................................................................................................- 14 -
4.2.1 概念设计................................................................................................................................- 14 -
4.2.2 逻辑设计................................................................................................................................- 15 -
4.2.3 数据表结构............................................................................................................................- 15 -
4.3 成果资源模块数据库设计 ...........................................................................................................- 17 -
4.3.1 概念设计................................................................................................................................- 17 -
4.3.2 逻辑设计................................................................................................................................- 17 -
4.3.3 数据表结构............................................................................................................................- 18 -
4.4 输入输出设计 ...............................................................................................................................- 19 -
4.5 本章小结 .......................................................................................................................................- 19 -
第 5 章 推荐功能设计与实现............................................................................................- 20 -
5.1 基于 Mahout 推荐系统添加 Mahout 支持...................................................................................- 20 -
5.2 数据库连接 ...................................................................................................................................- 21 -
5.3 创建 DataModel ............................................................................................................................- 22 -
5.4 建立推荐引擎 ...............................................................................................................................- 24 -
5.4.1 基于用户推荐引擎的设计与实现........................................................................................- 24 -
5.4.2 基于物品推荐引擎的设计与实现........................................................................................- 25 -
5.4.3 Svd 推荐引擎的设计与实现..................................................................................................- 26 -
5.5 Action 类中完成推荐功能.............................................................................................................- 27 -
5.6 页面显示 .......................................................................................................................................- 27 -
II
5.7 本章小结 .......................................................................................................................................- 28 -
第 6 章 推荐功能测试........................................................................................................- 29 -
6.1 召回率与查准率 ...........................................................................................................................- 29 -
6.1.1 召回率.....................................................................................................................................- 29 -
6.1.2 查准率.....................................................................................................................................- 29 -
6.2 基于用户的推荐测试 ...................................................................................................................- 30 -
6.3 基于 Svd 的推荐测试...................................................................................................................- 31 -
6.4 三种推荐引擎的测试优化 ...........................................................................................................- 32 -
6.5 本章小结 .......................................................................................................................................- 33 -
第 7 章 总结与展望............................................................................................................- 34 -
7.1 总结 ...............................................................................................................................................- 34 -
7.2 展望 ...............................................................................................................................................- 34 -
参考文献..............................................................................................................................- 35 -
致 谢....................................................................................................................................- 36 -
第 1 章 绪论
- 1 -
第 1 章 绪 论
1.1 研究目的与意义
随着科技的发展,人们的生活水平逐步提高的同时,生活节奏也在慢慢变快,因此
出现一系列网购现象。由于购物网站庞大的数据量,人们很难在有限时间内找到自己喜
爱的物品。慢慢的,人们在浏览商品信息网站时,网站会显示对于该用户可能喜欢物品
的推荐。这是早期的一种推荐,慢慢的推荐功能不再局限于购物网站。新闻,社交等网
站也会推荐给用户他们可能喜欢的资讯。这样的推荐使得人们在寻找自己关心的资源的
同时,短时间内接触到自己可能感兴趣的资源信息,这是一种在当代生活中极大程度提
高信息处理效率的方法。在本系统中,由于科技资源、成果资源信息量庞大,每天推荐
给用户一定量的最近科技资源发布成果,这样不仅提升用户和网站的交互体验,用户也
可以在短时间内浏览更多信息,缩短用户搜索时间,并且更有利于网站资源得到极大程
度的关注和推广。
1.2 研究背景
互联网的出现和普及使得社会的信息量呈爆炸指数上涨,用户每天需要吸收、浏览
大量的信息,这在一定程度上满足了用户在信息爆炸时期对信息的需求。但随着网络的
迅速发展,人们通过转载,分享等等途径极大的促进了信息量的一步步攀升,当持久的
大数据攻击并没有得到数据的优化显示时,用户在每天面对大量信息的时候无法从中获
得对自己真正有用的那部分信息,对信息的使用效率就会降低,这就导致信息超载问题
产生(Grant Ingersoll 2009)。
21 世纪是一个大数据量的时代,越来越多的人关注大数据方面的研究和发展。一个
网站没有好的数据优化功能或是数据库一团乱,不仅网站使用效率降低,更不利于日后
的维护。解决信息超载问题一个十分有效的办法是建立推荐系统, 它是一个依据用户
的喜好、日常浏览记录等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐
系统。推荐系统通过研究用户的兴趣偏好,进行计算,由系统发现用户潜在的个人偏好,
将信息推荐给用户,引导用户发现有用的数据,逐渐的让用户对系统产生依赖。
从一开始 MarkoBalabanovic 等人在同一会议上推出了个性化推荐系统 LIRA 到 2001
年,IBM 公司在其电子商务平台 Websphere 中增加了个性化功能,以便商家开发个性化
电子商务网站。再到 2009 年 7 月,国内首个推荐系统科研团队通过 B2C 网站每天为数
以千万计的消费者提供实时智能的商品推荐。2011 年 9 月,百度世界大会 2011 上,李
彦宏将推荐引擎与云计算、搜索引擎并列为未来互联网重要战略规划以及发展方向。目
前推荐系统现已广泛应用于很多领域,并独立成为一门学科。
基于 Mahout 的推荐系统设计与实现
- 2 -
1.3 研究内容
课题研究基于 Apache 官网的 mahout 开源代码来实现技术转移集成服务平台相关科
技资源、成果资源的推荐功能。主要内容包括:
(1)根据需求分析对网站科技资源模块以及成果资源模块进行总体设计,完成前
端页面布局。
(2)设计科技资源模块及成果资源模块数据库,依次从概念设计和逻辑设计完成
数据表的建立。
(3)确定前端页面编写所用语言以及框架:Jsp 和 Struts2,数据库连接所用到的 JNDI
数据库连接技术。实现科技资源和成果资源模块的基本功能
(4)学习 Mahout 推荐算法并将其应用到科技资源和成果资源模块。
(5)分别对基于用户的推荐、基于物品的推荐、Svd 推荐算法的测试结果进行对
比分析,确定召回率和查准率最优的为网站核心推荐算法。
1.4 本章小结
本章主要介绍基于 Mahout 推荐系统的研究目的与意义、背景以及研究内容,着重
说明了推荐系统对网站发展的重要性和优点,并且概述了研究流程,为系统开发奠定基
础。
第 2 章 相关技术介绍
- 3 -
第2章 相关技术介绍
基于 Mahout 的推荐系统使用了 JSP、Struts 2 框架、Mybatis 持久层框架以及 Mahout
等技术,以下是对这些主要技术的介绍。
2.1 JSP 动态页面编程语言
JSP 全名为 Java Server Pages。JSP 技术要形成 JSP 文件,需通过在网页 HTML 文
件中插入 Java 程序段和 JSP 标记。JSP 是一种动态页面技术,将表现逻辑从 Servlet 中
分离出来是它的主要目的。JSP 具备 Java 技术的简单易用,完全面向对象,同时具有平
台无关性且安全可靠,主要面向因特网的全部特点。
JSP 实现了 Html 语法中的 java 扩张(以<%, %>形式)。JSP 与 Servlet 一样在服务
器端执行的。通常返回给客户端的即是一个 HTML 文本。JSP 的技术根本是 Java Servlet,
Java Servlet 和 JSP 共同配合才能实现大型的 Web 应用程序。
本系统使用 JSP 前端页面编程语言实现和 Action 类的动态交互。
2.2 Struts2 框架
Struts 2 是 Struts 的下一代产物,Struts 2 框架是在 struts 1 和 WebWork 的技术基础
上整合发展而来的。WebWork 是 Struts 2 的核心,通过拦截器的机制来处理用户的请求,
这样的设计使得业务逻辑控制器能够与 ServletAPI 完全脱离开。
Taglib 和页面导航是 Struts 2 优点的集中体现,组件的模块化、灵活性和重用性也
是 Struts 2 的优点,使用 Struts 2 可以帮助我们减少在运用 MVC 设计模型来开发 Web
应用的时间。Struts 2 可以清晰地辨别控制事务逻辑和外观,从而简化开发应用程序的过
程。Struts 2 提供的类使得开发工作非常简单,其中包含:控制程序流程的类、实现和执
行程序事务逻辑的类,自定义的标记库使得创建和验证 HTML 表单更加容易。Struts 配
置文件 struts-config.xml 将 struts 2 组件结合在一起。
基于 Mahout 的推荐系统使用 Struts 2 框架,每一个 Action 类在 Struts 的配置文件都
有一个 name 和 action 类对应,Jsp 页面通过传入的 action 名字在配置文件中找到对应类,
从而让服务器完成用户的请求。例如如下代码将类KjzyTypeAction和action名为kjzytype
连接起来,其中 name 属性是唯一的。Jsp 页面编程时通过在链接中使用 kjzytype 就可以
访问 KjzyTypeAction 类,服务器处理完成后,返回值为 type 时,跳转到 kjzy_type.jsp,
返回值为 zhongzhi 时,跳转到 kjzy_zhongzhi.jsp,返回值为 yangzhi 时,跳转到
kjzy_yangzhi.jsp。
<action name="kjzytype" class="com.transfer.action.kjzy.KjzyTypeAction">
<result name="type" >WEB-INF/jsp/kjzy_webpages/kjzy_type.jsp</result>
<result name="zhongzhi" >WEB-INF/jsp/kjzy_webpages/kjzy_zhongzhi.jsp</result>
基于 Mahout 的推荐系统设计与实现
- 4 -
<result name="yangzhi" >WEB-INF/jsp/kjzy_webpages/kjzy_yangzhi.jsp</result>
</action>
2.3 Mybatis 持久层框架
MyBatis 是一个基于 Java 的持久层框架(apache 开源项目 iBatis)。SQL Maps 和
Data Access Objects(DAO)是 iBATIS 提供的持久层框架。MyBatis 支持普通 SQL 查
询,存储过程和高级映射,同时舍弃了几乎全部的 JDBC 代码和参数的手工设置以及结
果集的检索,使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs
(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。通过 Mybatis 的
三层功能架构:API 接口层、数据处理层、基础支撑层来实现对于数据库的操作。
基于 Mahout 的推荐系统在持久层使用 Mybaits 框架,所有的数据库操作语言都写
在 Mybatis-Config.xml 配置文件中。通过 dao 类的传入参数在配置文件寻找相应 ID,完
成对数据库的操作,实现对数据库数据的增删改查。例如如下代码完成了获取科技资源
全部信息的数据库查询功能,其中 id 是唯一对每一个 SQL 操作的标识,parameterType
是传入参数类型,resultMap 是返回值类型。select 标签中间即为具体操作数据库的 SQL
语句。
<select id="getSciTechResource" parameterType="map" resultMap="sciTechResourceMap">
select *from kjzy_resource T
left outer join kjzy_type TT on T.techretype = TT.tid
left outer join fl_techkind K on T.techrekind=K.kid
order by techretime DESC
limit #{offset},#{pageSize}
</select>
2.4 Mahout
Apache Mahout 是结合机器学习和数据挖掘的一个分布式框架,是由 Apache
Software Foundation 开发的一个全新开源项目。为快速创立可扩展的高性能机器学习应
用建立一个环境是 Mahout 项目的目标。从数据处理能力上,可以将 Mahout 推荐算法划
分为 2 类:单机内存算法实现和基于 Hadoop 的分步式算法实现。本系统数据量在 10G
以内,因此使用单击内存算法实现。
(1)单机内存算法实现:在单机下运行的算法,参数可以自行配置。受限于单机
的资源是单机内存算法的突出问题。对于中等大小的数据,像 1G、10G 的数据量,有
能力进行计算,但超过 100G 的数据量,单机不可能完成该任务。
(2)基于 Hadoop 的分步式算法实现:并行化单机内存算法,将任务分配给多台计
算机一起运行。怎样让单机算法并行化是分步式并行算法的问题。分步式算法还需考虑
许多其他情况,例如多节点数据归并,数据排序,网路通信效率,节点宕机重算,数据
第 2 章 相关技术介绍
- 5 -
分步式存储等(张丹 2013)。
Mahout 的核心推荐算法有很多,本系统实现了三种算法,分别是基于用户推荐算
法、基于物品推荐算法、基于 Svd 推荐算法。下面将以叙述加图示的方法对三个算法的
原理进行介绍。
(1)基于用户的推荐算法原理:基于用户的协同过滤是通过基于用户之间的相似
度给出推荐结果,其中用户间的相似性通过不同用户对物品的打分来判断,然后将和他
偏好相似的其他用户喜欢的物品推荐给该用户。建立为数学模型,即将一个用户对所有
物品的喜好程度作为一个向量来计算用户之间的相似度,找到 N 个邻居后,根据邻居
的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的并且未浏览的物品信
息,计算得到一张有序的物品信息列表作为推荐列表(张丹 2013)。举例说明如图 2-1,
对于用户 A,根据用户的历史打分情况,计算得到一个邻居,为用户 C,然后将用户 C
喜欢的物品 D 推荐给用户 A。
图 2-1 基于用户推荐算法原理图示
(2)基于物品的推荐算法原理:基于物品的协同过滤是通过基于物品之间的相似
度给出推荐结果,其中物品之间的相似性是通过用户对不同物品的评分来判断,然后将
和他之前喜欢的物品相似的物品推荐给用户。基于物品的协同过滤和基于用户的相似,
不过基于物品的协同过滤是将物品本身作为计算邻居时的对象,而不是用户本身。建立
为数学模型,就是将所有用户对某个物品的喜好程度做为一个向量来计算物品之间的相
似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有打分的物品,
计算得到一个有序的物品列表作为推荐列表(张丹 2013)。举例说明如图 2-2,依据所
有用户的历史打分,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相
似,而用户 C 喜欢物品 A,即可推断出用户 C 可能也喜欢物品 C。
基于 Mahout 的推荐系统设计与实现
- 6 -
图 2-2 基于物品推荐算法原理图示
(3)基于 Svd 的推荐算法原理:Svd 推荐算法使用矩阵分解,投影用户和项目到
一个特征空间。
Mahout 已提供大量功能,特别是在集群和 CF 方面。Mahout 的主要特性包括:
Taste CF(马春娥和赵晨婷 2010)。Taste 是 Apache Mahout 提供的一个协同过滤算法的高
效实现,基于 Java 实现的可扩展的,高效的推荐引擎。Taste 支持基于用户和基于项目
的推荐,并且提供了许多推荐选项和用于自定义的界面(Jerome.rong 2012)。Taste 的
设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
Taste 由以下四个主要的组件组成:
(1)DataModel:DataModel 是用户偏好信息的抽象接口,它的具体实现支持从任
何类型的数据源提取用户偏好信息。Taste 提供 JDBCDataModel 和 FileDataModel,分别
支持从数据库和文件中读取用户的喜好信息。
(2)UserSimilarity 和 ItemSimilarity:UserSimilarity 是基于用户协同过滤推荐引擎
的核心部分,用于定义两个用户间的相似度,计算用户的“邻居”,邻居即为与当前用户
口味相似的用户。ItemSimilarity 类似的,计算内容之间的相似度。
(3)UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找
到与当前用户偏好程度类似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定
邻居用户的方法,基于 UserSimilarity 计算来实现。
(4)Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。
程序中,将 DataModel 做为参数传给 Recommeder 接口的 recommed()方法就可以计算出
对不同用户的推荐内容。实际应用中,主要实现 GenericUserBasedRecommender 或者
GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推
第 2 章 相关技术介绍
- 7 -
荐引擎。
以上四个组件的数据流如图 2-3 所示,首先将数据表映射为数据模型(DataModel),
第一步,将数据模型作为参数传给 UserSimilarity 计算用户相似度;第二步,将数据模
型和用户相似度作为参数传递给 UserNeighborhood 计算得到用户的邻居用户;第三部,
将数据模型、用户相似度以及用户邻居共同传给 Recommender 接口得到推荐结果返回
给 JSP 页面。
图 2-3 Taste 组件数据流
开发者可以构建庞大的推荐系统,基于这些组件,提供实时或者离线的推荐功能。
实时的推荐经常只能处理数千用户,而离线推荐具有更好的适用性(Bornhe 2012)。
2.5 本章小结
本章介绍了在开发时所用到的相关技术。基本技术方面,集中介绍了 JSP 动态页面
编程语言、Struts2 框架以及 Mybatis 框架。推荐功能技术方面着重介绍了推荐功能实现
方面的核心技术:Mahout,介绍了本系统选取的数据处理方式以及三种核心算法的原理。
同时通过数据流传递的方式对 Taste 推荐引擎核心四组件运行原理进行阐述。
基于 Mahout 的推荐系统设计与实现
- 8 -
第 3 章 需求分析
3.1 课题需求分析
基于 Mahout 的推荐系统依托国家“十二五”科技支撑计划课题《技术转移集成服
务平台建设与示范》,设计与实现该课题下科技资源模块和成果资源模块的推荐功能。
我国是一个农业大国,农业是安天下、稳民心的战略产业,用信息技术改造和提升
传统农业是发展农业的必由之路,也是党的十七届三中全会关于农村问题的具体要求。
但目前,我国西部农村经济不富裕,农民收入不够高,农民获取农业信息的手段与途径
还比较传统,特别是偏远农村农民的科学素养还不够高,便捷获取科技信息的渠道不够
畅通。基层科技部门普遍存在科技资源不足,科技资源分散,科技服务能力弱的问题。
杨凌示范区经过十多年的快速发展,农业科技队伍、科技成果和推广服务体系已进一步
强化,在用科技服务现代农业和促进农民增收方面走在全国前列。示范区农业科技信息
服务网络在科技服务中发挥了应有作用,但其硬件平台、科技信息资源和农业科技服务
等方面,与国家级高新技术产业示范区的应用需求不相适应。迫切需要建设快捷、高效
地农业科技成果服务平台,为农业科技人员、基层农技人员和农户提供多通道科技网络
化服务。
在农业平台慢慢发展之后,研究农业科技的专家学者越来越多,在农业方面的科技
资源,成果资源相继发布。作为一个集中展示科技资源和成果资源的平台,如何便利的
让专家学者或是普通用户浏览到跟自己研究内容相关的农业资讯是网站优化开发的方
向,并且这也是目前用户对网站有极大需求的方面。
围绕上述问题,本课题以农业增效带动农民增收农村富裕为目标,以提高农民的农
业科技素养和科技能力为入手,以现代化新农村信息化服务和国家农业高新技术产业示
范区、农业和农民生产、经营、管理信息化中的关键问题为载体,开展技术转移集成服
务平台构建与示范,并完成更高层次推荐功能的实现。基本需求如下:
⑴ 分析现有农业科技资源,成果资源模型,建立基于专家发布的农业科技资源、
成果资源展示平台。
⑵ 建设有推荐农业科技资源、成果资源功能的展示平台。
3.2 业务流程图
3.2.1 科技资源模块基本业务流程图
科技资源模块基本业务:用户进行登录操作,接着进入科技资源模块首页,浏览各
个属性分类下的科技资源条目信息,点击标题链接查看各科技资源详细信息。如图 3-1
所示。
第 3 章 需求分析
- 9 -
图 3-1 科技资源模块业务流程图
3.2.2 成果资源模块基本业务流程图
成果资源模块基本业务:用户进行登录操作,接着进入成果资源模块首页,浏览各
属性分类下的成果资源条目信息,点击标题链接查看每个成果资源详细信息。如图 3-2
所示。
图 3-2 成果资源模块业务流程图
基于 Mahout 的推荐系统设计与实现
- 10 -
3.2.3 推荐功能业务流程图
根据网站总体设计,用户进入网站首页后,需进行登录操作,之后网站会在用户点
击进入各模块时传输用户 ID,根据用户以往对网站内同类资源的偏好进行计算,推荐
出用户可能喜欢的信息。
用户点击进入科技资源首页面后,根据传递的用户 ID 参数,计算用户对科技资源
的偏好,并在科技资源首页面以弹窗形式显示推荐内容。用户点击进入成果资源首页面
后,根据传递的用户 ID 参数,计算用户对成果资源的偏好,并在成果资源首页面以弹
窗形式显示推荐内容。如图 3-3 所示。
图 3-3 推荐业务流程图
3.3 本章小结
本章首先从需求分析的角度强调了基于 Mahout 推荐系统开发在农业领域的必要
性,强调了网站用户对系统的基本需求。其次通过分模块分功能的方式,将科技资源模
块基本功能、成果资源模块基本功能、推荐功能业务流程简单概述,并相应配以流程图
展示。
第 4 章 总体设计
- 11 -
第 4 章 总体设计
4.1 系统总体设计
4.1.1 系统结构设计
基于 Mahout 的推荐系统使用浏览器/服务器模式,即 B/S 结构。用户通过操作 Web
浏览器完成相应操作,这种模式统一了客户端。连接 Web 浏览器和底层数据库的核心
是服务器,在服务器上集中实现系统功能的核心部分。这样简单的模式简化了系统的开
发、维护和使用。用户只需在自己的电脑上安装浏览器,例如 Internet Explorer 或 FireFox
等即可通过输入网站 URL 地址访问网站。服务期上安装所使用的数据库即可,本网站使
用的是 MYSQL 数据库。浏览器通过 Web Server 同数据库进行数据交互。
因为 B/S 结构建立在广域网之上,不需要专门的网络硬件环境,比 C/S 有更好的适
应范围,因此选择 B/S 结构而非 C/S 结构。此外,B/S 结构可以面向不同的用户群,分
散地区,其结构实现系统的无缝升级,系统维护花费减到最小。用户自己从网上下载安
装即可实现升级。由于 B/S 结构建立在浏览器上,可以以更加丰富和生动的表现形式与
用户交互。
浏览器/服务器模式主要包含以下三个主要内容:
(1)Web 浏览器。主要完成用户和网站的交互,例如用户在文本框输入所要查询
的数据,浏览器将用户的输入参数传给服务器进行计算,将得到的结果通过 HTML 转
码以文字或图片的形式呈现给用户。
(2)Web 服务器。实现系统功能的核心,并且及时接收 Web 浏览器发来的请求,
处理数据,生成一段 HTML 代码,返回给浏览器。同时,如果涉及到数据库操作,服
务器还需要对数据库进行访问,及时进行增删改查等操作。
(3)数据库。主要根据服务器发来的指示管理数据库。
Mahout 的推荐系统总体结构如图 4-1 所示:
图 4-1 Mahout 的推荐系统总体结构图
基于 Mahout 的推荐系统设计与实现
- 12 -
4.1.2 系统架构设计
基于 Mahout 的推荐系统使用 Jsp+Struts2+Mybatis 模式,架构模式如图 4-2 所示:
图 4-2 Mahout 的推荐系统架构图
4.1.3 实现推荐功能模块总体设计
Mahout 的推荐系统分为两个模块:科技资源模块、成果资源模块。科技资源模块展
示包括专家视频库、广播讲座稿、专家文稿库 3 个栏目以及短信库、三农咨询库相关信
息。成果资源模块展示各分类资源的详细信息。
(1)科技资源模块分为三级页面,一级页面即科技资源首页面,该页面显示所有
分类的信息,并在每条分类下显示 8 条科技资源数据。用户点击科技资源标题链接显示
详细信息,到达三级页面。此时若用户已经对该项目打分,则显示分数,否则显示打分
文本框,用户可以选择打分或不打分,打分之后点击提交即存入数据库。用户打分的好
处是可以有利于系统计算用户偏好,推荐给其更加准确的资源信息。科技资源模块推荐
功能流程如图 4-3 所示。
第 4 章 总体设计
- 13 -
图 4-3 科技资源模块推荐流程图
(2)成果资源模块是从数据库里提取成果资源信息以卡片形式显示在页面上,用
户可通过选择成果资源农作物的分类来异步刷新网页,显示不同分类下的成果资源信
息。用户进入成果资源首页面,右下角弹窗显示推荐内容,首页面每条成果资源信息的
卡片上有关注按钮,用户点击关注按钮会增加服务器计算用户偏好程度的准确率,用户
也可以选择不关注。成果资源模块推荐功能流程如图 4-4 所示。
基于 Mahout 的推荐系统设计与实现
- 14 -
图 4-4 成果资源模块推荐流程图
4.2 科技资源模块数据库设计
4.2.1 概念设计
概念设计阶段是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,
形成一个独立于具体 DBMS 的概念模型。目标是生成相应的 E-R 图,方法采用混合策
略,即自顶向下地进行需求分析,然后再自底向上的设计概念结构。
科技资源模块实现推荐需要有科技资源、用户对科技资源的打分表、以及用户。科
技资源推荐模块 E-R 图如图 4-5 所示:
图 4-5 科技资源推荐模块 E-R 图
第 4 章 总体设计
- 15 -
4.2.2 逻辑设计
逻辑结构设计的任务是把概念结构设计阶段设计好的基本 E-R 图转换为与选用的
DBMS 产品所支持的数据模型相符合的逻辑结构。目标是产生逻辑结构。
方法:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关
系、网状、层次模型向特定 DBMS 支持下的数据模型转换;(3)对数据模型进行优化。
建立关系模式,首先将各实体转换为关系模式。
(1)将科技资源实体转换为一个关系模式。科技资源实体的属性就是关系的属性,
科技资源实体的码就是关系的码,转换的关系模式如下:
kjzy_resource(U,F)
U={techreid,techretitle,techretime,techrekind,techretype,techresource,techreauthor,isgood,te
chreaddr,techreintroduction}
F={techreid→techretitle,techreid→techretime,techreid→techrekind,techreid→techretype,tech
reid→techresource,techreid→techreauthor,techreid→isgood,techreid→techreaddr,techreid→tech
reintroduction}
(2)将用户实体转换为一个关系模式。用户实体的属性就是关系的属性,用户实
体的码就是关系的码,转换的关系模式如下:
yh_login(U,F)
U={uno,upass,utype,ustop,id,uname,loginip,VCard}
F={uno→upass,uno→utype,uno→ustop,uno→id,uno→uname,uno→loginip,uno→VCard}
F={Gno→Gname,Gno→Gsize,Gno→Gbr,Gno→Gseason}
其次将涉及联系转换的实体转换为关系模式。将 1:n 的打分关系保存为偏好表转换
为一个关系模式,与该联系相连接的科技资源实体和用户实体的码、该联系本身的属性
以及偏好表实体的属性构成关系的属性,科技资源实体和用户实体的码作为外码,偏好
表的码就是关系的码。转换后最终的关系模式如下:
kjzy_preferences(U,F)
U={pno,userID,kjzyID,preference,timestamp}
F={pno→userID, pno→kjzyID,pno→preference, pno→timestamp}
4.2.3 数据表结构
(1)kjzy_resourece(科技资源)表主要用来保存每一条科技资源信息。该表的结
构如表 4-1 所示。
表 4-1 表 kjzy_resource 结构
列名 数据类型 长度 允许空
科技资源 ID int 11 否
科技资源标题 varchar 50 是
基于 Mahout 的推荐系统设计与实现
- 16 -
科技资源发表时间 datetime 0 是
科技资源分类 varchar 10 是
科技资源属性 int 11 是
科技资源来源 varchar 50 是
科技资源作者 varchar 50 是
科技资源附件保存地
址
int 11 是
是否好评 varchar 200 是
科技资源简介 text 0 是
(2)yh_login(用户)表主要用来保存用户注册的信息。该表的结构如表 4-2 所示。
表 4-2 表 yh_login 结构
列名 数据类型 长度 允许空
登录名 varchar 50 否
登录密码 varchar 50 是
用户类型 int 11 是
用户 ID int 11 否
用户姓名 varchar 50 是
登录 ip varchar 50 是
VCard longtext 0 是
(3)kjzy_preferences(科技资源偏好)表用来记录用户对每一条科技资源的打分
信息。该表的结构如表 4-3 所示。
表 4-3 kjzy_preferences 结构
列名 数据类型 长度 允许空
用户 ID int 11 否
科技资源 ID int 11 否
偏好 int 11 否
第 4 章 总体设计
- 17 -
4.3 成果资源模块数据库设计
4.3.1 概念设计
概念设计阶段是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象,
形成一个独立于具体 DBMS 的概念模型。目标是生成相应的 E-R 图,方法是采用混合
策略,即自顶向下地进行需求分析,然后再自底向上的设计概念结构。
成果资源模块实现推荐需要有成果资源、用户对成果资源资源的打分表、以及用户。
成果资源推荐模块 E-R 图如图 4-6 所示:
图 4-6 成果资源模块 E-R 图
4.3.2 逻辑设计
逻辑结构设计的任务是把概念结构设计阶段设计好的基本 E-R 图转换为与选用的
DBMS 产品所支持的数据模型相符合的逻辑结构。目标是产生逻辑结构。
方法:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关
系、网状、层次模型向特定 DBMS 支持下的数据模型转换;(3)对数据模型进行优化。
建立关系模式,首先将各实体转换为关系模式。
(1)将成果资源实体转换为一个关系模式。成果资源实体的属性就是关系的属性,
成果资源实体的码就是关系的码,转换的关系模式如下:
cg_achieve(U,F)
U={said,kind_id,achtitle,achtype,achtechdegree,achcontent,user_id,achauthor,achclick,achre
lease,isverify}
F={said→kind_id,said→achtitle,said→achtype,said→achtechdegree,said→achcontent,said
→user_id,said→achauthor,said→achclick,said→achrelease,said→isverify}
基于 Mahout 的推荐系统设计与实现
- 18 -
(2)将用户实体转换为一个关系模式。用户实体的属性就是关系的属性,用户实
体的码就是关系的码,转换的关系模式如下:
yh_login(U,F)
U={uno,upass,utype,ustop,id,uname,loginip,VCard}
F={uno→upass,uno→utype,uno→ustop,uno→id,uno→uname,uno→loginip,uno→VCard}
F={Gno→Gname,Gno→Gsize,Gno→Gbr,Gno→Gseason}
其次将涉及联系转换的实体转换为关系模式。将 1:n 的打分关系保存为偏好表转换
为一个关系模式,与该联系相连接的成果资源实体和用户实体的码、该联系本身的属性
以及偏好表实体的属性构成关系的属性,成果资源实体和用户实体的码作为外码,偏好
表的码就是关系的码。转换后最终的关系模式如下:
cg_preferences(U,F)
U={pno,userID,cgID,preference,timestamp}
F={pno→userID, pno→cgID,pno→preference, pno→timestamp}
4.3.3 数据表结构
(1)cg_achieve(成果资源)表主要用来保存每一条成果资源信息。该表的结构如
表 3-4 所示。
表 4-4 表 cg_achieve 结构
列名 数据类型 长度 允许空
成果资源 ID int 11 否
成果资源分类 varchar 20 是
成果资源标题 varchar 100 否
成果资源属性 varchar 100 是
成果资源等级 varchar 100 是
成果资源内容 text 0 是
用户 ID int 11 是
成果资源作者 varchar 50 是
成果资源点击量 int 11 是
成果资源发表时间 varchar 50 是
是否认证 int 11 是
(2)yh_login(用户)表主要用来保存用户注册的信息。该表的结构如表 3-5 所示。
表 4-5 表 yh_login 结构
列名 数据类型 长度 允许空
第 4 章 总体设计
- 19 -
登录名 varchar 50 否
登录密码 varchar 50 是
用户类型 int 11 是
用户 ID int 11 否
用户姓名 varchar 50 是
登录 ip varchar 50 是
VCard longtext 0 是
(3)cg_preferences(科技资源偏好)表用来记录用户对每一条科技资源的打分信
息。该表的结构如表 3-6 所示。
表 4-6 cg_preferences 结构
列名 数据类型 长度 允许空
用户 ID int 11 否
成果资源 ID int 11 否
偏好 int 11 否
4.4 输入输出设计
基于 mahout 的推荐系统通过在首页面用户进行登录操作,以此来获取用户 ID,从
而根据用户的偏好推荐内容。因此,数据输入方式为用户在文本框中输入数据,点击登
录将数据传给服务器进行数据校验,如果用户名和密码不符,则登录不成功,否则,成
功登录。数据输出为用户点击科技资源链接或成果资源服务器返回的推荐内容。
4.5 本章小结
本章主要从系统总体设计、数据库设计以及输入输出设计三方面对系统前期框架搭
建,数据模型做了详细介绍。首先,系统总体设计主要包括系统结构设计、架构设计以
及推荐功能模块总体设计三方面。结构方面,着重介绍了两层浏览器服务器模式;架构
方面,介绍了 Jsp+Struts2+Mybatis 框架,该框架是系统运行、数据传输响应、浏览器和
服务器交互的基础。其次,按概念设计、逻辑设计、数据表结构的次序详细描述了数据
库的建立过程。通过概念设计得到各模块的全局 E-R 图,通过逻辑设计得到各模块所涉
及数据表的关系模式,通过展示数据表结构最后确定数据表的建立。最后,输入输出设
计 简 述 系 统 的 传 入 参 数 及 返 回 结 果 的 交 互 。
基于 Mahout 的推荐系统设计与实现
- 20 -
第 5 章 推荐功能设计与实现
基于 Mahout 的推荐系统设计与实现主要是针对网站科技资源以及成果资源模块,
即推荐科技资源信息和成果资源信息给用户。在本章介绍推荐功能的设计与实现流程
时,以科技资源模块为例进行叙述。
5.1 基于 Mahout 推荐系统添加 Mahout 支持
根据系统的应用范围和使用者来看,数据量不会很巨大,在单击内存的情况下完全
可以进行有效的数据处理,因此选择 Mahout 的单击内存实现算法。这样,开发中只需
要考虑算法,数据结构、内存和 CPU,相对易操作。
单击内存算法实现:在项目工程的 build path 下选择 add external jars 来添加所需要
的 Mahout jar 包。
首先在 Apache Mahout 官网下载有关 Mahout 的 jar 包。系统开发中引入以下核心
Mahout 开发 jar 包:
”mahout-core-0.4.jar”,”mahout-math-0.7.jar”、”guava-r07.jar”,”uncommons-math
-1.2.jar”,”commons-math-1.2.jar”,”commons-logging-1.0.4.jar”,”commons-discovery-0
.2.jar”,”axis-wsdl4j-1.5.1.jar”,”axis-saaj-1.4.jar”,”axis-jaxrpc-1.4.jar”,”axis-1.4.jar”。
(1)在项目上单击右键选择 build path,选择 configure build path,显示窗口如图 5-1
所示:
图 5-1 configure build path 窗口
第 5 章 推荐功能设计与实现
- 21 -
(2)选择窗口右侧 Add External JARs 按钮,将下载好的有关 Mahout jar 文件添加
进来即可。在项目工程下 Referenced Libraries 可看到 Mahout jar 包,如图 5-2 所示,就
成功的在本系统中添加了 Mahout 支持。
图 5-2 技术转移集成服务平台 Referenced Libraries 部分截图
5.2 数据库连接
基于 Mahout 推荐系统使用 JNDI 连接池技术进行数据库连接。
在 tomcat 文件夹下找到 server.xml 文件,添加一段 DBCP,这个是针对 tomcat 的,
设置好以后就可以使用了。相关代码如下,其中 maxActive 为最大连接数,maxIdle 为最
小连接数。
<Context path="/transfer" docBase="D:tomcat6apache-tomcat-6.0.20apache-tomcat-6.0.20
webappstransfer" reloadable="true">
<Resource name="jdbc/transfer"
auth="Container"
type="javax.sql.DataSource"
username="root"
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/transfer"
maxActive="15"
maxIdle="7"
defaultTransactionIsolation="READ_COMMITTED"
validationQuery="Select 1" />
</Context>
建立公共类 DButil,在该类中通过 JNDI 获取连接池。利用 Context context = new
InitialContext()获取 JNDI 的上下文对象 Context,然后根据名称和资源的绑定来获取数
基于 Mahout 的推荐系统设计与实现
- 22 -
据源连接池:context.lookup("java:comp/env/jdbc/transfer"),其中 java:/com/env 是 tomcat
实现 JNDI 的路径,后边是连接池名字。相关代码如下:
......
private static DataSource ds;
public static void createDataSource() throws Exception {
try {
Context context = new InitialContext();
ds = (DataSource)context.lookup("java:comp/env/jdbc/transfer");
......
}
......
}
......
在创建好之后,通过 dataSource.getConnection()获取数据库的一个连接。
public static Connection getConnection(){
DataSource dataSource = getDataSource();
try {
return dataSource.getConnection();
} catch (SQLException e) { e.printStackTrace();}
return null;
}
这样就可以使用数据库。
5.3 创建 DataModel
(1)首先将数据库中设计科技资源推荐的两张数据表 kjzy_resource、kjzy_preference
映射到类中,相应生成类 Kjzy_resource 和 Rating_kjzy。例如类 Kjzy_resource,抽取数
据库表 kjzy_resource 的 techreid、techretitle、techretime、techreauthor 四个数据项作为
Kjzy_resource 的类属性,并且添加 get()、set()方法。相关代码如下:
......
private int techreid;
private String techretitle;
private String techretime;
private String techreauthor;
private String techretype;
public String getTechretype() {return techretype;}
public void setTechretype(String techretype) {this.techretype = techretype;}
public int getTechreid() {return techreid;}
public void setTechreid(int techreid) {this.techreid = techreid;}
public String getTechretitle() {return techretitle;}
第 5 章 推荐功能设计与实现
- 23 -
public void setTechretitle(String techretitle){this.techretitle = techretitle;}
public String getTechretime() {return techretime;}
public void setTechretime(String techretime) {this.techretime = techretime;}
public String getTechreauthor() {return techreauthor;}
public void setTechreauthor(String techreauthor{this.techreauthor = techreauthor;}
......
(2)创建 RecommendKjzy_resource 类,将每一个 Kjzy_resource 实体和用户的打分
score 一一联系起来。相关代码如下:
......
private Kjzy_resource kjzy_resource;
private float value;
public RecommendKjzy_resource(Kjzy_resource kjzy_resource, float value){this.kjzy_
resource = kjzy_resource;this.value = value;}
public Kjzy_resource getKjzy_resource() {return kjzy_resource;}
public void setKjzy_resource(Kjzy_resource kjzyResource) { kjzy_resource = kjzyResource;}
public float getValue() {return value;}
public void setValue(float value) {this.value = value;}
......
(3)创建 RecommendKjzy_resourceList 类,该类将 RecommendKjzy_resource 实体
组成一个 list 用于接收推荐返回的数据集。其中该类的构造函数实现了将 Mahout 推荐
结果返回值为RecommendItem 类型的list 转化为类型为 RecommendKjzy_resource 的list,
便于处理返回的数据集。构造函数代码如下:
public RecommendKjzy_resourceList(List<RecommendedItem> items){
List<String> kjzyIDList = new ArrayList<String>();
for (RecommendedItem item : items){
kjzyIDList.add(String.valueOf(item.getItemID()));
}
Map<String, Kjzy_resource> kjzy_resources = Kjzy_resourceTable.getKjzy
_resourceMap(kjzyIDList)
for (RecommendedItem item : items){
String kjzyID = String.valueOf(item.getItemID());
Kjzy_resource kjzy_resource=kjzy_resources.get(kjzyID);
if(kjzy_resource != null){
RecommendKjzy_resource rm = new
RecommendKjzy_resource(kjzy_resource, item.getValue());
recommendKjzy_resources.add(rm);
}
}
}
以上三个实体类之间的关系如图 5-3 所示:
基于 Mahout 的推荐系统设计与实现
- 24 -
图 5-3 科技资源类图关系
接下来建立 kjzy_resource 表的 dataModel,生成 Kjzy_resourceDataModel 类。该类继
承 MySQLJDBCDataModel,该类的构造函数继承 MySQLJDBCDataModel 类的构造函
数。相关代码如下,DBUtil.getDataSource() 将返回应用的数据源,此应用是 J2EE 应用,
所以这里会采用 JDNI 的方式创建数据库链接。
public Kjzy_resourceDataModel() {
super(DBUtil.getDataSource(), PERFERENCETABLE, USERID_COLUMN,
ITEMID_COLUMN, PERFERENCE_COLUMN, TIMESTAMP_COLUMN);
}
其中 PERFERENCETABLE、USERID_COLUMN、 ITEMID_COLUMN、PERFER
ENCE_COLUMN 分别对应 kjzy_preference 表名、kjzy_preference 表内数据项 userID、
kjzyID、preference。
5.4 建立推荐引擎
5.4.1 基于用户推荐引擎的设计与实现
(1)基于 Mahout 编写基于用户的优化推荐算法,建立 UserBasedRecommender 类,
该类完成基于用户推荐的核心算法。核心代码如下:
public UserBasedRecommender(DataModel model) throws TasteException {
UserSimilarity userSimilarity = new
PearsonCorrelationSimilarity(model);
userSimilarity.setPreferenceInferrer(new
AveragingPreferenceInferrer(model));
UserNeighborhood neighborhood =new NearestNUserNeighborhood(3,
userSimilarity, model);
recommender = new CachingRecommender(new
第 5 章 推荐功能设计与实现
- 25 -
GenericUserBasedRecommender(model, neighborhood, userSimilarity));
}
① UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model),我选用的
是基于 Pearson correlation(The Apache Software Foundation 2008)来计算用户相似度的
方法得到用户相似度。
② userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(model))利用
AveragingPreferenceInferrer 类推断当用户并没有表现出任何偏好时,用户对资源的打
分,这可能是该用户对其他资源的打分所得的平均分。这种技术有时被称为“缺席投
票”。
③ UserNeighborhood neighborhood =new NearestNUserNeighborhood(3,userSimilari
ty, model)计算用户的邻居用户,我根据用户相似度计算出最邻近的 3 个用户作为推荐
用户。
④ GenericUserBasedRecommender(model, neighborhood, userSimilarity),将以上得到
邻居用户neighborhood、用户相似度userSimilarity以及dataModel作为GenericUserBased
Recommender 的构造参数传入,这样就完成了一个基于用户推荐引擎的编写。
(2)建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始
化、实例化。将 UserBasedRecommender 类的地址作为参数传入 Kjzy_resourceRecommend
erSingleton 的构造函数,通过函数 asSubclass()将调用这个方法的 UserBasedRecommender
.class 对象转换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以
在其他类使用自己编写的基于用户的推荐引擎。相关代码如下:
private Kjzy_resourceRecommenderSingleton(String recommenderClassName){
......
recommender =Class.forName(recommenderClassName).asSubclass(
Recommender.class).newInstance();
......
}
5.4.2 基于物品推荐引擎的设计与实现
(1)基于 Mahout 编写基于物品的优化推荐算法,建立 ItemBasedRecommender 类,
该类完成基于用户推荐的核心算法。核心代码如下:
public ItemBasedRecommender(DataModel model) throws TasteException {
ItemSimilarity itemSimilarity =new EuclideanDistanceSimilarity(model);
recommender = new CachingRecommender(new
GenericItemBasedRecommender(model, itemSimilarity));
}
① ItemSimilarity itemSimilarity =new EuclideanDistanceSimilarity(model)我选用的是
基于 Mahout 的推荐系统设计与实现
- 26 -
基于 Euclidean "distance"(The Apache Software Foundation 2008)来计算物品相似度的
方法得到物品相似度。这个相似度的计算基于两个用户之间的 X 和 Y,把用户想成尺寸,
把用户的偏好想成点,距离的计算使用那些两个用户对同一物品偏好表述的物品来计
算。
② GenericItemBasedRecommender(model, itemSimilarity)将得到的物品相似度以及
dataModel 作为 GenericItemBasedRecommender 的构造参数传入,这样就完成了一个基
于物品推荐引擎的编写。
(2)建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始
化、实例化。将 ItemBasedRecommender 类的地址作为参数传入 Kjzy_resourceRecomme
nderSingleton 的构造函数,通过函数 asSubclass()将调用这个方法 ItemBasedRecommender
.class 对象转换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以
在其他类使用自己编写的基于用户的推荐引擎。相关代码如下:
private Kjzy_resourceRecommenderSingleton(String recommenderClassName){
......
recommender =Class.forName(recommenderClassName).asSubclass(
Recommender.class).newInstance();
......
}
5.4.3 Svd 推荐引擎的设计与实现
(1)基于 Mahout 编写基于 Svd 算法的优化推荐算法,建立 SvdRecommender 类,
该类完成基于 Svd 算法推荐的核心算法。核心代码如下:
public SvdRecommender(DataModel model) throws TasteException {
recommender = new CachingRecommender(new SVDRecommender(model,7,10));
}
SVDRecommender(model,7,10)中 Svd 推荐算法使用矩阵分解,投影用户和项目到一
个特征空间(The Apache Software Foundation 2008)。其中第二个整型参数表示特征值
数量(numFeatures),第三个整型参数表示初始步数(initialSteps)。将这两个自己设定的参
数以及 dataModel 作为 SVDRecommender 的构造参数传入,就完成了一个 Svd 推荐引
擎的编写。
(2) 建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始
化、实例化。将 SvdRecommender 类的地址作为参数传入 Kjzy_resourceRecommenderSin
gleton 的构造函数,通过函数 asSubclass()将调用这个方法 SvdRecommender.class 对象转
换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以在其他类使用
自己编写的基于用户的推荐引擎。相关代码如下:
private Kjzy_resourceRecommenderSingleton(String recommenderClassName){
第 5 章 推荐功能设计与实现
- 27 -
......
recommender =Class.forName(recommenderClassName).asSubclass(
Recommender.class).newInstance();
......
}
5.5 Action 类中完成推荐功能
(1)实例化推荐引擎。代码如下:
Kjzy_resourceRecommenderSingleton.initializeIfNeeded("com.transfer.mahout.recommendat
ion.SvdRecommender");
recommender = Kjzy_resourceRecommenderSingleton.getInstance().getRecommender();
(2)通过 recommend()方法实现推荐并返回结果,howMany 表示推荐多少个。代
码如下:
List<RecommendedItem> items = recommender.recommend(userID1, howMany);
(3)将 RecommendItem 类型的返回值转换成 RecommendKjzy_resource 类型,最终
将 RecommendKjzy_resource 类型的 list 作为返回值给前端页面。代码如下:
RecommendKjzy_resourceList kjzy_resourceList = new RecommendKjzy_resourceList(item
s);
recommendKjzy_resources=kjzy_resourceList.getRecommendKjzy_resources();
5.6 页面显示
在 前 端 jsp 页 面 通 过 <s:iterator value="recommendKjzy_resources" id="entry">
</s:iterator> 获取推荐信息并显示。其中 value 值和 Action 类中最为返回值的 list 表名一
致。通过<s:property value="kjzy_resource.techreid"/>获取科技资源的相关信息显示在页
面。图 5-4 显示了推荐功能的页面显示:
图 5-4 前端页面显示
基于 Mahout 的推荐系统设计与实现
- 28 -
5.7 本章小结
本章详细的介绍了系统推荐功能的开发流程。首先在系统搭建好的架构中添加
Mahout 支持,接着建立数据库连接,创建数据模型。然后着重描述了三种核心推荐算
法的实现以及相关代码展示。最后介绍了如何将推荐结果返回给前台页面,并配图显示
页面推荐结果展示效果。
第 6 章 推荐功能测试
- 29 -
第 6 章 推荐功能测试
6.1 召回率与查准率
Mahout 提供了 2 个评估推荐器的指标,查准率和召回率,这两个指标是搜索引擎
中经典的度量方法。
6.1.1 召回率
召回率(Recall)是相关被检索到的结果集除以相关的被检索到的结果集和相关的未
被检索到的结果集之和的百分比,召回率越大越好(张丹 2013)。如图 6-1 以图的形
式简单明了的说明了召回率的概念。
图 6-1 召回率图示
6.1.2 查准率
查准率(precision)是不相关被检索到的结果集除以不相关的被检索到的结果集和相
关的被检索到的结果集之和的百分比,查准率越大越好(张丹 2013)。如图 6-2 以图
的形式简单明了的说明了查准率的概念。
图 6-2 查准率图示
基于 Mahout 的推荐系统设计与实现
- 30 -
6.2 基于用户的推荐测试
基于用户的推荐算法主要在求取被推荐用户的邻居用户处进行测试比较其返回推
荐结果集的召回率、查准率以及 AVERAGE_ABSOLUTE_DIFFERENCE。通过前一节
对 召 回 率 以 及 查 准 率 的 介 绍 , 召 回 率 以 及 查 准 率 越 大 越 好 , 而
AVERAGE_ABSOLUTE_DIFFERENCE 越 低 越 好 。 测 试 部 分 主 要 是 针 对 语 句 :
NearestNUserNeighborhood(3, userSimilarity, model),通过改变推荐用户数量来选择最优
的做为用户推荐算法的邻居推荐。
(1)推荐 5 个邻居用户,即 NearestNUserNeighborhood(5, userSimilarity, model)。
测试结果如图 6-3 所示,AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.7042,但在计算
召回率和查准率时抛出异常:NaN,原因是因为数据库中用户偏好表中和被推荐用户偏好
一致的不足 5 人。
图 6-3 推荐 5 邻居用户结果
(2)推荐 4 个邻居用户,即 NearestNUserNeighborhood(4, userSimilarity, model)。
测 试 结 果 如 图 6-4 所 示 , 召 回 率 约 为 0.3333 、 查 准 率 为 0.25 、
AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9511。
图 6-4 推荐 4 邻居用户结果
(3)推荐 3 个邻居用户,即 NearestNUserNeighborhood(3, userSimilarity, model)。
测 试 结 果 如 图 6-5 所 示 , 召 回 率 约 为 0.3333 、 查 准 率 约 为 0.6667 、
AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.0277。
图 6-5 推荐 3 邻居用户结果
(4)推荐 2 个邻居用户,即 NearestNUserNeighborhood(2, userSimilarity, model)。
测 试 结 果 如 图 6-6 所 示 , 召 回 率 为 0.125 、 查 准 率 为 0.5 、
AVERAGE_ABSOLUTE_DIFFERENCE 为 2.5。
第 6 章 推荐功能测试
- 31 -
图 6-6 推荐 2 邻居结果
(5)推荐 1 个邻居用户,即 NearestNUserNeighborhood(1, userSimilarity, model)。
测试结果如图 6-7 所示,AVERAGE_ABSOLUTE_DIFFERENCE 为 1.0,但在计算查准
率和召回率时再次显示异常:NaN,推荐的邻居数量太少,推荐结果极其不稳定。
图 6-7 推荐 1 邻居结果
由 上 述 结 果 可 以 看 出 推 荐 邻 居 数 量 为 3 的 时 候 ,
AVERAGE_ABSOLUTE_DIFFERENCE 值最小,表示越精确,并且 precision 值也是最
大的。因此在基于用户的推荐引擎实现时设定推荐邻居数量为 3。
6.3 基于 Svd 的推荐测试
基于 Svd 的推荐测试通过更改特征值数量来进行测试,选出最优的结果。
(1)特征数量为 10,即 SVDRecommender(model,10,10)。测试结果如图 6-8 所示,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1750,召回率为 0.375,查准率为 0.375。
图 6-8 特征数量为 10 的测试结果
(2)特征数量为 9,即 SVDRecommender(model,9,10)。测试结果如图 6-9 所示,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1487,召回率为 0.375,查准率为 0.375。
图 6-9 特征数量为 9 的测试结果
(3)特征数量为 8,即 SVDRecommender(model,8,10)。测试结果如图 6-10 所示,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1022,召回率为 0.375,查准率为 0.375。
图 6-10 特征数量为 8 的测试结果
基于 Mahout 的推荐系统设计与实现
- 32 -
(4)特征数量为 7,即 SVDRecommender(model,7,10)。测试结果如图 6-11 所示,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9918,召回率为 0.375,查准率为 0.375。
图 6-11 特征数量为 7 的测试结果
(5)特征数量为 6,即 SVDRecommender(model,6,10)。测试结果如图 6-12 所示,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.0911,召回率为 0.375,查准率为 0.375。
图 6-12 特征数量为 6 的测试结果
通过比较以上测试结果可以看出,召回率和查准率时一样的。这时主要看
AVERAGE_ABSOLUTE_DIFFERENCE,当特征值数量在大于等于 7 的时候一直是递减
的,在特征数量为 6 的时候,AVERAGE_ABSOLUTE_DIFFERENCE 值变大了。于是,
我选择设定特征数量为 7 来实现基于 Svd 的推荐引擎。
6.4 三种推荐引擎的测试优化
(1)基于用户的推荐算法选择推荐邻居为 3 的最优来进行比较测试。测试结果如
图 6-13 所示,召回率约为 0.3333、查准率约为 0.6667、AVERAGE_ABSOLUTE_DIFFERE
NCE 约为 0.0277。
图 6-13 基于用户推荐的测试结果
(2)基于物品的推荐算法测试结果如图 6-14 所示,召回率和查准率均为 0,分析
数 据 库 是 因 为 数 据 库 中 其 他 用 户 和 用 户 1 没 有 过 多 相 同 物 品 打 分 的 交 集 ,
AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.8046。
图 6-14 基于物品推荐的测试结果
(3)基于 Svd 的推荐算法选择特征数量为 7 的最优来进行比较测试,测试结果如
图 6-15 所示,AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9918,召回率为 0.375,查
第 6 章 推荐功能测试
- 33 -
准率为 0.375。
图 6-15 基于 Svd 推荐的测试结果
分析以上数据 AVERAGE_ABSOLUTE_DIFFERENCE 大小排序:基于用户<基于
物品<基于 Svd,召回率大小排序:基于 Svd>基于用户>基于物品,查准率大小排序:
基于用户>基于 Svd>基于物品。AVERAGE_ABSOLUTE_DIFFERENCE 最小的是基于用
户的推荐算法,召回率最大的是基于 Svd 的推荐算法,查准率最大的是基于用户的推荐
算法。虽然基于用户的推荐算法在召回率的比较上不是最优的,但是其余两项为最优。
综合来看,应该在三种中选择基于用户的推荐算法嵌入技术转移集成服务平台。但是数
据量和数据分布,会影响算法的评分,根据本系统的数据库来说,在用户偏好表中,用
户数量不多,选择基于用户的推荐算法计算的更快速。
6.5 本章小结
本章首先简要介绍了测试所用到的两个概念:召回率和查准率,以数学模式解释其
原理。接下来着重对系统的测试结果进行比较,先对基于用户的推荐算法及基于 Svd 的
推荐算法测试,再将三种推荐算法相互比对测试,通过检测数据选出推荐性能相对较好
的作为系统的核心推荐算法。
基于 Mahout 的推荐系统设计与实现
- 34 -
第 7 章 总结与展望
7.1 总结
本文先介绍课题研究目的意义、背景阐述推荐系统开发的重要性,同时简述开发推
荐系统的相关技术。接下来按照需求分析、总体设计、数据库设计、设计与实现、测试
等五个方面详细叙述基于 Mahout 的推荐系统的开发流程。在设计与实现阶段实现了基
于用户、基于物品、Svd 三种核心算法,通过测试阶段的数据显示:召回率和查准率确
定将基于用户的推荐算法做为本系统的核心算法,实现对科技资源信息和成果资源信息
的推荐,同时为使算法更精确的计算用户偏好,科技资源模块实现打分功能。
在实现了以上功能的基础上,基于 Mahout 的推荐系统的实现还存在一定的缺陷。
首先在界面显示方面,推荐结果如果利用图片加标题的展示会比单纯的标题交互性好。
其次没有实现以搜索形式查看相关分类下推荐信息的功能,用户不能有过多的自定义搜
索。最后,Mahout 推荐算法有多种组合,系统仅实现了三种推荐算法,设计的不够完
善。
7.2 展望
目前,推荐系统所推荐出来的内容仍不够精确,推荐内容和用户实际偏好不符的情
况时常发生,同时网站的推荐信息显示不够友好。因此,推荐算法的研究仍有很大的提
升空间,在 21 世纪的大数据时代,对 Mahout 算法的研究优化是今后算法开发的一个主
流 方 向 。
参考文献
- 35 -
参考文献
陈虹君.2008.Java Web 与数据库连接池技术的应用研究与实践[硕士学位论文].西安:电子科技大学
方永; 李建民.2005 基于 JNDI 的 JDBC 实例化对象在数据库连接缓冲池中的研究与实现.计算机与
现代化.12(10~25)
张丹.2013.Mahout 推荐算法 API 详解.http://blog.fens.me/mahout-recommendation-api[2015-03
-05]
张丹.2013.Mahout 分步式程序开发 基于物品的协同过滤 ItemCF.http://blog.fens.me/hadoop-ma
hout-mapreduce-itemcf/[2015-03-05]
张丹.2013.用 Maven 构建 Mahout 项目.http://blog.fens.me/hadoop-mahout-maven-eclipse/[2015
-03-05]
The Apache Software Foundation.2008.Apache Mahout 0.11.0-SNAPSHOT API.https://build
s.apache.org/job/mahout-quality/javadoc/overview-summary.html[2015-04-10]
Grant Ingersoll.2009.通过可伸缩、商业友好的机器学习来构建智能应用程序.http://www.ibm.co
m/developerworks/cn/java/j-mahout/index.html[2015-03-01]
马春娥,赵晨婷.2010.基于 Apache Mahout 构建社会化推荐引擎.http://www.ibm.com/develope
rworks/cn/java/j-lo-mahout/[2015-04-20]
Jerome.rong.2012.Taste 架构分析.http://www.cnblogs.com/jerome-rong/archive/2012/05/22
/2512484.html[2015-04-05]
Bornhe.2012.Mahout 之(四)Taste 的架构和部署 Demo.http://www.douban.com/note/2189179
42/?qq-pf-to=pcqq.c2c[2015-04-21]
樊哲.2014.Mahout 算法解析与案例实战.北京:机械工业出版社:270
Piero Giacomelli,靳小波.2014.Mahout 实践指南.北京:机械工业出版社:167
马宁.2013.基于 Mahout 的推荐系统的研究与实现[硕士].兰州:兰州大学
谭昶.2014.基于面向对象思想和典型用户群组的个性化推荐方法研究.北京:中国科学技术大学
陶维成; 王婷婷; 姚琪.2014.基于 Mahout 的推荐系统构建.重庆科技学院学报(自然科学
版),02:143~146
刘士琛.2014.面向推荐系统的关键问题研究及应用[博士].北京:中国科学技术大学
刘鲁; 任晓丽.2008.推荐系统研究进展及展望.信息系统学报.01:44~46
王国霞; 刘贺平.2012.个性化推荐系统综述.计算机工程与应用.07:67~70
曹毅.2007.基于内容和协同过滤的混合模式推荐技术研究[硕士].长沙:中南大学
Arantxa Duque Barrachina;Aisling O’Driscoll.2014.A big data methodology for categorising
technical support requests using Hadoop and Mahout.Journal of Big Data.Vol.1 (1):1~11
Isaac Triguero;Daniel Peralta;Jaume Bacardit;Salvador García;Francisco Herrera.2014.MRPR:
A MapReduce solution for prototype reduction in big data classification.Neurocomputing
,10:20~23
M. M. Fouda;M. Ali-Muharrami.1995.An initial assessment of mangrove resources and
human activities at Mahout Island, Arabian Sea, Oman.Hydrobiologia,Vol.295 (1):
353-~362
基于 Mahout 的推荐系统设计与实现
- 36 -
致 谢
回顾大学四年,一步步走来,有过失意落寞,有过成功后的喜悦,这都是我成长的
必经之路。最后的一份作业:毕业设计也完成了,要感谢的人很多。
首先要感谢的是毕业设计导师朱珊娜老师,从确立课题到前期新知识学习以及开发
过程,她一步步指引我。前期就给我很多与课题相关的网站资源、文献等等,在积累很
多知识之后,进入到系统开发就很容易上手。在网站界面设计上,导师也跟我一起反复
修改确立用户交互感好的页面布局,给了我很多建议。因此,一个毕业设计的完成,让
我在老师的引导下学到了很多知识,例如对于 Mahout 这个新知识从不知道到学会如何
使用并且进行一定的测试优化等等。最后,在论文一次次的修改过程中,通过满满的标
记,就能感受到导师对我论文修改的用心。在这里,我要对她说句谢谢。
接下来,我要感谢研究生学姐。在代码开发过程中,出现过多次自己解决不了的问
题,都是在学姐的帮助下,一起调试代码,发现问题,解决问题。我也要感谢她。
最后要感谢在大学四年教导我的每一位老师,他们一直在我的学习中,项目开发中
默默的帮助我,不厌其烦的解答我所遇到的问题。在团队的工作中,给我们提供了很好
的开发环境,外界条件。在这里,我要对他们说声谢谢。
最后向评审本论文,参加论文答辩的各位老师表示最衷心的感谢。

More Related Content

Viewers also liked

Fiets & verkeersveiligheid, 6 oktober 2015
Fiets & verkeersveiligheid, 6 oktober 2015Fiets & verkeersveiligheid, 6 oktober 2015
Fiets & verkeersveiligheid, 6 oktober 2015Herbert Tiemens
 
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청sdfksjdfks
 
수원호텔 상해골프
수원호텔 상해골프수원호텔 상해골프
수원호텔 상해골프hslkdfjs
 
John Chaplin - Sustainable Severn 2015
John Chaplin - Sustainable Severn 2015John Chaplin - Sustainable Severn 2015
John Chaplin - Sustainable Severn 2015Sustainable Severn
 
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...SevernEstuary
 
Antonio Azevedo Palestra A Mentequecontrolao Corpo
Antonio Azevedo Palestra A Mentequecontrolao CorpoAntonio Azevedo Palestra A Mentequecontrolao Corpo
Antonio Azevedo Palestra A Mentequecontrolao CorpoAntonio Azevedo
 
둘이 하나가 될 때 길이 보입니다
둘이 하나가 될 때 길이 보입니다둘이 하나가 될 때 길이 보입니다
둘이 하나가 될 때 길이 보입니다cbs15min
 

Viewers also liked (9)

Fiets & verkeersveiligheid, 6 oktober 2015
Fiets & verkeersveiligheid, 6 oktober 2015Fiets & verkeersveiligheid, 6 oktober 2015
Fiets & verkeersveiligheid, 6 oktober 2015
 
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청
군미필학자금대출\【 FUN88。CO。KR】\국외할인항공권 여권연장신청
 
수원호텔 상해골프
수원호텔 상해골프수원호텔 상해골프
수원호텔 상해골프
 
hive
hivehive
hive
 
John Chaplin - Sustainable Severn 2015
John Chaplin - Sustainable Severn 2015John Chaplin - Sustainable Severn 2015
John Chaplin - Sustainable Severn 2015
 
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...
2007 06 Climate Change Research Advisory Group - Rhoda Ballinger, Cardiff Uni...
 
Antonio Azevedo Palestra A Mentequecontrolao Corpo
Antonio Azevedo Palestra A Mentequecontrolao CorpoAntonio Azevedo Palestra A Mentequecontrolao Corpo
Antonio Azevedo Palestra A Mentequecontrolao Corpo
 
Final PPT
Final PPTFinal PPT
Final PPT
 
둘이 하나가 될 때 길이 보입니다
둘이 하나가 될 때 길이 보입니다둘이 하나가 될 때 길이 보입니다
둘이 하나가 될 때 길이 보입니다
 

Similar to Graduation Thesis

運用擴增實境技術建立數位學習環境(精簡版)
運用擴增實境技術建立數位學習環境(精簡版)運用擴增實境技術建立數位學習環境(精簡版)
運用擴增實境技術建立數位學習環境(精簡版)Tehuan Chung
 
数据分析系统架构设计
数据分析系统架构设计数据分析系统架构设计
数据分析系统架构设计学峰 司
 
Graduate Design - Nutrient
Graduate Design - NutrientGraduate Design - Nutrient
Graduate Design - NutrientHaoxiang Shen
 
Bigdata bizoppor
Bigdata bizopporBigdata bizoppor
Bigdata bizopporAccenture
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2Yiwei Ma
 
人臉偵測應用於學習專注力 與群組參與度之分析
人臉偵測應用於學習專注力 與群組參與度之分析人臉偵測應用於學習專注力 與群組參與度之分析
人臉偵測應用於學習專注力 與群組參與度之分析xilin peng
 
Cite space中文手册
Cite space中文手册Cite space中文手册
Cite space中文手册cueb
 
IT445_Week_2.pdf
IT445_Week_2.pdfIT445_Week_2.pdf
IT445_Week_2.pdfAiondBdkpt
 
IT445_Week_11.pdf
IT445_Week_11.pdfIT445_Week_11.pdf
IT445_Week_11.pdfAiondBdkpt
 
CloudTao技术白皮书
CloudTao技术白皮书CloudTao技术白皮书
CloudTao技术白皮书FIT2CLOUD
 
互联网舆情管理系统介绍
互联网舆情管理系统介绍互联网舆情管理系统介绍
互联网舆情管理系统介绍J.Y. "MeaCulpa" Hsu
 
IT445_Week_10_Part2.pdf
IT445_Week_10_Part2.pdfIT445_Week_10_Part2.pdf
IT445_Week_10_Part2.pdfAiondBdkpt
 
客户体验在电信产品开发中的应用与实践
客户体验在电信产品开发中的应用与实践客户体验在电信产品开发中的应用与实践
客户体验在电信产品开发中的应用与实践Lichuan Zhang
 
架构风格与基于网络的软件架构设计
架构风格与基于网络的软件架构设计架构风格与基于网络的软件架构设计
架构风格与基于网络的软件架构设计hqx_0324
 
课程介绍
课程介绍课程介绍
课程介绍Bo Shen
 

Similar to Graduation Thesis (20)

運用擴增實境技術建立數位學習環境(精簡版)
運用擴增實境技術建立數位學習環境(精簡版)運用擴增實境技術建立數位學習環境(精簡版)
運用擴增實境技術建立數位學習環境(精簡版)
 
解决问题
解决问题解决问题
解决问题
 
数据分析系统架构设计
数据分析系统架构设计数据分析系统架构设计
数据分析系统架构设计
 
Graduate Design - Nutrient
Graduate Design - NutrientGraduate Design - Nutrient
Graduate Design - Nutrient
 
Bigdata bizoppor
Bigdata bizopporBigdata bizoppor
Bigdata bizoppor
 
51 cto linuxops_issue2
51 cto linuxops_issue251 cto linuxops_issue2
51 cto linuxops_issue2
 
Cnnic:2011年中国搜索引擎市场研究报告
Cnnic:2011年中国搜索引擎市场研究报告Cnnic:2011年中国搜索引擎市场研究报告
Cnnic:2011年中国搜索引擎市场研究报告
 
人臉偵測應用於學習專注力 與群組參與度之分析
人臉偵測應用於學習專注力 與群組參與度之分析人臉偵測應用於學習專注力 與群組參與度之分析
人臉偵測應用於學習專注力 與群組參與度之分析
 
Cite space中文手册
Cite space中文手册Cite space中文手册
Cite space中文手册
 
IT445_Week_2.pdf
IT445_Week_2.pdfIT445_Week_2.pdf
IT445_Week_2.pdf
 
weeek3.pdf
weeek3.pdfweeek3.pdf
weeek3.pdf
 
IT445_Week_11.pdf
IT445_Week_11.pdfIT445_Week_11.pdf
IT445_Week_11.pdf
 
CloudTao技术白皮书
CloudTao技术白皮书CloudTao技术白皮书
CloudTao技术白皮书
 
互联网舆情管理系统介绍
互联网舆情管理系统介绍互联网舆情管理系统介绍
互联网舆情管理系统介绍
 
IT445_Week_10_Part2.pdf
IT445_Week_10_Part2.pdfIT445_Week_10_Part2.pdf
IT445_Week_10_Part2.pdf
 
客户体验在电信产品开发中的应用与实践
客户体验在电信产品开发中的应用与实践客户体验在电信产品开发中的应用与实践
客户体验在电信产品开发中的应用与实践
 
20150206 aic machine learning
20150206 aic machine learning20150206 aic machine learning
20150206 aic machine learning
 
资讯管理
资讯管理资讯管理
资讯管理
 
架构风格与基于网络的软件架构设计
架构风格与基于网络的软件架构设计架构风格与基于网络的软件架构设计
架构风格与基于网络的软件架构设计
 
课程介绍
课程介绍课程介绍
课程介绍
 

Graduation Thesis

  • 2.
  • 3. 基于 Mahout 的推荐系统设计与实现 摘 要 当代互联网已步入大数据时代,资源和资讯多通过互联网呈献给大众。逐个查找信息的搜索导 致办事效率过低,基于 Mahout 的推荐系统能让计算机记住用户偏好,以此推荐给用户可能喜欢的信 息,极大的提高了人们在信息获取方面的效率。基于 Mahout 的推荐系统根据以上需求实现对科技资 源和成果资源信息的推荐。系统开发利用 Taste CF(Mahout 特性)四组件完成基于用户、基于物品 以及 Svd 推荐算法的设计与实现,并通过分析比较召回率和查准率选取三者中推荐性能相对较好的 做为系统的核心推荐算法。当用户登录系统进入科技资源或成果资源模块首页面后,页面右下角将 以弹窗形式显示给用户 5 条推荐信息。 推荐系统的开发可以极大程度的提高用户查阅信息的效率。但是目前很多推荐引擎的推荐结果 和实际用户喜好存在一定偏差,因此推荐算法尚有很大研究空间,是今后大数据研究的一个热门方 向。 关键字:推荐系统;Mahout;Taste;召回率;查准率
  • 4. Design and implementation of recommendation system based on Mahout Abstract Contemporary Internet has entered the era of big data, both resources and information are presented to the public via the Internet. The research method of finding information individually will lead to low efficiency, but recommendation system based on Mahout allows the computers to remember users’ preferences, then recommended the users the information that they might like, which greatly improves the efficiency of people's access to information. Design and implementation of recommendation system based on Mahout completes the recommendation function of technological resources and achievement resources according to the above requirements. System Development uses the four components of Taste CF (Mahout characteristics) to complete the recommendation algorithm which was based on users, based on goods and Svd, then select the relatively good-performance algorithm as a core recommendation algorithm through the analysis and comparison of recall and precision. When users log in and enter the homepage of technology resources or achievements resources, they will show a pop page of five messages which were recommended by the system at the lower right corner. Development of recommendation system can greatly improve the users’efficiency to view the information. However, there are many deviations between recommendation engine results and actual users’ preferences, as a result, there is still a considerable developing space for research recommendation algorithm, and it is a popular direction for big data research in the future. Keywords: recommended system; Mahout; Taste; recall; precision
  • 5. I 目 录 第 1 章 绪 论........................................................................................................................- 1 - 1.1 研究目的与意义 .............................................................................................................................- 1 - 1.2 研究背景 .........................................................................................................................................- 1 - 1.3 研究内容 .........................................................................................................................................- 2 - 1.4 本章小结 .........................................................................................................................................- 2 - 第 2 章 相关技术介绍..........................................................................................................- 3 - 2.1 JSP 动态页面编程语言 ...................................................................................................................- 3 - 2.2 Struts2 框架......................................................................................................................................- 3 - 2.3 Mybatis 持久层框架 ........................................................................................................................- 4 - 2.4 Mahout..............................................................................................................................................- 4 - 2.5 本章小结 .........................................................................................................................................- 7 - 第 3 章 需求分析..................................................................................................................- 8 - 3.1 课题需求分析 .................................................................................................................................- 8 - 3.2 业务流程图 .....................................................................................................................................- 8 - 3.2.1 科技资源模块基本业务流程图..............................................................................................- 8 - 3.2.2 成果资源模块基本业务流程图..............................................................................................- 9 - 3.2.3 推荐功能业务流程图............................................................................................................- 10 - 3.3 本章小结 .......................................................................................................................................- 10 - 第 4 章 总体设计................................................................................................................- 11 - 4.1 系统总体设计 ...............................................................................................................................- 11 - 4.1.1 系统结构设计........................................................................................................................- 11 - 4.1.2 系统架构设计........................................................................................................................- 12 - 4.1.3 实现推荐功能模块总体设计................................................................................................- 12 - 4.2 科技资源模块数据库设计 ...........................................................................................................- 14 - 4.2.1 概念设计................................................................................................................................- 14 - 4.2.2 逻辑设计................................................................................................................................- 15 - 4.2.3 数据表结构............................................................................................................................- 15 - 4.3 成果资源模块数据库设计 ...........................................................................................................- 17 - 4.3.1 概念设计................................................................................................................................- 17 - 4.3.2 逻辑设计................................................................................................................................- 17 - 4.3.3 数据表结构............................................................................................................................- 18 - 4.4 输入输出设计 ...............................................................................................................................- 19 - 4.5 本章小结 .......................................................................................................................................- 19 - 第 5 章 推荐功能设计与实现............................................................................................- 20 - 5.1 基于 Mahout 推荐系统添加 Mahout 支持...................................................................................- 20 - 5.2 数据库连接 ...................................................................................................................................- 21 - 5.3 创建 DataModel ............................................................................................................................- 22 - 5.4 建立推荐引擎 ...............................................................................................................................- 24 - 5.4.1 基于用户推荐引擎的设计与实现........................................................................................- 24 - 5.4.2 基于物品推荐引擎的设计与实现........................................................................................- 25 - 5.4.3 Svd 推荐引擎的设计与实现..................................................................................................- 26 - 5.5 Action 类中完成推荐功能.............................................................................................................- 27 - 5.6 页面显示 .......................................................................................................................................- 27 -
  • 6. II 5.7 本章小结 .......................................................................................................................................- 28 - 第 6 章 推荐功能测试........................................................................................................- 29 - 6.1 召回率与查准率 ...........................................................................................................................- 29 - 6.1.1 召回率.....................................................................................................................................- 29 - 6.1.2 查准率.....................................................................................................................................- 29 - 6.2 基于用户的推荐测试 ...................................................................................................................- 30 - 6.3 基于 Svd 的推荐测试...................................................................................................................- 31 - 6.4 三种推荐引擎的测试优化 ...........................................................................................................- 32 - 6.5 本章小结 .......................................................................................................................................- 33 - 第 7 章 总结与展望............................................................................................................- 34 - 7.1 总结 ...............................................................................................................................................- 34 - 7.2 展望 ...............................................................................................................................................- 34 - 参考文献..............................................................................................................................- 35 - 致 谢....................................................................................................................................- 36 -
  • 7. 第 1 章 绪论 - 1 - 第 1 章 绪 论 1.1 研究目的与意义 随着科技的发展,人们的生活水平逐步提高的同时,生活节奏也在慢慢变快,因此 出现一系列网购现象。由于购物网站庞大的数据量,人们很难在有限时间内找到自己喜 爱的物品。慢慢的,人们在浏览商品信息网站时,网站会显示对于该用户可能喜欢物品 的推荐。这是早期的一种推荐,慢慢的推荐功能不再局限于购物网站。新闻,社交等网 站也会推荐给用户他们可能喜欢的资讯。这样的推荐使得人们在寻找自己关心的资源的 同时,短时间内接触到自己可能感兴趣的资源信息,这是一种在当代生活中极大程度提 高信息处理效率的方法。在本系统中,由于科技资源、成果资源信息量庞大,每天推荐 给用户一定量的最近科技资源发布成果,这样不仅提升用户和网站的交互体验,用户也 可以在短时间内浏览更多信息,缩短用户搜索时间,并且更有利于网站资源得到极大程 度的关注和推广。 1.2 研究背景 互联网的出现和普及使得社会的信息量呈爆炸指数上涨,用户每天需要吸收、浏览 大量的信息,这在一定程度上满足了用户在信息爆炸时期对信息的需求。但随着网络的 迅速发展,人们通过转载,分享等等途径极大的促进了信息量的一步步攀升,当持久的 大数据攻击并没有得到数据的优化显示时,用户在每天面对大量信息的时候无法从中获 得对自己真正有用的那部分信息,对信息的使用效率就会降低,这就导致信息超载问题 产生(Grant Ingersoll 2009)。 21 世纪是一个大数据量的时代,越来越多的人关注大数据方面的研究和发展。一个 网站没有好的数据优化功能或是数据库一团乱,不仅网站使用效率降低,更不利于日后 的维护。解决信息超载问题一个十分有效的办法是建立推荐系统, 它是一个依据用户 的喜好、日常浏览记录等,将用户感兴趣的信息、产品等推荐给用户的个性化信息推荐 系统。推荐系统通过研究用户的兴趣偏好,进行计算,由系统发现用户潜在的个人偏好, 将信息推荐给用户,引导用户发现有用的数据,逐渐的让用户对系统产生依赖。 从一开始 MarkoBalabanovic 等人在同一会议上推出了个性化推荐系统 LIRA 到 2001 年,IBM 公司在其电子商务平台 Websphere 中增加了个性化功能,以便商家开发个性化 电子商务网站。再到 2009 年 7 月,国内首个推荐系统科研团队通过 B2C 网站每天为数 以千万计的消费者提供实时智能的商品推荐。2011 年 9 月,百度世界大会 2011 上,李 彦宏将推荐引擎与云计算、搜索引擎并列为未来互联网重要战略规划以及发展方向。目 前推荐系统现已广泛应用于很多领域,并独立成为一门学科。
  • 8. 基于 Mahout 的推荐系统设计与实现 - 2 - 1.3 研究内容 课题研究基于 Apache 官网的 mahout 开源代码来实现技术转移集成服务平台相关科 技资源、成果资源的推荐功能。主要内容包括: (1)根据需求分析对网站科技资源模块以及成果资源模块进行总体设计,完成前 端页面布局。 (2)设计科技资源模块及成果资源模块数据库,依次从概念设计和逻辑设计完成 数据表的建立。 (3)确定前端页面编写所用语言以及框架:Jsp 和 Struts2,数据库连接所用到的 JNDI 数据库连接技术。实现科技资源和成果资源模块的基本功能 (4)学习 Mahout 推荐算法并将其应用到科技资源和成果资源模块。 (5)分别对基于用户的推荐、基于物品的推荐、Svd 推荐算法的测试结果进行对 比分析,确定召回率和查准率最优的为网站核心推荐算法。 1.4 本章小结 本章主要介绍基于 Mahout 推荐系统的研究目的与意义、背景以及研究内容,着重 说明了推荐系统对网站发展的重要性和优点,并且概述了研究流程,为系统开发奠定基 础。
  • 9. 第 2 章 相关技术介绍 - 3 - 第2章 相关技术介绍 基于 Mahout 的推荐系统使用了 JSP、Struts 2 框架、Mybatis 持久层框架以及 Mahout 等技术,以下是对这些主要技术的介绍。 2.1 JSP 动态页面编程语言 JSP 全名为 Java Server Pages。JSP 技术要形成 JSP 文件,需通过在网页 HTML 文 件中插入 Java 程序段和 JSP 标记。JSP 是一种动态页面技术,将表现逻辑从 Servlet 中 分离出来是它的主要目的。JSP 具备 Java 技术的简单易用,完全面向对象,同时具有平 台无关性且安全可靠,主要面向因特网的全部特点。 JSP 实现了 Html 语法中的 java 扩张(以<%, %>形式)。JSP 与 Servlet 一样在服务 器端执行的。通常返回给客户端的即是一个 HTML 文本。JSP 的技术根本是 Java Servlet, Java Servlet 和 JSP 共同配合才能实现大型的 Web 应用程序。 本系统使用 JSP 前端页面编程语言实现和 Action 类的动态交互。 2.2 Struts2 框架 Struts 2 是 Struts 的下一代产物,Struts 2 框架是在 struts 1 和 WebWork 的技术基础 上整合发展而来的。WebWork 是 Struts 2 的核心,通过拦截器的机制来处理用户的请求, 这样的设计使得业务逻辑控制器能够与 ServletAPI 完全脱离开。 Taglib 和页面导航是 Struts 2 优点的集中体现,组件的模块化、灵活性和重用性也 是 Struts 2 的优点,使用 Struts 2 可以帮助我们减少在运用 MVC 设计模型来开发 Web 应用的时间。Struts 2 可以清晰地辨别控制事务逻辑和外观,从而简化开发应用程序的过 程。Struts 2 提供的类使得开发工作非常简单,其中包含:控制程序流程的类、实现和执 行程序事务逻辑的类,自定义的标记库使得创建和验证 HTML 表单更加容易。Struts 配 置文件 struts-config.xml 将 struts 2 组件结合在一起。 基于 Mahout 的推荐系统使用 Struts 2 框架,每一个 Action 类在 Struts 的配置文件都 有一个 name 和 action 类对应,Jsp 页面通过传入的 action 名字在配置文件中找到对应类, 从而让服务器完成用户的请求。例如如下代码将类KjzyTypeAction和action名为kjzytype 连接起来,其中 name 属性是唯一的。Jsp 页面编程时通过在链接中使用 kjzytype 就可以 访问 KjzyTypeAction 类,服务器处理完成后,返回值为 type 时,跳转到 kjzy_type.jsp, 返回值为 zhongzhi 时,跳转到 kjzy_zhongzhi.jsp,返回值为 yangzhi 时,跳转到 kjzy_yangzhi.jsp。 <action name="kjzytype" class="com.transfer.action.kjzy.KjzyTypeAction"> <result name="type" >WEB-INF/jsp/kjzy_webpages/kjzy_type.jsp</result> <result name="zhongzhi" >WEB-INF/jsp/kjzy_webpages/kjzy_zhongzhi.jsp</result>
  • 10. 基于 Mahout 的推荐系统设计与实现 - 4 - <result name="yangzhi" >WEB-INF/jsp/kjzy_webpages/kjzy_yangzhi.jsp</result> </action> 2.3 Mybatis 持久层框架 MyBatis 是一个基于 Java 的持久层框架(apache 开源项目 iBatis)。SQL Maps 和 Data Access Objects(DAO)是 iBATIS 提供的持久层框架。MyBatis 支持普通 SQL 查 询,存储过程和高级映射,同时舍弃了几乎全部的 JDBC 代码和参数的手工设置以及结 果集的检索,使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。通过 Mybatis 的 三层功能架构:API 接口层、数据处理层、基础支撑层来实现对于数据库的操作。 基于 Mahout 的推荐系统在持久层使用 Mybaits 框架,所有的数据库操作语言都写 在 Mybatis-Config.xml 配置文件中。通过 dao 类的传入参数在配置文件寻找相应 ID,完 成对数据库的操作,实现对数据库数据的增删改查。例如如下代码完成了获取科技资源 全部信息的数据库查询功能,其中 id 是唯一对每一个 SQL 操作的标识,parameterType 是传入参数类型,resultMap 是返回值类型。select 标签中间即为具体操作数据库的 SQL 语句。 <select id="getSciTechResource" parameterType="map" resultMap="sciTechResourceMap"> select *from kjzy_resource T left outer join kjzy_type TT on T.techretype = TT.tid left outer join fl_techkind K on T.techrekind=K.kid order by techretime DESC limit #{offset},#{pageSize} </select> 2.4 Mahout Apache Mahout 是结合机器学习和数据挖掘的一个分布式框架,是由 Apache Software Foundation 开发的一个全新开源项目。为快速创立可扩展的高性能机器学习应 用建立一个环境是 Mahout 项目的目标。从数据处理能力上,可以将 Mahout 推荐算法划 分为 2 类:单机内存算法实现和基于 Hadoop 的分步式算法实现。本系统数据量在 10G 以内,因此使用单击内存算法实现。 (1)单机内存算法实现:在单机下运行的算法,参数可以自行配置。受限于单机 的资源是单机内存算法的突出问题。对于中等大小的数据,像 1G、10G 的数据量,有 能力进行计算,但超过 100G 的数据量,单机不可能完成该任务。 (2)基于 Hadoop 的分步式算法实现:并行化单机内存算法,将任务分配给多台计 算机一起运行。怎样让单机算法并行化是分步式并行算法的问题。分步式算法还需考虑 许多其他情况,例如多节点数据归并,数据排序,网路通信效率,节点宕机重算,数据
  • 11. 第 2 章 相关技术介绍 - 5 - 分步式存储等(张丹 2013)。 Mahout 的核心推荐算法有很多,本系统实现了三种算法,分别是基于用户推荐算 法、基于物品推荐算法、基于 Svd 推荐算法。下面将以叙述加图示的方法对三个算法的 原理进行介绍。 (1)基于用户的推荐算法原理:基于用户的协同过滤是通过基于用户之间的相似 度给出推荐结果,其中用户间的相似性通过不同用户对物品的打分来判断,然后将和他 偏好相似的其他用户喜欢的物品推荐给该用户。建立为数学模型,即将一个用户对所有 物品的喜好程度作为一个向量来计算用户之间的相似度,找到 N 个邻居后,根据邻居 的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的并且未浏览的物品信 息,计算得到一张有序的物品信息列表作为推荐列表(张丹 2013)。举例说明如图 2-1, 对于用户 A,根据用户的历史打分情况,计算得到一个邻居,为用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。 图 2-1 基于用户推荐算法原理图示 (2)基于物品的推荐算法原理:基于物品的协同过滤是通过基于物品之间的相似 度给出推荐结果,其中物品之间的相似性是通过用户对不同物品的评分来判断,然后将 和他之前喜欢的物品相似的物品推荐给用户。基于物品的协同过滤和基于用户的相似, 不过基于物品的协同过滤是将物品本身作为计算邻居时的对象,而不是用户本身。建立 为数学模型,就是将所有用户对某个物品的喜好程度做为一个向量来计算物品之间的相 似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有打分的物品, 计算得到一个有序的物品列表作为推荐列表(张丹 2013)。举例说明如图 2-2,依据所 有用户的历史打分,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相 似,而用户 C 喜欢物品 A,即可推断出用户 C 可能也喜欢物品 C。
  • 12. 基于 Mahout 的推荐系统设计与实现 - 6 - 图 2-2 基于物品推荐算法原理图示 (3)基于 Svd 的推荐算法原理:Svd 推荐算法使用矩阵分解,投影用户和项目到 一个特征空间。 Mahout 已提供大量功能,特别是在集群和 CF 方面。Mahout 的主要特性包括: Taste CF(马春娥和赵晨婷 2010)。Taste 是 Apache Mahout 提供的一个协同过滤算法的高 效实现,基于 Java 实现的可扩展的,高效的推荐引擎。Taste 支持基于用户和基于项目 的推荐,并且提供了许多推荐选项和用于自定义的界面(Jerome.rong 2012)。Taste 的 设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。 Taste 由以下四个主要的组件组成: (1)DataModel:DataModel 是用户偏好信息的抽象接口,它的具体实现支持从任 何类型的数据源提取用户偏好信息。Taste 提供 JDBCDataModel 和 FileDataModel,分别 支持从数据库和文件中读取用户的喜好信息。 (2)UserSimilarity 和 ItemSimilarity:UserSimilarity 是基于用户协同过滤推荐引擎 的核心部分,用于定义两个用户间的相似度,计算用户的“邻居”,邻居即为与当前用户 口味相似的用户。ItemSimilarity 类似的,计算内容之间的相似度。 (3)UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找 到与当前用户偏好程度类似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定 邻居用户的方法,基于 UserSimilarity 计算来实现。 (4)Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。 程序中,将 DataModel 做为参数传给 Recommeder 接口的 recommed()方法就可以计算出 对不同用户的推荐内容。实际应用中,主要实现 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推
  • 13. 第 2 章 相关技术介绍 - 7 - 荐引擎。 以上四个组件的数据流如图 2-3 所示,首先将数据表映射为数据模型(DataModel), 第一步,将数据模型作为参数传给 UserSimilarity 计算用户相似度;第二步,将数据模 型和用户相似度作为参数传递给 UserNeighborhood 计算得到用户的邻居用户;第三部, 将数据模型、用户相似度以及用户邻居共同传给 Recommender 接口得到推荐结果返回 给 JSP 页面。 图 2-3 Taste 组件数据流 开发者可以构建庞大的推荐系统,基于这些组件,提供实时或者离线的推荐功能。 实时的推荐经常只能处理数千用户,而离线推荐具有更好的适用性(Bornhe 2012)。 2.5 本章小结 本章介绍了在开发时所用到的相关技术。基本技术方面,集中介绍了 JSP 动态页面 编程语言、Struts2 框架以及 Mybatis 框架。推荐功能技术方面着重介绍了推荐功能实现 方面的核心技术:Mahout,介绍了本系统选取的数据处理方式以及三种核心算法的原理。 同时通过数据流传递的方式对 Taste 推荐引擎核心四组件运行原理进行阐述。
  • 14. 基于 Mahout 的推荐系统设计与实现 - 8 - 第 3 章 需求分析 3.1 课题需求分析 基于 Mahout 的推荐系统依托国家“十二五”科技支撑计划课题《技术转移集成服 务平台建设与示范》,设计与实现该课题下科技资源模块和成果资源模块的推荐功能。 我国是一个农业大国,农业是安天下、稳民心的战略产业,用信息技术改造和提升 传统农业是发展农业的必由之路,也是党的十七届三中全会关于农村问题的具体要求。 但目前,我国西部农村经济不富裕,农民收入不够高,农民获取农业信息的手段与途径 还比较传统,特别是偏远农村农民的科学素养还不够高,便捷获取科技信息的渠道不够 畅通。基层科技部门普遍存在科技资源不足,科技资源分散,科技服务能力弱的问题。 杨凌示范区经过十多年的快速发展,农业科技队伍、科技成果和推广服务体系已进一步 强化,在用科技服务现代农业和促进农民增收方面走在全国前列。示范区农业科技信息 服务网络在科技服务中发挥了应有作用,但其硬件平台、科技信息资源和农业科技服务 等方面,与国家级高新技术产业示范区的应用需求不相适应。迫切需要建设快捷、高效 地农业科技成果服务平台,为农业科技人员、基层农技人员和农户提供多通道科技网络 化服务。 在农业平台慢慢发展之后,研究农业科技的专家学者越来越多,在农业方面的科技 资源,成果资源相继发布。作为一个集中展示科技资源和成果资源的平台,如何便利的 让专家学者或是普通用户浏览到跟自己研究内容相关的农业资讯是网站优化开发的方 向,并且这也是目前用户对网站有极大需求的方面。 围绕上述问题,本课题以农业增效带动农民增收农村富裕为目标,以提高农民的农 业科技素养和科技能力为入手,以现代化新农村信息化服务和国家农业高新技术产业示 范区、农业和农民生产、经营、管理信息化中的关键问题为载体,开展技术转移集成服 务平台构建与示范,并完成更高层次推荐功能的实现。基本需求如下: ⑴ 分析现有农业科技资源,成果资源模型,建立基于专家发布的农业科技资源、 成果资源展示平台。 ⑵ 建设有推荐农业科技资源、成果资源功能的展示平台。 3.2 业务流程图 3.2.1 科技资源模块基本业务流程图 科技资源模块基本业务:用户进行登录操作,接着进入科技资源模块首页,浏览各 个属性分类下的科技资源条目信息,点击标题链接查看各科技资源详细信息。如图 3-1 所示。
  • 15. 第 3 章 需求分析 - 9 - 图 3-1 科技资源模块业务流程图 3.2.2 成果资源模块基本业务流程图 成果资源模块基本业务:用户进行登录操作,接着进入成果资源模块首页,浏览各 属性分类下的成果资源条目信息,点击标题链接查看每个成果资源详细信息。如图 3-2 所示。 图 3-2 成果资源模块业务流程图
  • 16. 基于 Mahout 的推荐系统设计与实现 - 10 - 3.2.3 推荐功能业务流程图 根据网站总体设计,用户进入网站首页后,需进行登录操作,之后网站会在用户点 击进入各模块时传输用户 ID,根据用户以往对网站内同类资源的偏好进行计算,推荐 出用户可能喜欢的信息。 用户点击进入科技资源首页面后,根据传递的用户 ID 参数,计算用户对科技资源 的偏好,并在科技资源首页面以弹窗形式显示推荐内容。用户点击进入成果资源首页面 后,根据传递的用户 ID 参数,计算用户对成果资源的偏好,并在成果资源首页面以弹 窗形式显示推荐内容。如图 3-3 所示。 图 3-3 推荐业务流程图 3.3 本章小结 本章首先从需求分析的角度强调了基于 Mahout 推荐系统开发在农业领域的必要 性,强调了网站用户对系统的基本需求。其次通过分模块分功能的方式,将科技资源模 块基本功能、成果资源模块基本功能、推荐功能业务流程简单概述,并相应配以流程图 展示。
  • 17. 第 4 章 总体设计 - 11 - 第 4 章 总体设计 4.1 系统总体设计 4.1.1 系统结构设计 基于 Mahout 的推荐系统使用浏览器/服务器模式,即 B/S 结构。用户通过操作 Web 浏览器完成相应操作,这种模式统一了客户端。连接 Web 浏览器和底层数据库的核心 是服务器,在服务器上集中实现系统功能的核心部分。这样简单的模式简化了系统的开 发、维护和使用。用户只需在自己的电脑上安装浏览器,例如 Internet Explorer 或 FireFox 等即可通过输入网站 URL 地址访问网站。服务期上安装所使用的数据库即可,本网站使 用的是 MYSQL 数据库。浏览器通过 Web Server 同数据库进行数据交互。 因为 B/S 结构建立在广域网之上,不需要专门的网络硬件环境,比 C/S 有更好的适 应范围,因此选择 B/S 结构而非 C/S 结构。此外,B/S 结构可以面向不同的用户群,分 散地区,其结构实现系统的无缝升级,系统维护花费减到最小。用户自己从网上下载安 装即可实现升级。由于 B/S 结构建立在浏览器上,可以以更加丰富和生动的表现形式与 用户交互。 浏览器/服务器模式主要包含以下三个主要内容: (1)Web 浏览器。主要完成用户和网站的交互,例如用户在文本框输入所要查询 的数据,浏览器将用户的输入参数传给服务器进行计算,将得到的结果通过 HTML 转 码以文字或图片的形式呈现给用户。 (2)Web 服务器。实现系统功能的核心,并且及时接收 Web 浏览器发来的请求, 处理数据,生成一段 HTML 代码,返回给浏览器。同时,如果涉及到数据库操作,服 务器还需要对数据库进行访问,及时进行增删改查等操作。 (3)数据库。主要根据服务器发来的指示管理数据库。 Mahout 的推荐系统总体结构如图 4-1 所示: 图 4-1 Mahout 的推荐系统总体结构图
  • 18. 基于 Mahout 的推荐系统设计与实现 - 12 - 4.1.2 系统架构设计 基于 Mahout 的推荐系统使用 Jsp+Struts2+Mybatis 模式,架构模式如图 4-2 所示: 图 4-2 Mahout 的推荐系统架构图 4.1.3 实现推荐功能模块总体设计 Mahout 的推荐系统分为两个模块:科技资源模块、成果资源模块。科技资源模块展 示包括专家视频库、广播讲座稿、专家文稿库 3 个栏目以及短信库、三农咨询库相关信 息。成果资源模块展示各分类资源的详细信息。 (1)科技资源模块分为三级页面,一级页面即科技资源首页面,该页面显示所有 分类的信息,并在每条分类下显示 8 条科技资源数据。用户点击科技资源标题链接显示 详细信息,到达三级页面。此时若用户已经对该项目打分,则显示分数,否则显示打分 文本框,用户可以选择打分或不打分,打分之后点击提交即存入数据库。用户打分的好 处是可以有利于系统计算用户偏好,推荐给其更加准确的资源信息。科技资源模块推荐 功能流程如图 4-3 所示。
  • 19. 第 4 章 总体设计 - 13 - 图 4-3 科技资源模块推荐流程图 (2)成果资源模块是从数据库里提取成果资源信息以卡片形式显示在页面上,用 户可通过选择成果资源农作物的分类来异步刷新网页,显示不同分类下的成果资源信 息。用户进入成果资源首页面,右下角弹窗显示推荐内容,首页面每条成果资源信息的 卡片上有关注按钮,用户点击关注按钮会增加服务器计算用户偏好程度的准确率,用户 也可以选择不关注。成果资源模块推荐功能流程如图 4-4 所示。
  • 20. 基于 Mahout 的推荐系统设计与实现 - 14 - 图 4-4 成果资源模块推荐流程图 4.2 科技资源模块数据库设计 4.2.1 概念设计 概念设计阶段是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象, 形成一个独立于具体 DBMS 的概念模型。目标是生成相应的 E-R 图,方法采用混合策 略,即自顶向下地进行需求分析,然后再自底向上的设计概念结构。 科技资源模块实现推荐需要有科技资源、用户对科技资源的打分表、以及用户。科 技资源推荐模块 E-R 图如图 4-5 所示: 图 4-5 科技资源推荐模块 E-R 图
  • 21. 第 4 章 总体设计 - 15 - 4.2.2 逻辑设计 逻辑结构设计的任务是把概念结构设计阶段设计好的基本 E-R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。目标是产生逻辑结构。 方法:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关 系、网状、层次模型向特定 DBMS 支持下的数据模型转换;(3)对数据模型进行优化。 建立关系模式,首先将各实体转换为关系模式。 (1)将科技资源实体转换为一个关系模式。科技资源实体的属性就是关系的属性, 科技资源实体的码就是关系的码,转换的关系模式如下: kjzy_resource(U,F) U={techreid,techretitle,techretime,techrekind,techretype,techresource,techreauthor,isgood,te chreaddr,techreintroduction} F={techreid→techretitle,techreid→techretime,techreid→techrekind,techreid→techretype,tech reid→techresource,techreid→techreauthor,techreid→isgood,techreid→techreaddr,techreid→tech reintroduction} (2)将用户实体转换为一个关系模式。用户实体的属性就是关系的属性,用户实 体的码就是关系的码,转换的关系模式如下: yh_login(U,F) U={uno,upass,utype,ustop,id,uname,loginip,VCard} F={uno→upass,uno→utype,uno→ustop,uno→id,uno→uname,uno→loginip,uno→VCard} F={Gno→Gname,Gno→Gsize,Gno→Gbr,Gno→Gseason} 其次将涉及联系转换的实体转换为关系模式。将 1:n 的打分关系保存为偏好表转换 为一个关系模式,与该联系相连接的科技资源实体和用户实体的码、该联系本身的属性 以及偏好表实体的属性构成关系的属性,科技资源实体和用户实体的码作为外码,偏好 表的码就是关系的码。转换后最终的关系模式如下: kjzy_preferences(U,F) U={pno,userID,kjzyID,preference,timestamp} F={pno→userID, pno→kjzyID,pno→preference, pno→timestamp} 4.2.3 数据表结构 (1)kjzy_resourece(科技资源)表主要用来保存每一条科技资源信息。该表的结 构如表 4-1 所示。 表 4-1 表 kjzy_resource 结构 列名 数据类型 长度 允许空 科技资源 ID int 11 否 科技资源标题 varchar 50 是
  • 22. 基于 Mahout 的推荐系统设计与实现 - 16 - 科技资源发表时间 datetime 0 是 科技资源分类 varchar 10 是 科技资源属性 int 11 是 科技资源来源 varchar 50 是 科技资源作者 varchar 50 是 科技资源附件保存地 址 int 11 是 是否好评 varchar 200 是 科技资源简介 text 0 是 (2)yh_login(用户)表主要用来保存用户注册的信息。该表的结构如表 4-2 所示。 表 4-2 表 yh_login 结构 列名 数据类型 长度 允许空 登录名 varchar 50 否 登录密码 varchar 50 是 用户类型 int 11 是 用户 ID int 11 否 用户姓名 varchar 50 是 登录 ip varchar 50 是 VCard longtext 0 是 (3)kjzy_preferences(科技资源偏好)表用来记录用户对每一条科技资源的打分 信息。该表的结构如表 4-3 所示。 表 4-3 kjzy_preferences 结构 列名 数据类型 长度 允许空 用户 ID int 11 否 科技资源 ID int 11 否 偏好 int 11 否
  • 23. 第 4 章 总体设计 - 17 - 4.3 成果资源模块数据库设计 4.3.1 概念设计 概念设计阶段是整个数据库设计的关键,它通过对用户需求进行综合,归纳与抽象, 形成一个独立于具体 DBMS 的概念模型。目标是生成相应的 E-R 图,方法是采用混合 策略,即自顶向下地进行需求分析,然后再自底向上的设计概念结构。 成果资源模块实现推荐需要有成果资源、用户对成果资源资源的打分表、以及用户。 成果资源推荐模块 E-R 图如图 4-6 所示: 图 4-6 成果资源模块 E-R 图 4.3.2 逻辑设计 逻辑结构设计的任务是把概念结构设计阶段设计好的基本 E-R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。目标是产生逻辑结构。 方法:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关 系、网状、层次模型向特定 DBMS 支持下的数据模型转换;(3)对数据模型进行优化。 建立关系模式,首先将各实体转换为关系模式。 (1)将成果资源实体转换为一个关系模式。成果资源实体的属性就是关系的属性, 成果资源实体的码就是关系的码,转换的关系模式如下: cg_achieve(U,F) U={said,kind_id,achtitle,achtype,achtechdegree,achcontent,user_id,achauthor,achclick,achre lease,isverify} F={said→kind_id,said→achtitle,said→achtype,said→achtechdegree,said→achcontent,said →user_id,said→achauthor,said→achclick,said→achrelease,said→isverify}
  • 24. 基于 Mahout 的推荐系统设计与实现 - 18 - (2)将用户实体转换为一个关系模式。用户实体的属性就是关系的属性,用户实 体的码就是关系的码,转换的关系模式如下: yh_login(U,F) U={uno,upass,utype,ustop,id,uname,loginip,VCard} F={uno→upass,uno→utype,uno→ustop,uno→id,uno→uname,uno→loginip,uno→VCard} F={Gno→Gname,Gno→Gsize,Gno→Gbr,Gno→Gseason} 其次将涉及联系转换的实体转换为关系模式。将 1:n 的打分关系保存为偏好表转换 为一个关系模式,与该联系相连接的成果资源实体和用户实体的码、该联系本身的属性 以及偏好表实体的属性构成关系的属性,成果资源实体和用户实体的码作为外码,偏好 表的码就是关系的码。转换后最终的关系模式如下: cg_preferences(U,F) U={pno,userID,cgID,preference,timestamp} F={pno→userID, pno→cgID,pno→preference, pno→timestamp} 4.3.3 数据表结构 (1)cg_achieve(成果资源)表主要用来保存每一条成果资源信息。该表的结构如 表 3-4 所示。 表 4-4 表 cg_achieve 结构 列名 数据类型 长度 允许空 成果资源 ID int 11 否 成果资源分类 varchar 20 是 成果资源标题 varchar 100 否 成果资源属性 varchar 100 是 成果资源等级 varchar 100 是 成果资源内容 text 0 是 用户 ID int 11 是 成果资源作者 varchar 50 是 成果资源点击量 int 11 是 成果资源发表时间 varchar 50 是 是否认证 int 11 是 (2)yh_login(用户)表主要用来保存用户注册的信息。该表的结构如表 3-5 所示。 表 4-5 表 yh_login 结构 列名 数据类型 长度 允许空
  • 25. 第 4 章 总体设计 - 19 - 登录名 varchar 50 否 登录密码 varchar 50 是 用户类型 int 11 是 用户 ID int 11 否 用户姓名 varchar 50 是 登录 ip varchar 50 是 VCard longtext 0 是 (3)cg_preferences(科技资源偏好)表用来记录用户对每一条科技资源的打分信 息。该表的结构如表 3-6 所示。 表 4-6 cg_preferences 结构 列名 数据类型 长度 允许空 用户 ID int 11 否 成果资源 ID int 11 否 偏好 int 11 否 4.4 输入输出设计 基于 mahout 的推荐系统通过在首页面用户进行登录操作,以此来获取用户 ID,从 而根据用户的偏好推荐内容。因此,数据输入方式为用户在文本框中输入数据,点击登 录将数据传给服务器进行数据校验,如果用户名和密码不符,则登录不成功,否则,成 功登录。数据输出为用户点击科技资源链接或成果资源服务器返回的推荐内容。 4.5 本章小结 本章主要从系统总体设计、数据库设计以及输入输出设计三方面对系统前期框架搭 建,数据模型做了详细介绍。首先,系统总体设计主要包括系统结构设计、架构设计以 及推荐功能模块总体设计三方面。结构方面,着重介绍了两层浏览器服务器模式;架构 方面,介绍了 Jsp+Struts2+Mybatis 框架,该框架是系统运行、数据传输响应、浏览器和 服务器交互的基础。其次,按概念设计、逻辑设计、数据表结构的次序详细描述了数据 库的建立过程。通过概念设计得到各模块的全局 E-R 图,通过逻辑设计得到各模块所涉 及数据表的关系模式,通过展示数据表结构最后确定数据表的建立。最后,输入输出设 计 简 述 系 统 的 传 入 参 数 及 返 回 结 果 的 交 互 。
  • 26. 基于 Mahout 的推荐系统设计与实现 - 20 - 第 5 章 推荐功能设计与实现 基于 Mahout 的推荐系统设计与实现主要是针对网站科技资源以及成果资源模块, 即推荐科技资源信息和成果资源信息给用户。在本章介绍推荐功能的设计与实现流程 时,以科技资源模块为例进行叙述。 5.1 基于 Mahout 推荐系统添加 Mahout 支持 根据系统的应用范围和使用者来看,数据量不会很巨大,在单击内存的情况下完全 可以进行有效的数据处理,因此选择 Mahout 的单击内存实现算法。这样,开发中只需 要考虑算法,数据结构、内存和 CPU,相对易操作。 单击内存算法实现:在项目工程的 build path 下选择 add external jars 来添加所需要 的 Mahout jar 包。 首先在 Apache Mahout 官网下载有关 Mahout 的 jar 包。系统开发中引入以下核心 Mahout 开发 jar 包: ”mahout-core-0.4.jar”,”mahout-math-0.7.jar”、”guava-r07.jar”,”uncommons-math -1.2.jar”,”commons-math-1.2.jar”,”commons-logging-1.0.4.jar”,”commons-discovery-0 .2.jar”,”axis-wsdl4j-1.5.1.jar”,”axis-saaj-1.4.jar”,”axis-jaxrpc-1.4.jar”,”axis-1.4.jar”。 (1)在项目上单击右键选择 build path,选择 configure build path,显示窗口如图 5-1 所示: 图 5-1 configure build path 窗口
  • 27. 第 5 章 推荐功能设计与实现 - 21 - (2)选择窗口右侧 Add External JARs 按钮,将下载好的有关 Mahout jar 文件添加 进来即可。在项目工程下 Referenced Libraries 可看到 Mahout jar 包,如图 5-2 所示,就 成功的在本系统中添加了 Mahout 支持。 图 5-2 技术转移集成服务平台 Referenced Libraries 部分截图 5.2 数据库连接 基于 Mahout 推荐系统使用 JNDI 连接池技术进行数据库连接。 在 tomcat 文件夹下找到 server.xml 文件,添加一段 DBCP,这个是针对 tomcat 的, 设置好以后就可以使用了。相关代码如下,其中 maxActive 为最大连接数,maxIdle 为最 小连接数。 <Context path="/transfer" docBase="D:tomcat6apache-tomcat-6.0.20apache-tomcat-6.0.20 webappstransfer" reloadable="true"> <Resource name="jdbc/transfer" auth="Container" type="javax.sql.DataSource" username="root" password="" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/transfer" maxActive="15" maxIdle="7" defaultTransactionIsolation="READ_COMMITTED" validationQuery="Select 1" /> </Context> 建立公共类 DButil,在该类中通过 JNDI 获取连接池。利用 Context context = new InitialContext()获取 JNDI 的上下文对象 Context,然后根据名称和资源的绑定来获取数
  • 28. 基于 Mahout 的推荐系统设计与实现 - 22 - 据源连接池:context.lookup("java:comp/env/jdbc/transfer"),其中 java:/com/env 是 tomcat 实现 JNDI 的路径,后边是连接池名字。相关代码如下: ...... private static DataSource ds; public static void createDataSource() throws Exception { try { Context context = new InitialContext(); ds = (DataSource)context.lookup("java:comp/env/jdbc/transfer"); ...... } ...... } ...... 在创建好之后,通过 dataSource.getConnection()获取数据库的一个连接。 public static Connection getConnection(){ DataSource dataSource = getDataSource(); try { return dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace();} return null; } 这样就可以使用数据库。 5.3 创建 DataModel (1)首先将数据库中设计科技资源推荐的两张数据表 kjzy_resource、kjzy_preference 映射到类中,相应生成类 Kjzy_resource 和 Rating_kjzy。例如类 Kjzy_resource,抽取数 据库表 kjzy_resource 的 techreid、techretitle、techretime、techreauthor 四个数据项作为 Kjzy_resource 的类属性,并且添加 get()、set()方法。相关代码如下: ...... private int techreid; private String techretitle; private String techretime; private String techreauthor; private String techretype; public String getTechretype() {return techretype;} public void setTechretype(String techretype) {this.techretype = techretype;} public int getTechreid() {return techreid;} public void setTechreid(int techreid) {this.techreid = techreid;} public String getTechretitle() {return techretitle;}
  • 29. 第 5 章 推荐功能设计与实现 - 23 - public void setTechretitle(String techretitle){this.techretitle = techretitle;} public String getTechretime() {return techretime;} public void setTechretime(String techretime) {this.techretime = techretime;} public String getTechreauthor() {return techreauthor;} public void setTechreauthor(String techreauthor{this.techreauthor = techreauthor;} ...... (2)创建 RecommendKjzy_resource 类,将每一个 Kjzy_resource 实体和用户的打分 score 一一联系起来。相关代码如下: ...... private Kjzy_resource kjzy_resource; private float value; public RecommendKjzy_resource(Kjzy_resource kjzy_resource, float value){this.kjzy_ resource = kjzy_resource;this.value = value;} public Kjzy_resource getKjzy_resource() {return kjzy_resource;} public void setKjzy_resource(Kjzy_resource kjzyResource) { kjzy_resource = kjzyResource;} public float getValue() {return value;} public void setValue(float value) {this.value = value;} ...... (3)创建 RecommendKjzy_resourceList 类,该类将 RecommendKjzy_resource 实体 组成一个 list 用于接收推荐返回的数据集。其中该类的构造函数实现了将 Mahout 推荐 结果返回值为RecommendItem 类型的list 转化为类型为 RecommendKjzy_resource 的list, 便于处理返回的数据集。构造函数代码如下: public RecommendKjzy_resourceList(List<RecommendedItem> items){ List<String> kjzyIDList = new ArrayList<String>(); for (RecommendedItem item : items){ kjzyIDList.add(String.valueOf(item.getItemID())); } Map<String, Kjzy_resource> kjzy_resources = Kjzy_resourceTable.getKjzy _resourceMap(kjzyIDList) for (RecommendedItem item : items){ String kjzyID = String.valueOf(item.getItemID()); Kjzy_resource kjzy_resource=kjzy_resources.get(kjzyID); if(kjzy_resource != null){ RecommendKjzy_resource rm = new RecommendKjzy_resource(kjzy_resource, item.getValue()); recommendKjzy_resources.add(rm); } } } 以上三个实体类之间的关系如图 5-3 所示:
  • 30. 基于 Mahout 的推荐系统设计与实现 - 24 - 图 5-3 科技资源类图关系 接下来建立 kjzy_resource 表的 dataModel,生成 Kjzy_resourceDataModel 类。该类继 承 MySQLJDBCDataModel,该类的构造函数继承 MySQLJDBCDataModel 类的构造函 数。相关代码如下,DBUtil.getDataSource() 将返回应用的数据源,此应用是 J2EE 应用, 所以这里会采用 JDNI 的方式创建数据库链接。 public Kjzy_resourceDataModel() { super(DBUtil.getDataSource(), PERFERENCETABLE, USERID_COLUMN, ITEMID_COLUMN, PERFERENCE_COLUMN, TIMESTAMP_COLUMN); } 其中 PERFERENCETABLE、USERID_COLUMN、 ITEMID_COLUMN、PERFER ENCE_COLUMN 分别对应 kjzy_preference 表名、kjzy_preference 表内数据项 userID、 kjzyID、preference。 5.4 建立推荐引擎 5.4.1 基于用户推荐引擎的设计与实现 (1)基于 Mahout 编写基于用户的优化推荐算法,建立 UserBasedRecommender 类, 该类完成基于用户推荐的核心算法。核心代码如下: public UserBasedRecommender(DataModel model) throws TasteException { UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model); userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(model)); UserNeighborhood neighborhood =new NearestNUserNeighborhood(3, userSimilarity, model); recommender = new CachingRecommender(new
  • 31. 第 5 章 推荐功能设计与实现 - 25 - GenericUserBasedRecommender(model, neighborhood, userSimilarity)); } ① UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(model),我选用的 是基于 Pearson correlation(The Apache Software Foundation 2008)来计算用户相似度的 方法得到用户相似度。 ② userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(model))利用 AveragingPreferenceInferrer 类推断当用户并没有表现出任何偏好时,用户对资源的打 分,这可能是该用户对其他资源的打分所得的平均分。这种技术有时被称为“缺席投 票”。 ③ UserNeighborhood neighborhood =new NearestNUserNeighborhood(3,userSimilari ty, model)计算用户的邻居用户,我根据用户相似度计算出最邻近的 3 个用户作为推荐 用户。 ④ GenericUserBasedRecommender(model, neighborhood, userSimilarity),将以上得到 邻居用户neighborhood、用户相似度userSimilarity以及dataModel作为GenericUserBased Recommender 的构造参数传入,这样就完成了一个基于用户推荐引擎的编写。 (2)建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始 化、实例化。将 UserBasedRecommender 类的地址作为参数传入 Kjzy_resourceRecommend erSingleton 的构造函数,通过函数 asSubclass()将调用这个方法的 UserBasedRecommender .class 对象转换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以 在其他类使用自己编写的基于用户的推荐引擎。相关代码如下: private Kjzy_resourceRecommenderSingleton(String recommenderClassName){ ...... recommender =Class.forName(recommenderClassName).asSubclass( Recommender.class).newInstance(); ...... } 5.4.2 基于物品推荐引擎的设计与实现 (1)基于 Mahout 编写基于物品的优化推荐算法,建立 ItemBasedRecommender 类, 该类完成基于用户推荐的核心算法。核心代码如下: public ItemBasedRecommender(DataModel model) throws TasteException { ItemSimilarity itemSimilarity =new EuclideanDistanceSimilarity(model); recommender = new CachingRecommender(new GenericItemBasedRecommender(model, itemSimilarity)); } ① ItemSimilarity itemSimilarity =new EuclideanDistanceSimilarity(model)我选用的是
  • 32. 基于 Mahout 的推荐系统设计与实现 - 26 - 基于 Euclidean "distance"(The Apache Software Foundation 2008)来计算物品相似度的 方法得到物品相似度。这个相似度的计算基于两个用户之间的 X 和 Y,把用户想成尺寸, 把用户的偏好想成点,距离的计算使用那些两个用户对同一物品偏好表述的物品来计 算。 ② GenericItemBasedRecommender(model, itemSimilarity)将得到的物品相似度以及 dataModel 作为 GenericItemBasedRecommender 的构造参数传入,这样就完成了一个基 于物品推荐引擎的编写。 (2)建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始 化、实例化。将 ItemBasedRecommender 类的地址作为参数传入 Kjzy_resourceRecomme nderSingleton 的构造函数,通过函数 asSubclass()将调用这个方法 ItemBasedRecommender .class 对象转换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以 在其他类使用自己编写的基于用户的推荐引擎。相关代码如下: private Kjzy_resourceRecommenderSingleton(String recommenderClassName){ ...... recommender =Class.forName(recommenderClassName).asSubclass( Recommender.class).newInstance(); ...... } 5.4.3 Svd 推荐引擎的设计与实现 (1)基于 Mahout 编写基于 Svd 算法的优化推荐算法,建立 SvdRecommender 类, 该类完成基于 Svd 算法推荐的核心算法。核心代码如下: public SvdRecommender(DataModel model) throws TasteException { recommender = new CachingRecommender(new SVDRecommender(model,7,10)); } SVDRecommender(model,7,10)中 Svd 推荐算法使用矩阵分解,投影用户和项目到一 个特征空间(The Apache Software Foundation 2008)。其中第二个整型参数表示特征值 数量(numFeatures),第三个整型参数表示初始步数(initialSteps)。将这两个自己设定的参 数以及 dataModel 作为 SVDRecommender 的构造参数传入,就完成了一个 Svd 推荐引 擎的编写。 (2) 建立 Kjzy_resourceRecommenderSingleton 类完成自己编写的推荐引擎的初始 化、实例化。将 SvdRecommender 类的地址作为参数传入 Kjzy_resourceRecommenderSin gleton 的构造函数,通过函数 asSubclass()将调用这个方法 SvdRecommender.class 对象转 换成由 Mahout 内置的推荐类所表示的 class 对象的某个子类,这样就可以在其他类使用 自己编写的基于用户的推荐引擎。相关代码如下: private Kjzy_resourceRecommenderSingleton(String recommenderClassName){
  • 33. 第 5 章 推荐功能设计与实现 - 27 - ...... recommender =Class.forName(recommenderClassName).asSubclass( Recommender.class).newInstance(); ...... } 5.5 Action 类中完成推荐功能 (1)实例化推荐引擎。代码如下: Kjzy_resourceRecommenderSingleton.initializeIfNeeded("com.transfer.mahout.recommendat ion.SvdRecommender"); recommender = Kjzy_resourceRecommenderSingleton.getInstance().getRecommender(); (2)通过 recommend()方法实现推荐并返回结果,howMany 表示推荐多少个。代 码如下: List<RecommendedItem> items = recommender.recommend(userID1, howMany); (3)将 RecommendItem 类型的返回值转换成 RecommendKjzy_resource 类型,最终 将 RecommendKjzy_resource 类型的 list 作为返回值给前端页面。代码如下: RecommendKjzy_resourceList kjzy_resourceList = new RecommendKjzy_resourceList(item s); recommendKjzy_resources=kjzy_resourceList.getRecommendKjzy_resources(); 5.6 页面显示 在 前 端 jsp 页 面 通 过 <s:iterator value="recommendKjzy_resources" id="entry"> </s:iterator> 获取推荐信息并显示。其中 value 值和 Action 类中最为返回值的 list 表名一 致。通过<s:property value="kjzy_resource.techreid"/>获取科技资源的相关信息显示在页 面。图 5-4 显示了推荐功能的页面显示: 图 5-4 前端页面显示
  • 34. 基于 Mahout 的推荐系统设计与实现 - 28 - 5.7 本章小结 本章详细的介绍了系统推荐功能的开发流程。首先在系统搭建好的架构中添加 Mahout 支持,接着建立数据库连接,创建数据模型。然后着重描述了三种核心推荐算 法的实现以及相关代码展示。最后介绍了如何将推荐结果返回给前台页面,并配图显示 页面推荐结果展示效果。
  • 35. 第 6 章 推荐功能测试 - 29 - 第 6 章 推荐功能测试 6.1 召回率与查准率 Mahout 提供了 2 个评估推荐器的指标,查准率和召回率,这两个指标是搜索引擎 中经典的度量方法。 6.1.1 召回率 召回率(Recall)是相关被检索到的结果集除以相关的被检索到的结果集和相关的未 被检索到的结果集之和的百分比,召回率越大越好(张丹 2013)。如图 6-1 以图的形 式简单明了的说明了召回率的概念。 图 6-1 召回率图示 6.1.2 查准率 查准率(precision)是不相关被检索到的结果集除以不相关的被检索到的结果集和相 关的被检索到的结果集之和的百分比,查准率越大越好(张丹 2013)。如图 6-2 以图 的形式简单明了的说明了查准率的概念。 图 6-2 查准率图示
  • 36. 基于 Mahout 的推荐系统设计与实现 - 30 - 6.2 基于用户的推荐测试 基于用户的推荐算法主要在求取被推荐用户的邻居用户处进行测试比较其返回推 荐结果集的召回率、查准率以及 AVERAGE_ABSOLUTE_DIFFERENCE。通过前一节 对 召 回 率 以 及 查 准 率 的 介 绍 , 召 回 率 以 及 查 准 率 越 大 越 好 , 而 AVERAGE_ABSOLUTE_DIFFERENCE 越 低 越 好 。 测 试 部 分 主 要 是 针 对 语 句 : NearestNUserNeighborhood(3, userSimilarity, model),通过改变推荐用户数量来选择最优 的做为用户推荐算法的邻居推荐。 (1)推荐 5 个邻居用户,即 NearestNUserNeighborhood(5, userSimilarity, model)。 测试结果如图 6-3 所示,AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.7042,但在计算 召回率和查准率时抛出异常:NaN,原因是因为数据库中用户偏好表中和被推荐用户偏好 一致的不足 5 人。 图 6-3 推荐 5 邻居用户结果 (2)推荐 4 个邻居用户,即 NearestNUserNeighborhood(4, userSimilarity, model)。 测 试 结 果 如 图 6-4 所 示 , 召 回 率 约 为 0.3333 、 查 准 率 为 0.25 、 AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9511。 图 6-4 推荐 4 邻居用户结果 (3)推荐 3 个邻居用户,即 NearestNUserNeighborhood(3, userSimilarity, model)。 测 试 结 果 如 图 6-5 所 示 , 召 回 率 约 为 0.3333 、 查 准 率 约 为 0.6667 、 AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.0277。 图 6-5 推荐 3 邻居用户结果 (4)推荐 2 个邻居用户,即 NearestNUserNeighborhood(2, userSimilarity, model)。 测 试 结 果 如 图 6-6 所 示 , 召 回 率 为 0.125 、 查 准 率 为 0.5 、 AVERAGE_ABSOLUTE_DIFFERENCE 为 2.5。
  • 37. 第 6 章 推荐功能测试 - 31 - 图 6-6 推荐 2 邻居结果 (5)推荐 1 个邻居用户,即 NearestNUserNeighborhood(1, userSimilarity, model)。 测试结果如图 6-7 所示,AVERAGE_ABSOLUTE_DIFFERENCE 为 1.0,但在计算查准 率和召回率时再次显示异常:NaN,推荐的邻居数量太少,推荐结果极其不稳定。 图 6-7 推荐 1 邻居结果 由 上 述 结 果 可 以 看 出 推 荐 邻 居 数 量 为 3 的 时 候 , AVERAGE_ABSOLUTE_DIFFERENCE 值最小,表示越精确,并且 precision 值也是最 大的。因此在基于用户的推荐引擎实现时设定推荐邻居数量为 3。 6.3 基于 Svd 的推荐测试 基于 Svd 的推荐测试通过更改特征值数量来进行测试,选出最优的结果。 (1)特征数量为 10,即 SVDRecommender(model,10,10)。测试结果如图 6-8 所示, AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1750,召回率为 0.375,查准率为 0.375。 图 6-8 特征数量为 10 的测试结果 (2)特征数量为 9,即 SVDRecommender(model,9,10)。测试结果如图 6-9 所示, AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1487,召回率为 0.375,查准率为 0.375。 图 6-9 特征数量为 9 的测试结果 (3)特征数量为 8,即 SVDRecommender(model,8,10)。测试结果如图 6-10 所示, AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.1022,召回率为 0.375,查准率为 0.375。 图 6-10 特征数量为 8 的测试结果
  • 38. 基于 Mahout 的推荐系统设计与实现 - 32 - (4)特征数量为 7,即 SVDRecommender(model,7,10)。测试结果如图 6-11 所示, AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9918,召回率为 0.375,查准率为 0.375。 图 6-11 特征数量为 7 的测试结果 (5)特征数量为 6,即 SVDRecommender(model,6,10)。测试结果如图 6-12 所示, AVERAGE_ABSOLUTE_DIFFERENCE 约为 1.0911,召回率为 0.375,查准率为 0.375。 图 6-12 特征数量为 6 的测试结果 通过比较以上测试结果可以看出,召回率和查准率时一样的。这时主要看 AVERAGE_ABSOLUTE_DIFFERENCE,当特征值数量在大于等于 7 的时候一直是递减 的,在特征数量为 6 的时候,AVERAGE_ABSOLUTE_DIFFERENCE 值变大了。于是, 我选择设定特征数量为 7 来实现基于 Svd 的推荐引擎。 6.4 三种推荐引擎的测试优化 (1)基于用户的推荐算法选择推荐邻居为 3 的最优来进行比较测试。测试结果如 图 6-13 所示,召回率约为 0.3333、查准率约为 0.6667、AVERAGE_ABSOLUTE_DIFFERE NCE 约为 0.0277。 图 6-13 基于用户推荐的测试结果 (2)基于物品的推荐算法测试结果如图 6-14 所示,召回率和查准率均为 0,分析 数 据 库 是 因 为 数 据 库 中 其 他 用 户 和 用 户 1 没 有 过 多 相 同 物 品 打 分 的 交 集 , AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.8046。 图 6-14 基于物品推荐的测试结果 (3)基于 Svd 的推荐算法选择特征数量为 7 的最优来进行比较测试,测试结果如 图 6-15 所示,AVERAGE_ABSOLUTE_DIFFERENCE 约为 0.9918,召回率为 0.375,查
  • 39. 第 6 章 推荐功能测试 - 33 - 准率为 0.375。 图 6-15 基于 Svd 推荐的测试结果 分析以上数据 AVERAGE_ABSOLUTE_DIFFERENCE 大小排序:基于用户<基于 物品<基于 Svd,召回率大小排序:基于 Svd>基于用户>基于物品,查准率大小排序: 基于用户>基于 Svd>基于物品。AVERAGE_ABSOLUTE_DIFFERENCE 最小的是基于用 户的推荐算法,召回率最大的是基于 Svd 的推荐算法,查准率最大的是基于用户的推荐 算法。虽然基于用户的推荐算法在召回率的比较上不是最优的,但是其余两项为最优。 综合来看,应该在三种中选择基于用户的推荐算法嵌入技术转移集成服务平台。但是数 据量和数据分布,会影响算法的评分,根据本系统的数据库来说,在用户偏好表中,用 户数量不多,选择基于用户的推荐算法计算的更快速。 6.5 本章小结 本章首先简要介绍了测试所用到的两个概念:召回率和查准率,以数学模式解释其 原理。接下来着重对系统的测试结果进行比较,先对基于用户的推荐算法及基于 Svd 的 推荐算法测试,再将三种推荐算法相互比对测试,通过检测数据选出推荐性能相对较好 的作为系统的核心推荐算法。
  • 40. 基于 Mahout 的推荐系统设计与实现 - 34 - 第 7 章 总结与展望 7.1 总结 本文先介绍课题研究目的意义、背景阐述推荐系统开发的重要性,同时简述开发推 荐系统的相关技术。接下来按照需求分析、总体设计、数据库设计、设计与实现、测试 等五个方面详细叙述基于 Mahout 的推荐系统的开发流程。在设计与实现阶段实现了基 于用户、基于物品、Svd 三种核心算法,通过测试阶段的数据显示:召回率和查准率确 定将基于用户的推荐算法做为本系统的核心算法,实现对科技资源信息和成果资源信息 的推荐,同时为使算法更精确的计算用户偏好,科技资源模块实现打分功能。 在实现了以上功能的基础上,基于 Mahout 的推荐系统的实现还存在一定的缺陷。 首先在界面显示方面,推荐结果如果利用图片加标题的展示会比单纯的标题交互性好。 其次没有实现以搜索形式查看相关分类下推荐信息的功能,用户不能有过多的自定义搜 索。最后,Mahout 推荐算法有多种组合,系统仅实现了三种推荐算法,设计的不够完 善。 7.2 展望 目前,推荐系统所推荐出来的内容仍不够精确,推荐内容和用户实际偏好不符的情 况时常发生,同时网站的推荐信息显示不够友好。因此,推荐算法的研究仍有很大的提 升空间,在 21 世纪的大数据时代,对 Mahout 算法的研究优化是今后算法开发的一个主 流 方 向 。
  • 41. 参考文献 - 35 - 参考文献 陈虹君.2008.Java Web 与数据库连接池技术的应用研究与实践[硕士学位论文].西安:电子科技大学 方永; 李建民.2005 基于 JNDI 的 JDBC 实例化对象在数据库连接缓冲池中的研究与实现.计算机与 现代化.12(10~25) 张丹.2013.Mahout 推荐算法 API 详解.http://blog.fens.me/mahout-recommendation-api[2015-03 -05] 张丹.2013.Mahout 分步式程序开发 基于物品的协同过滤 ItemCF.http://blog.fens.me/hadoop-ma hout-mapreduce-itemcf/[2015-03-05] 张丹.2013.用 Maven 构建 Mahout 项目.http://blog.fens.me/hadoop-mahout-maven-eclipse/[2015 -03-05] The Apache Software Foundation.2008.Apache Mahout 0.11.0-SNAPSHOT API.https://build s.apache.org/job/mahout-quality/javadoc/overview-summary.html[2015-04-10] Grant Ingersoll.2009.通过可伸缩、商业友好的机器学习来构建智能应用程序.http://www.ibm.co m/developerworks/cn/java/j-mahout/index.html[2015-03-01] 马春娥,赵晨婷.2010.基于 Apache Mahout 构建社会化推荐引擎.http://www.ibm.com/develope rworks/cn/java/j-lo-mahout/[2015-04-20] Jerome.rong.2012.Taste 架构分析.http://www.cnblogs.com/jerome-rong/archive/2012/05/22 /2512484.html[2015-04-05] Bornhe.2012.Mahout 之(四)Taste 的架构和部署 Demo.http://www.douban.com/note/2189179 42/?qq-pf-to=pcqq.c2c[2015-04-21] 樊哲.2014.Mahout 算法解析与案例实战.北京:机械工业出版社:270 Piero Giacomelli,靳小波.2014.Mahout 实践指南.北京:机械工业出版社:167 马宁.2013.基于 Mahout 的推荐系统的研究与实现[硕士].兰州:兰州大学 谭昶.2014.基于面向对象思想和典型用户群组的个性化推荐方法研究.北京:中国科学技术大学 陶维成; 王婷婷; 姚琪.2014.基于 Mahout 的推荐系统构建.重庆科技学院学报(自然科学 版),02:143~146 刘士琛.2014.面向推荐系统的关键问题研究及应用[博士].北京:中国科学技术大学 刘鲁; 任晓丽.2008.推荐系统研究进展及展望.信息系统学报.01:44~46 王国霞; 刘贺平.2012.个性化推荐系统综述.计算机工程与应用.07:67~70 曹毅.2007.基于内容和协同过滤的混合模式推荐技术研究[硕士].长沙:中南大学 Arantxa Duque Barrachina;Aisling O’Driscoll.2014.A big data methodology for categorising technical support requests using Hadoop and Mahout.Journal of Big Data.Vol.1 (1):1~11 Isaac Triguero;Daniel Peralta;Jaume Bacardit;Salvador García;Francisco Herrera.2014.MRPR: A MapReduce solution for prototype reduction in big data classification.Neurocomputing ,10:20~23 M. M. Fouda;M. Ali-Muharrami.1995.An initial assessment of mangrove resources and human activities at Mahout Island, Arabian Sea, Oman.Hydrobiologia,Vol.295 (1): 353-~362
  • 42. 基于 Mahout 的推荐系统设计与实现 - 36 - 致 谢 回顾大学四年,一步步走来,有过失意落寞,有过成功后的喜悦,这都是我成长的 必经之路。最后的一份作业:毕业设计也完成了,要感谢的人很多。 首先要感谢的是毕业设计导师朱珊娜老师,从确立课题到前期新知识学习以及开发 过程,她一步步指引我。前期就给我很多与课题相关的网站资源、文献等等,在积累很 多知识之后,进入到系统开发就很容易上手。在网站界面设计上,导师也跟我一起反复 修改确立用户交互感好的页面布局,给了我很多建议。因此,一个毕业设计的完成,让 我在老师的引导下学到了很多知识,例如对于 Mahout 这个新知识从不知道到学会如何 使用并且进行一定的测试优化等等。最后,在论文一次次的修改过程中,通过满满的标 记,就能感受到导师对我论文修改的用心。在这里,我要对她说句谢谢。 接下来,我要感谢研究生学姐。在代码开发过程中,出现过多次自己解决不了的问 题,都是在学姐的帮助下,一起调试代码,发现问题,解决问题。我也要感谢她。 最后要感谢在大学四年教导我的每一位老师,他们一直在我的学习中,项目开发中 默默的帮助我,不厌其烦的解答我所遇到的问题。在团队的工作中,给我们提供了很好 的开发环境,外界条件。在这里,我要对他们说声谢谢。 最后向评审本论文,参加论文答辩的各位老师表示最衷心的感谢。