首页>参考读物>计算机科学与技术>软件与程序设计

Mahout实践指南
作者 : (美) Piero Giacomelli 著
译者 : 靳小波 译
丛书名 : 大数据技术丛书
出版日期 : 2014-06-04
ISBN : 978-7-111-46714-4
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 189
开本 : 16
原书名 : Apache Mahout Cookbook
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

在为大规模数据集提供数据挖掘分类算法方面,Mahout已经获得业界同行的广泛共识。它通过Hadoop架构为编程人员实现数据挖掘任务提供了一个易用的框架。本书以全新的视角,既深入阐释如何编写可用于Hadoop的各种数据挖掘算法,又通过以解决方案为中心的方式详细讲解利用Mahout进行数据挖掘的各种技术实现细节。本书的最终目的是帮助你使用不同的算法解决各种各样的数据挖掘任务并且对它们做出评价,然后选择对你的任务而言最好的一个算法。

通过阅读本书,你将学到:
使用NetBeans和Maven配置一个完整的开发环境
处理序列格式的文件以获取更好的性能
使用Sqoop查询关系数据库管理系统并存储结果
使用logistic回归预测
通过朴素贝叶斯方法理解原始数据的文本挖掘
创建和理解聚类
通过定制Mahout来评价不同的聚类算法
使用MapReduce方法解决现实世界的数据挖掘问题

作者简介
Piero Giacomelli 资深软件技术专家,精通Java、.NET和PHP等多种编程语言,尤其对Java语言有独到见解。他曾先后在多家大中型公司担任行政和技术职务,包括航空航天、网络服务、塑料制造业和电子健康协会。他在FP7欧盟项目中参与了多项欧盟研究基金资助的工程,如CHRONIOUS、I-DONT-FALL、FEARLESS和CHROMED等。他在科研期刊上发表了若干篇论文,并两次获得由IARIA颁发的最佳论文奖。2012年,他出版了Apache HornetQ框架标准参考书《HornetQ Messaging Developer’s Guide》。

本书是软件开发专家数十年行业经验的结晶,深入浅出地论述如何使用Mahout进行数据分类、聚类和预测,涉及Mahout开发环境、序列文件使用方式、整合Mahout和外部资源、实现朴素贝叶斯分类器、股市预测、顶棚聚类、频谱预测、K-均值聚类等。本书是面向编程的,不涉及深奥的理论,简单、易学,可以帮助读者快速掌握Mahout的基本用法,实用性强。
全书共分10章。第1章介绍如何在单台机器上创建完整的Mahout开发环境。第2章重点介绍序列文件的使用方式。第3章详细介绍如何使用命令行工具和代码从RDBMS中读写数据。第4章详细讨论朴素贝叶斯分类器和互补朴素贝叶斯分类器的使用方法。第5章介绍如何使用logistic回归和随机森林预测股市。第6章描述Mahout框架中最常用的算法,包括大数据的聚类分析和分类。第7章描述频谱聚类的使用方式。第8章描述使用K-均值(包括序列方式和MapReduce方式)对主题中的文本文档进行分类。第9章介绍频繁模式挖掘算法的使用方式。第10章描述使用遗传算法解决旅行商问题和提取规则。

图书前言

