(特价书)Scala机器学习
基本信息
- 原书名:Mastering Scala Machine Learning

内容简介
计算机书籍
Copyright ?2016 Packt Publishing. First published in the English language under the title “Mastering Scala Machine Learning”.All rights reserved.Chinese simplified language edition published by China Machine Press.Copyright ?2017 by China Machine Press.本书中文简体字版由Packt Publishing授权机械工业出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
目录
前言
第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
译者序
在实现分布式机器学习算法时,函数式编程有天生的优势。这是因为函数式编程不会共享状态,也不会造成资源竞争。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。
前言
下面先介绍机器学习。机器学习经历了翻天覆地的变换;它是由人工智能和统计学发展起来的,于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章介绍通常如何开发数据管道,人们怎样使用和调试这些管道。监控不仅对数据管道的终端用户非常重要,而且对寻求优化运行方案或进一步做设计的开发人员来说也非常重要。该章介绍用于监控系统和分布式机器集群的标准工具,以及如何设计一个钩子服务,以便在不附加调试器的情况下查看其功能。该章也讨论了新出现的统计模型监控。
本书所需的工具