前言

前言

近年来,被收集、存储和分析的数据量呈爆炸式增长,特别是与网络、移动设备相关的数据,以及传感器产生的数据。大规模数据的存储、处理、分析和建模,以前只有Google、Yahoo!、Facebook、Twitter和Salesforce这样的大公司才会涉及,而现在越来越多的机构都会面对处理海量数据的挑战。

面对如此量级的数据以及常见的实时利用数据的需求,人工驱动的系统就难以应对。这就催生了所谓的大数据和机器学习系统,它们从数据中学习并可自动决策。

为了能以低成本实现对持续增长的大规模数据的支持,Google、Yahoo!、Amazon和Facebook等公司推出了大量开源技术。这些技术旨在通过在计算机集群上进行分布式数据存储和计算来简化大数据处理。

这些技术中最广为人知的是Apache Hadoop,它极大地简化了海量数据的存储(通过HDFS,即Hadoop distributed file system)和计算(通过Hadoop MapReduce,一种在集群里多个节点上进行并行计算的框架)流程,并降低了相应的成本。

然而,MapReduce有其严重的缺点,如启动任务时的高开销、对中间数据和计算结果写入磁盘的依赖。这些都使得Hadoop不适合迭代式或低延迟的任务。Apache Spark是一个新的分布式计算框架,从设计开始便注重对低延迟任务的优化,并将中间数据和结果保存在内存中,从而弥补了Hadoop框架中的一些主要缺陷。Spark提供简洁明了的函数式API,并完全兼容Hadoop生态系统。

不止如此,Spark还提供针对Scala、Java、Python和R语言的原生API。通过Scala和Python的API,Spark应用程序可充分利用Scala或Python语言的优势。这些优势包括使用相关的解释程序进行实时交互式的程序编写。Spark现在还自带了一个支持分布式机器学习和包含若干数据挖掘模型的工具包(1.6版中为Spark MLlib,2.0版则对应Spark ML)。该工具包正在重点开发中,但已包括多个针对常见机器学习任务的高质量、可扩展的算法。本书将会涉及部分此类任务。

在大型数据集上进行机器学习颇具挑战性。这主要是因为常见的机器学习算法并非为并行架构而设计。多数情况下,设计这样的算法并不容易。机器学习模型一般具有迭代式的特性,而这与Spark的设计目标一致。并行计算的框架有很多,但很少能在兼顾速度、可扩展性、内存处理和容错性的同时,还提供灵活、表达力丰富的API。Spark是其中为数不多的一个。

本书将关注机器学习技术的实际应用。我们会简要介绍机器学习算法的一些理论知识,但总体来说本书注重技术实践。具体来说,我们会通过示例程序和样例代码,举例说明如何借助Spark、MLlib以及其他常见的免费机器学习和数据分析套件来创建一个有用的机器学习系统。

本书内容

第1章“Spark的环境搭建与运行”会讲到如何安装和搭建Spark框架的本地开发环境,以及怎样使用Amazon EC2在云端创建Spark集群;然后会介绍Spark编程模型和API;最后分别用Scala、Java和Python语言创建一个简单的Spark应用。

第2章“机器学习的数学基础”会提供机器学习所需的基础数学知识。要理解算法,从而获得更好的建模效果,理解数学及其技巧十分重要。

第3章“机器学习系统设计”会展示一个贴合实际的机器学习系统案例。随后会针对该案例设计一个基于Spark的智能系统所对应的高层架构。

第4章“Spark上数据的获取、处理与准备”会详细介绍如何从各种免费的公开渠道获取用于机器学习系统的数据。我们将学到如何进行数据处理和清理,并通过可用的工具、库和Spark函数将它们转换为符合要求的数据,使之具备可用于机器学习模型的特征。

第5章“Spark构建推荐引擎”展示了如何创建一个基于协同过滤的推荐模型。该模型将用于向给定用户推荐物品,以及创建与给定物品相似的物品清单。这一章还会讲到如何使用标准指标来评估推荐模型的效果。

第6章“Spark构建分类模型”阐述如何创建二元分类模型,以及如何利用标准的性能评估指标来评估分类效果。

第7章“Spark构建回归模型”扩展了第6章中的分类模型以创建一个回归模型,并详细介绍了回归模型的评估指标。

第8章“Spark构建聚类模型”探索如何创建聚类模型以及相关评估方法的使用。你会学到如何分析和可视化聚类结果。

第9章“Spark应用于数据降维”将通过多种方法从数据中提取其内在结构并降低其维度。你会学到一些常见的降维方法,以及如何对它们进行应用和分析。这里还会讲到如何将降维的结果作为其他机器学习模型的输入。

第10章“Spark高级文本处理技术”介绍了处理大规模文本数据的方法。这包括从文本中提取特征以及处理文本数据中常见的高维特征的方法。

第11章“Spark Streaming实时机器学习”对Spark Streaming进行了综述,并介绍它如何在流数据上的机器学习中实现对在线和增量学习方法的支持。

第12章“Spark ML Pipeline API”在Data Frames的基础上提供了一套统一的接口(API),帮助用户创建和调试机器学习流程。

预备知识

