首页>参考读物>计算机科学与技术>综合

Scala机器学习
作者 : [美]亚历克斯?科兹洛夫(Alex Kozlov) 著
译者 : 罗棻 刘波 译
丛书名 : 大数据技术丛书
出版日期 : 2017-07-04
ISBN : 978-7-111-57215-2
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 215
开本 : 16
原书名 : Mastering Scala Machine Learning
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

全面、系统讲解使用Scala在Spark平台上实现机器学习算法的实用技术、方法和最佳实践
提供大量有针对性的编程实例,助你充分利用Scala、Spark和Hadoop提升数据分析和处理的工程实战能力

本书旨在丰富你的知识,并讲述如何构建高级的应用程序。在使用REPL对函数式编程的概念进行简单介绍后,将给出一些设置开发环境和修改数据的实际例子。然后介绍在Spark和MLlib上使用k-means和决策树。如今产生的大多数数据都是非结构化的原始数据,本书还会介绍如何使用高级主题(如回归、分类、集成和图算法)处理这类数据。最后介绍如何使用Scala执行复杂的概念分析,监控模型性能,并构建模型存储库。

通过阅读本书,你将学会:
使用Scala的REPL环境来提升函数式编程能力
使用Scala运行标准的机器学习高级算法
熟悉大数据技术,并理解为什么对大数据采用函数式编程
研究新的数据结构、算法和方法,并养成有效利用大数据的习惯
了解机器学习中的监督学习和无监督学习的原理
使用非结构化数据,并通过Kryo、Protobuf、Avro和AvroParquet将其序列化
在数据驱动型企业中构建可靠且健壮的数据管道,并管理数据
使用Scala实现可扩展的模型监控和报警

作者简介
亚历克斯·科兹洛夫(Alex Kozlov)
是一名多学科的大数据科学家。自1991年来到硅谷起就创办了几家计算机和数据管理公司。期间,他师从Daphne Koller和John Hennessy两位教授,于1998年获得斯坦福大学博士学位。他目前是企业安全初创公司E8 Security的首席解决方案架构师,曾在Cloudera、HP公司的HP Labs工作。

译者简介
罗棻
重庆工商大学计算机科学与信息工程学院教师,主要从事计算机视觉、计算机算法的研究。同时对Scala编程感兴趣。
刘波
重庆工商大学计算机科学与信息工程学院教师,主要从事机器学习理论、计算机视觉和最优化技术研究,同时爱好Hadoop和Spark平台上的大数据分析,也对Linux平台的编程和Oracle数据库感兴趣。

内容简介
本书全面而系统地讲解怎么使用Scala在Spark平台上实现机器学习算法,其中Scala的版本为2.11.7,Spark采用基于Hadoop 2.6的版本,都是比较新的版本,并且书中还提供大量有针对性的编程实例,可以帮助你快速提高自己的工程实战能力。
全书共10章,第1章介绍数据分析师如何开始数据分析;第2章介绍数据驱动过程;第3章介绍Spark体系结构以及MLlib所支持几个算法;第4章介绍机器学习的基本原理,讨论两种不同的机器学习方法——监督学习和无监督学习;第5章通过具体的算法实例介绍回归和分类;第6章详细介绍显示、存储以及改进非结构化数据的方法;第7章深入介绍Scala的图(graph)库以及算法的实现;第8章探讨Scala与R和Python的集成;第9章介绍自然语言处理(NLP)的一些常用算法,同时介绍一些特别适合Scala编程的算法;第10章介绍现有Scala监控解决方案。

图书前言

这是一本关于机器学习的书,它以Scala为重点,介绍了函数式编程方法以及如何在Spark上处理大数据。九个月前,当我受邀写作本书时,我的第一反应是:Scala、大数据、机器学习,每一个主题我都曾彻底调研过,也参加了很多的讨论,结合任何两个话题来写都具有挑战性,更不用说在一本书中结合这三个主题。这个挑战激发了我的兴趣,于是就有了这本书。并不是每一章的内容都像我所希望的那样圆满,但技术每天都在快速发展。我有一份具体的工作,写作只是表达我想法的一种方式。
下面先介绍机器学习。机器学习经历了翻天覆地的变换;它是由人工智能和统计学发展起来的,于20世纪90年代兴起。后来在2010年或稍晚些时候诞生了数据科学。数据科学家有许多定义,但Josh Wills的定义可能最通俗,我有幸在Cloudera工作时和他共事过。这个定义在图1中有具体的描述。虽然细节内容可能会有争议,但数据科学确实是几个学科的交叉,数据科学家不一定是任何一个领域的专家。据Jeff Hammerbacher(Cloudera的创始人,Facebook的早期员工)介绍,第一位数据科学家工作于Facebook。Facebook需要跨学科的技能,以便从当时大量的社交数据中提取有价值的信息。虽然我自称是一个大数据科学家,但我已经关注这个交叉领域很久了,以至于有太多知识出现混淆。写这本书就是想使用机器学习的术语来保持对这些领域的关注度。