在最近的10年,社会化网络的出现和移动设备的发明极大地改变了我们处理数据的方式。
为了帮助你了解究竟发生了什么,我们不得不提到在2012通过Qmee做的一项研究:在60秒里展示互联网上经常发生的事情。结果参考http://blog.qmee.com/qmee-online-in-60-seconds/,它告诉我们在过去的每一秒里Twitter收到278 000条推文(tweet),Facebook收到41 000条post,YouTube已上传了时长达72小时的视频。这些算是很大的网站了,但是即使是具有国家或国际背景的网站,因收集网站的日志而拥有上百万的记录也是很平常的。
为管理如此海量的信息,需要编写新框架来实现不同机器之间的计算任务共享。Hadoop是Apache编写的算法解决方案,它可以将计算任务分配到不同的硬件架构上运行。
当你需要分析上亿条数据记录时,在大多数情况下,你的目的是通过信息提取来发现数据之间的新关系。传统上,数据挖掘算法就是为这个目的发展起来的。然而,当处理非常大的数据集时,无法在一个合理的时间里实现数据挖掘任务。Mahout是一个数据挖掘框架,可以和Hadoop一起应用数据挖掘算法处理大规模数据集上的数据挖掘任务,它使用了封装在Hadoop里面的MapReduce例程。所以,Mahout通过Hadoop架构的这个底层接口为编程人员进行数据挖掘任务提供了一个易用的框架。
本书将通过一些实例向你展示怎么使用Mahout进行数据挖掘,以及数据挖掘的不同方法。最关键的是,使用一种简洁通俗的方法向你展示使用Mahout对数据进行分类、聚类和预测的方式。本书是面向编程的,所以我们并不想在步骤中过多地引入其理论背景,但是我们会给有能力的读者一些参考文献以进行更深一步研究。当写这本书时,我们面临的主要挑战是:
根据我的经验,Mahout有着非常高的学习曲线,主要原因是算法使用了MapReduce方法,该方法不同于序列方法。
数据挖掘算法本身就不太容易理解,它们在某些情况下需要一些特殊的技能,而开发人员不一定具备这样的技能。
于是我们尽力使用一种面向源码的方式让读者能抓住每一段代码的含义和目的,但是又不需要深入理解其背后的实现机制。
这种方法的效果由你来判断,而且我们希望你在阅读的时候能够发现一些乐趣,就像我们在写作的时候获得的一样。
本书的组织
第1章描述如何在单台机器上创建一个完整的开发环境。通过编写一个推荐算法使得数据挖掘操作的所有代码片段均以Hadoop的方式呈现(包括引入的JAR库等),这非常清晰地展现在没有任何背景的读者面前。
第2章介绍序列文件。当使用Hadoop和Mahout时,序列文件是个比较关键的概念。在多数情况下,Mahout并不直接操作要使用的数据集,所以在没有编码算法之前,我们需要描述如何对待这些特别的文件。
第3章详细介绍使用命令行工具和代码从RDBMS中读写数据。
第4章详细介绍如何使用朴素贝叶斯分类器分类文本文档。全面地描述如何将文档单词转化为包括单词出现次数的向量,并展示如何使用Java编写朴素贝叶斯分类器和互补朴素贝叶斯分类器。
第5章主要涉及两个算法:logistic回归和随机森林(Random Forests)。它们展示了通过分析某些普通数据就可能预测其未来值。
第6章描述Mahout框架中最常用的算法,其中包括大数据的聚类分析和分类任务。在这一章,通过一些实例介绍使用顶棚聚类围绕聚类中心聚合数据向量。
第7章继续介绍Mahout中的聚类分析算法。该章描述了频谱聚类的使用方式,它在对图形式的链接信息进行分类时是非常有效的。
第8章描述了使用K-均值聚类(包括序列方式和MapReduce方式)对主题中的文本文档进行分类。我们将通过命令行方式和Java编码的方式解释如何使用该算法。
第9章介绍一个比较老的,称为频繁模式挖掘(Frequent Pattern Mining)的算法。该算法通过过去顾客的购买情况来预测哪些东西应该放在一块出售。Latent Dirichlet算法将用于文本分类。
第10章描述了如何在Mahout中使用遗传算法解决旅行商(Travelling Salesman)问题和提取规则。我们将会看到如何使用Mahout的不同版本来使用这些算法。
阅读本书你需要什么
在第1章中,我们将介绍本书需要的所有软件。本书中所有的例子均在Ubuntu 10.04简易发行版和Oracle公司的Virtual Box 平台上编程实现。
本书的读者
本书对希望以一种新颖、快速的方式来入门Mahout的开发人员是比较理想的。阅读本书不需要了解Mahout,有经验的开发人员或系统管理人员也可以从本书中受益。
下载示例代码
你可以通过你的账号(在网站http://www.packtpub.com)下载在Packt上购买的书籍的所有示例代码。如果你在别的地方购买本书,可以访问http://www.packtpub.com/support并注册,我们将会通过电子邮件直接把文件发送给你。
勘误表
尽管我们尽了最大的努力来确保内容的准确性,但错误在所难免。如果你在书中找到错误,无论在文中或代码中,我们会非常感谢你给我们报告了这些错误。你这么做,可以避免其他读者遭受困扰,并且我们将在随后的再版中改进。如果你发现任何错误,请通过访问http://www.packtpub.com/submit-errata来报告它们:选择你所购买的书名,点击“errata submission form”链接,输入错误的详细细节。一旦你报告的错误得到确认,你的提交将会被接受,并且勘误表将会在我们的网站上更新或者加入已经存在的勘误列表中。通过网址 http://www.packtpub.com/support选择书号,你可以看到现有的勘误条目。

关于评阅者
Nicolas Gapaillard是Java架构方面的一位热情的自由撰稿人,他了解Java和开源领域中的创新项目。
他曾在开源软件公司Linagora(http://www.linagora.com)的证券部门从事开发工作,由此开始他的职业生涯。该部门旨在开发一个围绕交易安全的开源软件,包括证书管理、密钥文档的存储和认证机制。
之后,他在Smile开源软件整合项目中任职Java技术方面的开发人员、培训人员和技术领导者。
有了上述从业经历之后,他决定创办自己的公司(名为BIGAP,http://bigap.fr),该公司主要做自由撰稿业务,这使得他有更多的时间来学习和研究创新项目。
其中有一个业务是为名为Onecub的法国公司实现根据顾客的类别自动分类电子商务方面的电子邮件。当时,仅仅Mahout可以提供“拿来即用”的算法来解决这些问题。从那以后,Nicolas开始深入地研究Mahout项目和数据挖掘领域。
某一天,Packt出版社看到他撰写的文章(http://nigap.blogspot.fr)并邀请他为该书撰写评论,他非常愉快地接受了这项任务。
我非常感谢本书作者为保证书的质量而做出的努力,我也感谢Packt出版社,他们信任我,让我撰写该书的评论,他们非常仔细地管理整个流程,并且允许我评论该书的修订。我还想感谢其他的评论人为本书的修订和内容的质量而提供的帮助,感谢我的妻子让我有自由的时间来写这些评论。
Vignesh Prajapati是Pingax公司大数据方面的科学家。他热爱开源技术(比如R语言、Hadoop、MongoDB和Java语言),主要工作就是使用机器学习、R语言、RHadoop和MongoDB进行数据分析。他在多个算法方面是专家,例如数据ETL、电子商务、Google历史分析和其他数据集的生成推荐、分析和行为定位等。他也撰写了几篇文章来阐述使用R语言、Hadoop和机器学习实现高效的智能大数据应用。他的联系方式是vignesh2066@gmail.com或http://in.linkedin.com/in/vigneshprajapati/。
除了本书以外,Packt还有两本书与他有关:他是《Big Data Analytics with R and Hadoop》一书的作者(Packt出版,https://www.packtpub.com/big-data-analytics-with-r-and-hadoop/book),他也为《Data Manipulation with R》一书(作者:DeMystified,Packt出版)撰写评论。
我感谢Packt出版社提供的这个难得的机会,感谢我的家庭、朋友和Packt出版团队激励和支持我为开源技术贡献自己的力量。
Shannon Quinn将在Carnegie Mellon大学(匹兹堡)攻读计算生物方向的博士学位。他的研究兴趣是和他的导师Chakra Chennubhotla博士一起将谱图理论、机器视觉和模式识别用于生物图像识别,为生物监控构建实时分布式的框架。他还参与了Apache Mahout和其他开源项目的开发工作。
致  谢
感谢我的家庭在我写书的最为紧张和激动人心的几个月里给予的支持。
感谢我的妻子Michela,她每天激励我成为一个更好的人,而我母亲Milena在我结婚前就已经这样做了。另外,要感谢Lia和Roberto,每次只要我们有所求,他们都会尽力帮助。
还要特别感谢整个Packt出版团队,感谢Gaurav Thingalaya、Amit Singh、Venu Manthena、Shiksha Chaturvedi、Llewellyn F. Rozario、Amey Varangaonkar、 Angel Jathanna和Abhijit Suvarna,他们对我给予了足够的耐心,尽管他们没有特别的原因要这么做。
最后,当我写这本书的时候,我找到一个新工作,这要感谢Giuliano Bedeschi。他和他的两个儿子Giovanni和Edoardo一手创办了SPAC公司,这是我值得为之骄傲的为数不多的公司之一。在这个过渡期间,SPAC公司的同事们真正地给予了我很大的帮助。

上架指导

计算机

封底文字

在为大规模数据集提供数据挖掘分类算法方面,Mahout已经获得业界同行的广泛共识。它通过Hadoop架构为编程人员实现数据挖掘任务提供了一个易用的框架。本书以全新的视角,既深入阐释如何编写可用于Hadoop的各种数据挖掘算法,又通过以解决方案为中心的方式详细讲解Mahout进行数据挖掘的各种技术实现细节。本书的最终目的是帮助你使用不同的算法解决各种各样的数据挖掘任务并且对它们做出评价,然后选择对你的任务而言最好的一个算法。
通过阅读本书,你将学到:
·使用NetBeans和Maven配置一个完整的开发环境
·处理序列格式的文件以获取更好的性能
·使用Sqoop查询关系数据库管理系统并存储结果
·使用logistic回归预测
·通过朴素贝叶斯方法理解原始数据的文本挖掘
·创建和理解聚类
·通过定制Mahout来评价不同的聚类算法
·使用MapReduce方法解决现实世界的数据挖掘问题

作者简介

(美) Piero Giacomelli 著:暂无简介

译者简介

靳小波 译:暂无简介

译者序

机器学习是人工智能领域里的一个重要分支,是进行复杂数据分析和构建智能系统的一个十分重要的研究方向。互联网数据不断地爆炸性增长标志着大数据时代的来临,机器学习领域在处理大规模数据时将面临新的挑战。研究者除了从软件方面发明新的时间复杂度更低的可扩展的算法之外,还应积极地从硬件架构方面进行改进,其中值得关注的方向有两个:将并行计算和分布式计算引入机器学习。
并行计算当前的热门方向是GPU计算,将传统上同时运行在多台机器上的任务交给单台机器上的图形处理器处理,这使得并行计算的费用大大降低。Shane Cook撰写的《CUDA并行程序设计:GPU编程指南》是这方面的经典参考书。GPU的技巧已经大规模地应用到机器学习领域以改进传统的算法,两个有代表性的GPU机器学习库是Theano和GPUMLib。
分布式方面最有代表性的工作是Apache Hadoop。它支持在大型集群中运行应用程序。最为重要的是,该架构是Java语言编写的开源软件框架,它实现了Google的Map/Reduce框架,可供商业或科研免费使用。Mahout库就是在这样的背景下产生的。它建立在Hadoop的基础上,主要用于处理大规模的机器学习问题,其中核心算法有聚类、分类、协同过滤。同样,该库是开源免费的,且支持商业级别的机器学习方面的应用。
针对从事机器学习应用方面的开发人员以及机器学习理论研究方面的科研人员使用Mahout,本书提供了非常有价值的参考。作者在将Mahout用于商业领域方面经验丰富,本书旨在降低Mahout初学者的入门门槛。本书特点如下:
通过分析大量的实例,展示了如何更好地使用Mahout算法,主要有分类算法、聚类算法以及遗传算法。
由浅入深讲解实例,帮助读者逐步掌握Mahout的应用方法。
图文并茂,让读者及时了解每一步操作之后的效果,帮助读者更好地检验学习进度。
写作方式独特,通过编码的方式帮助读者了解代码的目标及含义,避开代码背后复杂的机理。
避开烦琐的数学表述,通过具体而形象的描述,让读者直观了解机器学习技术。
值得一提的是,Mahout主要用在Linux平台上,但是对于使用Windows系统的大部分读者来说,这并不是一个障碍。本书通过详尽的描述,让不熟悉Linux的读者也可以学到Linux的基本使用技巧。实际上,本书中所有的代码都是在Windows系统下编写的,作者通过在Windows上安装Virtual Box软件来使用Linux平台,这种方式为那些Windows系统下的开发者使用Mahout库提供了一个良好的建议。
为了方便读者正确、迅速地理解本书,译者对本书的一些错误进行了修正,并在某些表述不太清楚的地方添加了注释,希望对读者理解本书内容有所帮助。然而,不得不承认,尽管译者从事的研究方向是机器学习,但由于水平有限,本书难免存在错误。欢迎读者及时向出版社指出,便于再版时予以更正。
特别感谢机械工业出版社编辑为本书出版所付出的辛勤劳动。
最后,感谢夫人靖莹以及耿光刚博士在文字校稿方面给予的支持和帮助。
靳小波

图书目录

译者序
前言
关于评阅者
致谢
第1章 Mahout入门 / 1
秘笈1 安装Java和Hadoop / 1
秘笈2 设置Maven和NetBeans开发环境 / 6
秘笈3 编写一个基本的推荐系统 / 9
第2章 使用序列文件——什么时候和为什么 / 19
秘笈4 从命令行创建序列文件 / 20
秘笈5 编写代码创建序列文件 / 23
秘笈6 编码实现读取序列文件 / 28
第3章 将Mahout和外部资源整合 / 33
秘笈7 导入外部资源到HDFS / 34
秘笈8 将数据从HDFS导入到RDBMS / 43
秘笈9 创建一个Sqoop作业来处理RDBMS / 45
秘笈10 使用Sqoop API导入数据 / 47
第4章 实现朴素贝叶斯分类器 / 49
秘笈11 使用Mahout文本分类器演示基本的使用样例 / 50
秘笈12 编码实现朴素贝叶斯分类器 / 60
秘笈13 通过命令行使用互补朴素贝叶斯 / 64
秘笈14 编码使用互补朴素贝叶斯分类器 / 65
第5章 股市预测 / 67
秘笈15 为logistic回归准备数据 / 67
秘笈16 使用logistic预测GOOG股票动态 / 71
秘笈17 通过Java编码使用自适应的logistic回归 / 76
秘笈18 在大规模的数据集上使用logistic回归 / 79
秘笈19 使用随机森林预测市场动态 / 83
第6章 顶棚聚类 / 87
秘笈20 基于命令行的顶棚聚类 / 87
秘笈21 基于带参数命令行的顶棚聚类 / 91
秘笈22 通过Java代码使用顶棚聚类 / 95
秘笈23 编写你自己的距离估计 / 98
第7章 频谱聚类 / 101
秘笈24 通过命令行使用EigenCuts / 101
秘笈25 在Java代码中使用EigenCuts / 104
秘笈26 从原始数据创建相似度矩阵 / 108
秘笈27 使用频谱聚类进行图像分割 / 114
第8章 K-均值聚类 / 119
秘笈28 在Java代码中使用K-均值聚类 / 119
秘笈29 使用K-均值聚类对交通事故进行聚类 / 124
秘笈30 使用MapReduce进行K-均值聚类 / 128
秘笈31 命令行方式使用K-均值聚类 / 132
第9章 软计算 / 139
秘笈32 使用Mahout进行频繁模式挖掘 / 139
秘笈33 为频繁模式挖掘创建评价准则 / 142
秘笈34 在Java代码中使用频繁模式挖掘 / 147
秘笈35 使用LDA创建主题 / 153
第10章 实现遗传算法 / 159
秘笈36 设置Mahout以便使用遗传算法 / 159
秘笈37 在图上使用遗传算法 / 163
秘笈38 在Java代码中使用遗传算法 / 167

教学资源推荐
作者: (美)Maurice Herlihy 布朗大学 Nir Shavit 麻省理工学院 著
作者: 丁山 朱留存 编著
参考读物推荐
作者: 罗江宇 赵士杰 李涵淼 闵文俊 著
作者: 《电脑编程技巧与维护》杂志社
作者: 罗攀 蒋仟 编著