本书假设读者已有基本的Scala、Java、Python或R编程经验,以及机器学习、统计学和数据分析方面的基础知识。

目标读者

本书的预期读者是初、中级数据科学研究者、数据分析师、软件工程师和对大规模环境下的机器学习或数据挖掘感兴趣的人。读者不需要熟悉Spark,但若具有统计、机器学习相关软件(比如MATLAB、scikit-learn、Mahout、R或Weka等)或分布式系统(如Hadoop)的实践经验,会很有帮助。

排版约定

在本书中,你会发现一些不同的文本样式,用以区别不同种类的信息。下面举例说明。

代码段的格式如下:

val conf = new SparkConf()
  .setAppName("Test Spark App")
  .setMaster("local[4]")
val sc = new SparkContext(conf)

所有的命令行输入或输出的格式如下:

> tar xfvz spark-2.1.0-bin-hadoop2.7.tgz
> cd spark-2.1.0-bin-hadoop2.7

新术语重点词汇以黑体表示。屏幕、目录或对话框上的内容这样表示:“这些信息可以从AWS主页上依次点击Account | Security Credentials | Access Credentials看到。”

 这个图标表示警告或需要特别注意的内容。

 这个图标表示提示或技巧。

读者反馈

欢迎提出反馈。如果你对本书有任何想法,喜欢它什么,不喜欢它什么,请让我们知道。要写出真正对大家有帮助的书,了解读者的反馈很重要。一般的反馈,请发送电子邮件至feedback@packtpub.com,并在邮件主题中包含书名。如果你有某个主题的专业知识,并且有兴趣写成或帮助促成一本书,请参考我们的作者指南https://www.packtpub.com/books/info/packt/authors

客户支持

现在,你是一位令人自豪的Packt图书的拥有者,我们会尽全力帮你充分利用你手中的书。

下载示例代码

你可以用你的账户从https://www.packtpub.com下载所有已购买Packt图书的示例代码文件。1如果你从其他地方购买本书,可以访问https://www.packtpub.com/books/content/support并注册,我们将通过电子邮件把文件发送给你。

1读者也可访问本书图灵社区页面(http://www.ituring.com.cn/book/2041)下载示例代码及彩图,并提交本书中文版勘误。——编者注

你可通过如下步骤下载本书示例代码:

(1) 在上述网站上,使用你自己的邮件地址和密码登录或注册;

(2) 将鼠标移动到顶部的SUPPORT标签页;

(3) 点击Code Downloads & Errata;

(4) 在Search栏中输入本书名;

(5) 在搜索结果中选择要下载代码的书;

(6) 从下拉菜单中选择从何处购买的本书;

(7) 点击Code Download下载包含代码和部分数据的代码包。

代码包下载后,请使用如下软件的最新版本来解压缩或提取所含资料:

  • Windows上建议使用WinRAR/7-Zip;
  • Mac上建议使用Zipeg/iZip/UnRarX;
  • Linux上建议使用7-Zip/PeaZip。

代码包在GitHub上也可获取,地址为https://github.com/PacktPublishing/Machine-Learning-with-Spark-Second-Editionhttps://github.com/PacktPublishing上也列出了我们所出版的各类图书和视频的代码包,欢迎查看。

勘误表

虽然我们已尽力确保本书内容正确,但出错仍旧在所难免。如果你在我们的书中发现错误,不管是文本还是代码,希望能告知我们,我们不胜感激。这样做可以减少其他读者的困扰,帮助我们改进本书的后续版本。如果你发现任何错误,请访问https://www.packtpub.com/books/info/packt/errata-submission-form-0提交,选择你的书,点击勘误表提交表单的链接(Errata Submission Form),并输入详细说明。勘误一经核实,你的提交将被接受,此勘误将上传到本公司网站或添加到现有勘误表。

https://www.packtpub.com/books/content/support选择书名,在图书页面的Errata区域就可以查看现有的勘误表。

侵权行为

互联网上的盗版是所有媒体都要面对的问题。Packt非常重视保护版权和许可证。如果你发现我们的作品在互联网上被非法复制,不管以什么形式,都请立即为我们提供位置地址或网站名称,以便我们可以寻求补救。

请把可疑盗版材料的链接发到copyright@packtpub.com

非常感谢你帮助我们保护作者,以及保护我们给你带来有价值内容的能力。

问题

如果你对本书内容存有疑问,不管是哪个方面,都可以通过questions@packtpub.com联系我们,我们将尽最大努力来解决。

电子书

扫描如下二维码,即可购买本书电子版。

{%}

目录

  • 版权声明
  • 前言
  • 第 1 章 Spark的环境搭建与运行
  • 第 2 章 机器学习的数学基础
  • 第 3 章 机器学习系统设计
  • 第 4 章 Spark上数据的获取、处理与准备
  • 第 5 章 Spark构建推荐引擎
  • 第 6 章 Spark构建分类模型
  • 第 7 章 Spark构建回归模型
  • 第 8 章 Spark构建聚类模型
  • 第 9 章 Spark应用于数据降维
  • 第 10 章 Spark高级文本处理技术
  • 第 11 章 Spark Streaming实时机器学习
  • 第 12 章 Spark ML Pipeline API