图1 数据科学家的一种可能定义
最近,在机器学习领域出现了另一个被广泛讨论的话题,即数据量击败模型的复杂度。在本书中可以看到一些Spark MLlib实现的例子,特别是NLP的word2vec。机器学习模型可以更快地迁移到新环境,也经常击败需要数小时才能构建的更复杂的模型。因此,机器学习和大数据能够很好地结合在一起。
最后也很重要的一点是微服务的出现。作者在本书中花了大量的篇幅介绍机器和应用程序通信,所以会很自然地提及Scala与Akka actor模型。
对于大多数程序员而言,函数式编程更多是关于编程风格的变化,而不是编程语言本身。虽然Java 8开始有来自函数式编程的lambda表达式和流,但是人们仍然可以在没有这些机制的情况下编写函数式代码,甚至可以用Scala编写Java风格的代码。使得Scala在大数据世界中名声鹊起的两个重要思想是惰性求值和不可变性,其中惰性求值可大大简化多线程或分布式领域中的数据处理。Scala有一个可变集合库和一个不可变集合库。虽然从用户的角度来看它们的区别很小,但从编译器的角度来看,不变性大大增加了灵活性,并且惰性求值能更好地与大数据相结合,因为REPL将大多数信息推迟到管道的后期处理,从而增加了交互性。
大数据一直备受关注,其主要原因是机器产生的数据量大大超越了人类在没有使用计算机以前的数量。Facebook、Google、Twitter等社交网络公司已经证明专门用于处理大数据的工具(如Hadoop、MapReduce和Spark)可以从这些数据块中提取丰富的信息。
本书后面将介绍关于Hadoop的内容。最初它能在廉价硬件上处理大量的信息,因为当时传统的关系数据库不能处理这样的信息(或能处理,但是代价过高)。大数据这个话题太大了,而Spark才是本书的重点,它是Hadoop MapReduce的另一个实现,Spark提高了磁盘上持久化保存数据的效率。通常认为使用Spark有点贵,因为它消耗更多的内存,要求硬件必须更可靠,但它也更具交互性。此外,Spark使用Scala工作(也可以使用Java和Python等),但Scala是主要的API语言。因此Spark用Scala在数据管道的表达方面有一定的协同性。
本书主要内容
第1章介绍数据分析师如何开始数据分析。除了允许用户使用新工具查看更大的数据集以外,该章并没有什么新东西。这些数据集可能分布在多台计算机上,但查看它们就像在本地机器上一样简单。当然,不会阻止用户在单个机器上顺序执行程序。但即使如此,作者写作的这个笔记本电脑也有四个核,可同时运行1377个线程。Spark和Scala(并行集合)允许用户透明地使用整个设备,有时并没有显式指定需要并行运行。现代服务器可对OS服务使用多达128个超线程。该章将展示如何使用新工具来进行数据分析,并用它来研究以前的数据集。
第2章介绍在Scala/Spark之前一直存在的数据驱动过程,也会介绍完全数据驱动的企业,这类企业通过多台数据生成机器的反馈来优化业务。大数据需要新的技术和架构来适应新的决策过程。该章借鉴了一些学术资料来阐述数据驱动型业务的通用架构。在这种架构下,大多数工人的任务是监控和调整数据管道。
第3章重点介绍Spark的体系结构,它是前面提及的Hadoop MapReduce的替代者(或补充)。该章还将特别介绍MLlib所支持的几个算法。虽然这是一个崭新的话题,但许多算法都对应着各种实现。该章将给出一些例子,比如怎样运行org.apache.spark.mllib包中标准的机器学习算法。最后介绍Spark的运行模式及性能调整。
第4章介绍机器学习的原理,虽然Spark MLlib的内容可能会不断变化,但这些原理是不会变的。监督学习和无监督学习是经典的机器学习算法,对大多数数据而言,它们对数据按行进行操作。该章是每一本机器学习书的经典部分,但作者增加了一些知识点,使其围绕Scala/Spark来介绍监督学习和无监督学习。
第5章引入回归和分类,这是机器学习算法的另一个经典内容。虽然分类算法可以用来做回归,回归算法也可以用于分类,但它们仍然是两种不同的算法。该章通过具体的算法展示回归和分类的实际例子。
第6章介绍社交数据的新特性。使用非结构化数据需要新的技术和格式,该章将详细介绍显示、存储以及改进这类数据的方法。Scala在这里成为了一个大赢家,因为它天生具备处理数据管道中复杂数据结构的能力。
第7章介绍图,传统按行存储的数据库系统很难处理这类信息。最近图数据库也再次流行起来。该章将介绍两个不同的库:一个是Assembla的Scala图,它对图的表示和理解都非常方便;另一个是Spark的图类,并在其基础上实现了几个图算法。
第8章介绍与Scala相关的内容,但许多人因为太谨慎了而不愿意放弃他们以前所使用的库。该章将演示如何透明地引用以R和Python编写的遗留代码,这是作者经常听到的要求。简单地说,这里有两种运行机制可以满足这类需求:一种是使用Unix的管道;另一种是在JVM中启动R或Python。
第9章介绍自然语言处理,即如何处理人机交互,以及计算机如何理解人类的这种非标准沟通方式。该章将重点介绍Scala为自然语言处理、主题关联以及处理大量文本信息(Spark)所提供的几个工具。
第10章介绍通常如何开发数据管道,人们怎样使用和调试这些管道。监控不仅对数据管道的终端用户非常重要,而且对寻求优化运行方案或进一步做设计的开发人员来说也非常重要。该章介绍用于监控系统和分布式机器集群的标准工具,以及如何设计一个钩子服务,以便在不附加调试器的情况下查看其功能。该章也讨论了新出现的统计模型监控。
本书所需的工具
本书所使用的工具都是开源软件。首先是Java,可以从Oracle的Java下载页面下载它。读者必须接受安装许可,并为你的平台选择合适的映像。不要使用OpenJDK,它与Hadoop/Spark的兼容性不好。
其次是Scala。如果读者使用Mac,建议安装Homebrew:

