描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111572152丛书名: 大数据技术丛书
内容简介
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授权机械工业出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
目 录
目录 Contents
译者序
前言
第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
译者序
前言
第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
前 言
Preface 前 言这是一本关于机器学习的书,它以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的内容可能会不断变化,但这些原理是不会变的。监督学习和无监
下面先介绍机器学习。机器学习经历了翻天覆地的变换;它是由人工智能和统计学发展起来的,于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的内容可能会不断变化,但这些原理是不会变的。监督学习和无监
评论
还没有评论。