读者还需要使用多个开源包。为了安装Scala,请运行brew install scala。在Linux平台上安装需要从http://www.scala-lang.org/download/site下载合适的Debian或RPM软件包。本书使用的版本是2.11.7。
Spark发行版可以从http://spark.apache.org/downloads.html上下载。本书使用预构建的Hadoop 2.6(或更高版本)的映像。因为Hadoop是以Java编写的,只需要解压,然后运行bin子目录中的脚本。
R和Python的包可分别从站点http://cran.r-project.org/bin和http://python.org/ftp/python/ $PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz上获得。还有文档介绍具体如何配置它们。本书使用的R版本是3.2.3,Python的版本为2.7.11。
本书面向的读者
想要提高实战技能的数据科学家,通过本书可以学习使用大数据的例子;想学习从大数据中有效地提取可靠信息的数据分析师;想超越现有的界限,成为数据科学家的统计师。
本书注重动手操作,除了少数几个例子有深入的介绍以外,本书不会深入地介绍数学证明。但本书会尽力提供代码示例和技巧,使读者可以尽快开始使用标准算法库。
下载示例代码
本书的代码包放在GitHub上,网址为https://github.com/PacktPublishing/Mastering-Scala-Machine-Learning。
下载本书的彩色图片
我们还为读者提供了一个PDF文件,其中包含本书中使用的截图/图的彩色图片。彩色图片将帮助读者更好地了解输出的变化。读者可以从https://www.packtpub.com/sites/default/files/downloads/MasteringScalaMachineLearning_ColorImages.pdf上下载此文件。
致谢
我曾有几次都想写一本书,当Packt在我50岁生日之前给我打电话时,我几乎立马就同意了。Scala?机器学习?大数据?这三者如何组合才能做到既容易理解,其主题又很有市场的推广性?为了把我的想法转换成文字,随之而来的是8个月的熬夜。实际上,这个过程让我发现我的身体每天需要至少三个小时的睡眠。总的来说,这个经历是完全值得的。我真心感激身边每个人的帮助,首先是我的家人,他们陪伴我度过许多不眠之夜,也容忍我对家庭暂时缺少关爱。
我想感谢我的妻子,因为我经常写作到深夜而让她承担了很多额外的家庭琐事。我知道这是非常不容易的。我还要感谢编辑,特别是Samantha Gonsalves,他不仅时时叮咛我要按时完成任务,也给我非常多的好建议,还忍受着我的拖延。尤其要感谢在E8 Security产品发布的几个关键阶段顶替我的同事(我们一起做了GA,在这段时间至少发行了好几个版本)。我们的很多想法都渗透到了E8产品中。我要特别感谢Jeongho Park,Christophe Briguet,Mahendra Kutare,Srinivas Doddi和Ravi Devireddy。感谢Cloudera公司所有同事的反馈和讨论,特别是Josh Patterson,Josh Wills,Omer Trajman,Eric Sammer,Don Brown,Phillip Zeyliger,Jonathan Hsieh等。最后,我要感谢我的博士生导师Walter A. Harrison,Jaswinder Pal Singh,John Hennessy和Daphne Koller,是他们将我带入技术和创新的世界。

上架指导

计算机/人工智能/机器学习

封底文字

本书旨在丰富你的知识,并讲述如何构建高级的应用程序。在使用REPL来对函数式编程的概念进行简单介绍后,将给出一些设置开发环境和修改数据的实际例子。然后介绍在Spark和MLlib上使用k-means和决策树。今天生产的大多数数据都是非结构化的原始数据,本书还会介绍如何使用高级主题(如回归、分类、集成和图算法)处理这类数据。最后介绍如何使用Scala执行复杂的概念分析,监控模型性能,并构建模型存储库。

通过阅读本书,你将学会:
- 使用Scala的REPL环境来提升函数式编程能力
- 使用Scala运行标准的机器学习高级算法
- 熟悉大数据技术,并理解为什么对大数据采用函数式编程
- 研究新的数据结构、算法和方法,并养成有效利用大数据的习惯
- 了解机器学习中的监督学习和无监督学习的原理
- 使用非结构化数据,并通过Kryo、Protobuf、Avro和AvroParquet将其序列化
- 在数据驱动型企业中构建可靠且健壮的数据管道,并管理数据
- 使用Scala实现可扩展的模型监控和报警

作者简介

[美]亚历克斯?科兹洛夫(Alex Kozlov) 著:暂无相关简介

译者简介

罗棻 刘波 译:暂无简介

译者序

大数据是当前热门的话题,其特点为数据量巨大,增长速度快,拥有各种类型。分布式机器学习是一种高效处理大数据的方法,其目的是从大数据中找到有价值的信息。目前各大互联网公司都投入巨资研究分布式机器学习。
在实现分布式机器学习算法时,函数式编程有天生的优势。这是因为函数式编程不会共享状态,也不会造成资源竞争。Scala是一种优秀的函数式编程语言,同时它也是基于Java虚拟机的面向对象的编程语言。使用Scala编程非常方便快捷。
Spark是2009年出现的一种基于内存的分布式计算框架,它的处理速度比经典的分布式计算框架Hadoop快得多。Spark的核心部分是由Scala实现的。Spark对于处理迭代运算非常有效,而分布式机器学习算法经常需要迭代运算,因此Spark能很好地与机器学习结合在一起。
本书共10章,介绍了如何使用Scala在Spark平台上实现机器学习算法,其中Scala的版本为2.11.7,Spark采用基于Hadoop 2.6的版本,这些都是比较新的版本。本书从数据分析师怎么开始数据分析入手,介绍了数据驱动过程和Spark的体系结构;通过操作Spark MLlib库,介绍了机器学习的基本原理及MLlib所支持的几个算法;接着介绍了Scala如何表示和使用非结构化数据,以及与图相关的话题;再接着介绍了Scala与R和Python的集成;最后介绍了一些特别适合Scala编程的NLP常用算法及现有的Scala监控解决方案。总之,本书非常适合从事分布式机器学习的数据工作者,使用书中提供的大量针对性编程例子,可提高工程实战能力。
本书的第1~3章和第7章由重庆工商大学计算机科学与信息工程学院刘波博士翻译;第4~6章和第8~10章由重庆工商大学计算机科学与信息工程学院罗棻翻译。同时,刘波博士负责全书的技术审校工作。
翻译本书的过程也是译者不断学习的过程。为了保证专业词汇翻译的准确性,我们在翻译过程中查阅了大量相关资料。但由于时间和能力有限,书中内容难免出现差错。若有问题,读者可通过电子邮件(liubo7971@163.com; luofcn@163.com)与我们联系,欢迎一起探讨,共同进步。并且,我们也会将最终的勘误信息公布在http://www.cnblogs.com/ml-cv/上。
本书的顺利出版还要特别感谢机械工业出版社华章分社的编辑在翻译过程中给予的帮助!
本书的翻译也得到如下项目资助:(1)国家自然科学基金一般项目,非同步脉冲神经膜系统研究,项目号:61502063;(2)重庆市检测控制集成系统工程实验室新技术新产品开放课题,基于图像内容的目标检测算法及应用研究,项目号:KFJJ2016042。

图书目录

译者序
前言
第1章 探索数据分析1
1.1 Scala入门2
1.2 去除分类字段的重复值2
1.3 数值字段概述4
1.4 基本抽样、分层抽样和一致抽样5
1.5 使用Scala和Spark的Note-book工作8
1.6 相关性的基础12
1.7 总结14
第2章 数据管道和建模15
2.1 影响图16
2.2 序贯试验和风险处理17
2.3 探索与利用问题21
2.4 不知之不知23
2.5 数据驱动系统的基本组件23
2.5.1 数据收集24
2.5.2 数据转换层25
2.5.3 数据分析与机器学习26
2.5.4 UI组件26
2.5.5 动作引擎28
2.5.6 关联引擎28
2.5.7 监控28
2.6 优化和交互28
2.7 总结29
第3章 使用Spark和MLlib30
3.1 安装Spark31
3.2 理解Spark的架构32
3.2.1 任务调度32
3.2.2 Spark的组件35
3.2.3 MQTT、ZeroMQ、Flume和Kafka36
3.2.4 HDFS、Cassandra、S3和Tachyon37
3.2.5 Mesos、YARN和Standa-lone38
3.3 应用38
3.3.1 单词计数38
3.3.2 基于流的单词计数41
3.3.3 Spark SQL和数据框45
3.4 机器学习库46
3.4.1 SparkR47
3.4.2 图算法:Graphx和Graph-Frames48
3.5 Spark的性能调整48
3.6 运行Hadoop的HDFS49
3.7 总结54
第4章 监督学习和无监督学习55
4.1 记录和监督学习55
4.1.1 Iirs数据集56
4.1.2 类标签点57
4.1.3 SVMWithSGD58
4.1.4 logistic回归60
4.1.5 决策树62
4.1.6 bagging和boosting:集成学习方法66
4.2 无监督学习66
4.3 数据维度71
4.4 总结73
第5章 回归和分类74
5.1 回归是什么74
5.2 连续空间和度量75
5.3 线性回归77
5.4 logistic回归81
5.5 正则化83
5.6 多元回归84
5.7 异方差84
5.8 回归树85
5.9 分类的度量87
5.10 多分类问题87
5.11 感知机87
5.12 泛化误差和过拟合90
5.13 总结90
第6章 使用非结构化数据91
6.1 嵌套数据92
6.2 其他序列化格式100
6.3 Hive和Impala102
6.4 会话化104
6.5 使用特质109
6.6 使用模式匹配110
6.7 非结构化数据的其他用途113
6.8 概率结构113
6.9 投影113
6.10 总结113
第7章 使用图算法115
7.1 图简介115
7.2 SBT116
7.3 Scala的图项目119
7.3.1 增加节点和边121
7.3.2 图约束123
7.3.3 JSON124
7.4 GraphX126
7.4.1 谁收到电子邮件130
7.4.2 连通分量131
7.4.3 三角形计数132
7.4.4 强连通分量132
7.4.5 PageRank133
7.4.6 SVD++134
7.5 总结138
第8章 Scala与R和Python的集成139
8.1 R的集成140
8.1.1 R和SparkR的相关配置140
8.1.2 数据框144
8.1.3 线性模型150
8.1.4 广义线性模型152
8.1.5 在SparkR中读取JSON文件156
8.1.6 在SparkR中写入Parquet文件157
8.1.7 从R调用Scala158
8.2 Python的集成161
8.2.1 安装Python161
8.2.2 PySpark162
8.2.3 从Java/Scala调用Python163
8.3 总结167
第9章 Scala中的NLP169
9.1 文本分析流程170
9.2 Spark的MLlib库177
9.2.1 TF-IDF177
9.2.2 LDA178
9.3 分词、标注和分块185
9.4 POS标记186
9.5 使用word2vec寻找词关系189
9.6 总结192
第10章 高级模型监控193
10.1 系统监控194
10.2 进程监控195
10.3 模型监控201
10.3.1 随时间变化的性能202
10.3.2 模型停用标准202
10.3.3 A/B测试202
10.4 总结202

教学资源推荐
作者: (美)Stefan Büttcher (加)Charles L.A.Clarke (加)Gordon V. Cormack 著
作者: 马玉春 刘杰民 王鑫 编著
作者: (美)William Stallings  Lawrie Brown          等著           澳大利亚新南威尔士大学  澳大利亚新南威尔士大学
参考读物推荐
作者: 新华三大学 编著
作者: (英)Martin Fowler 著