深度实践Spark机器学习

更多详情

内容简介: 本书以新的Spark2.0为技术基础,重点讲解了如何构建机器学习系统以及如何实现机器学习流程的标准化,这两点都是目前同类书中没有的。第1~7章从概念、架构、算法等角度介绍了机器学习的基本概念;第8~12章以实例为主,详细讲解了机器学习流程标准化涉及的关键技术;第13章主要以在线数据或流式数据为主介绍了流式计算框架SparkStreaming;第14章重点讲解了深度学习的框架TensorFlowOnSprak。此外,附录部分提供了线性代数、概率统计及Scala的基础知识,帮助读者更好地学习和掌握机器学习的相关内容。

目录: 前言
第1章 了解机器学习 1
1.1 机器学习的定义 1
1.2 大数据与机器学习 2
1.3 机器学习、人工智能及深度学习 2
1.4 机器学习的基本任务 3
1.5 如何选择合适算法 4
1.6 Spark在机器学习方面的优势 5
1.7 小结 5
第2章 构建Spark机器学习系统 6
2.1 机器学习系统架构 6
2.2 启动集群 7
2.3 加载数据 9
2.4 探索数据 10
2.4.1 数据统计信息 10
2.4.2 数据质量分析 11
2.4.3 数据特征分析 12
2.4.4 数据的可视化 17
2.5 数据预处理 19
2.5.1 数据清理 20
2.5.2 数据变换 21
2.5.3 数据集成 22
2.5.4 数据归约 23
2.6 构建模型 25
2.7 模型评估 26
2.8 组装 30
2.9 模型选择或调优 30
2.9.1 交叉验证 31
2.9.2 训练–验证切分 32
2.10 保存模型 32
2.11 小结 33
第3章 ML Pipeline原理与实战 34
3.1 Pipeline简介 34
3.2 DataFrame 35
3.3 Pipeline组件 36
3.4 Pipeline原理 37
3.5 Pipeline实例 38
3.5.1 使用Estimator、Transformer和Param的实例 38
3.5.2 ML使用Pipeline的实例 40
3.6 小结 41
第4章 特征提取、转换和选择 42
4.1 特征提取 42
4.1.1 词频—逆向文件
频率(TF-IDF) 42
4.1.2 Word2Vec 43
4.1.3 计数向量器 44
4.2 特征转换 45
4.2.1 分词器 45
4.2.2 移除停用词 46
4.2.3 n-gram 47
4.2.4 二值化 48
4.2.5 主成分分析 48
4.2.6 多项式展开 50
4.2.7 离散余弦变换 50
4.2.8 字符串—索引变换 51
4.2.9  索引—字符串变换 53
4.2.10 独热编码 54
4.2.11 向量—索引变换 57
4.2.12 交互式 58
4.2.13 正则化 59
4.2.14 规范化 60
4.2.15 最大值—最小值缩放 60
4.2.16 最大值—绝对值缩放 61
4.2.17 离散化重组 62
4.2.18 元素乘积 63
4.2.19 SQL转换器 64
4.2.20 向量汇编 65
4.2.21 分位数离散化 66
4.3 特征选择 67
4.3.1 向量机 67
4.3.2 R公式 69
4.3.3 卡方特征选择 70
4.4 小结 71
第5章 模型选择和优化 72
5.1 模型选择 72
5.2 交叉验证 73
5.3 训练验证拆分法 75
5.4 自定义模型选择 76
5.5 小结 78
第6章 Spark MLlib基础 79
6.1 Spark MLlib简介 80
6.2 Spark MLlib架构 81
6.3 数据类型 82
6.4 基础统计 84
6.4.1 摘要统计 84
6.4.2 相关性 84
6.4.3 假设检验 85
6.4.4 随机数据生成 85
6.5 RDD、Dataframe和Dataset 86
6.5.1 RDD 86
6.5.2 DatasetDataFrame 87
6.5.3 相互转换 88
6.6 小结 89
第7章 构建Spark ML推荐模型 90
7.1 推荐模型简介 91
7.2 数据加载 92
7.3 数据探索 94
7.4 训练模型 94
7.5 组装 95
7.6 评估模型 96
7.7 模型优化 96
7.8 小结 98
第8章 构建Spark ML分类模型 99
8.1 分类模型简介 99
8.1.1 线性模型 100
8.1.2 决策树模型 101
8.1.3 朴素贝叶斯模型 102
8.2 数据加载 102
8.3 数据探索 103
8.4 数据预处理 104
8.5 组装 109
8.6 模型优化 110
8.7 小结 113
第9章 构建Spark ML回归模型 114
9.1 回归模型简介 115
9.2 数据加载 115
9.3 探索特征分布 117
9.4 数据预处理 120
9.4.1 特征选择 121
9.4.2 特征转换 121
9.5 组装 122
9.6 模型优化 124
9.7 小结 126
第10章 构建Spark ML聚类模型 127
10.1 K-means模型简介 128
10.2 数据加载 129
10.3 探索特征的相关性 129
10.4 数据预处理 131
10.5 组装 132
10.6 模型优化 134
10.7 小结 136
第11章 PySpark 决策树模型 137
11.1 PySpark 简介 138
11.2 决策树简介 139
11.3 数据加载 140
11.3.1 原数据集初探 140
11.3.2 PySpark的启动 142
11.3.3 基本函数 142
11.4 数据探索 143
11.5 数据预处理 143
11.6 创建决策树模型 145
11.7 训练模型进行预测 146
11.8 模型优化 149
11.8.1 特征值的优化 149
11.8.2 交叉验证和网格参数 152
11.9 脚本方式运行 154
11.9.1 在脚本中添加配置信息 154
11.9.2 运行脚本程序 154
11.10 小结 154
第12章 SparkR朴素贝叶斯模型 155
12.1 SparkR简介 156
12.2 获取数据 157
12.2.1 SparkDataFrame数据结构
说明 157
12.2.2 创建SparkDataFrame 157
12.2.3 SparkDataFrame的常用操作 160
12.3 朴素贝叶斯分类器 162
12.3.1 数据探查 162
12.3.2 对原始数据集进行转换 163
12.3.3 查看不同船舱的生还率差异 163
12.3.4 转换成SparkDataFrame格式的数据 165
12.3.5 模型概要 165
12.3.6 预测 165
12.3.7 评估模型 166
12.4 小结 167
第13章 使用Spark Streaming构建在线学习模型 168
13.1 Spark Streaming简介 168
13.1.1 Spark Streaming常用术语 169
13.1.2 Spark Streaming处理流程 169
13.2 Dstream操作 170
13.2.1 Dstream输入 170
13.2.2 Dstream转换 170
13.2.3 Dstream修改 171
13.2.4 Dstream输出 172
13.3 Spark Streaming应用实例 172
13.4 Spark Streaming在线学习实例 174
13.5 小结 175
第14章 TensorFlowOnSpark详解 176
14.1 TensorFlow简介 176
14.1.1 TensorFlow的安装 177
14.1.2 TensorFlow的发展 177
14.1.3 TensorFlow的特点 177
14.1.4 TensorFlow编程模型 178
14.1.5 TensorFlow常用函数 180
14.1.6 TensorFlow运行原理 181
14.1.7 TensorFlow系统架构 182
14.2 TensorFlow实现卷积神经网络 183
14.2.1 卷积神经网络简介 183
14.2.2 卷积神经网络的发展历程 184
14.2.3 卷积神经网络的网络结构 186
14.2.4 TensorFlow实现卷积神经网络 186
14.3 TensorFlow实现循环神经网络 191
14.3.1 循环神经网络简介 191
14.3.2 LSTM循环神经网络简介 192
14.3.3 LSTM循环神经网络分步说明 193
14.3.4 TensorFlow实现循环神经网络 194
14.4 分布式TensorFlow 198
14.4.1 客户端、主节点和工作节点间的关系 198
14.4.2 分布式模式 198
14.4.3 在Pyspark集群环境运行TensorFlow 199
14.5 TensorFlowOnSpark架构 202
14.6 TensorFlowOnSpark安装 203
14.7 TensorFlowOnSpark实例 204
14.7.1 TensorFlowOnSpark单机模式实例 204
14.7.2 TensorFlowOnSpark集群模式实例 207
14.8 小结 208
附录A 线性代数 209
附录B 概率统计 214
附录C Scala基础 220

前言: 为什么写这本书
大数据、人工智能正在改变或颠覆各行各业,包括我们的生活。大数据、人工智能方面的人才已经供不应求,但作为人工智能的核心——机器学习,因涉及的知识和技能比较多,除了需要具备一定的数学基础、相关业务知识外,还要求有比较全面的技术储备,如操作系统、数据库、开发语言、数据分析工具、大数据计算平台等,无形中提高了机器学习的门槛。如何降低机器学习的门槛,让更多有志于机器学习、人工智能的人能更方便或顺畅地使用、驾驭机器学习?
很多企业也正在考虑和处理这方面的问题,本书也希望借Spark技术在这方面做一些介绍或总结。
如何使原本复杂、专业性强的工作或操作简单化?封装是一个有效方法。封装降低了我们操作照相机的难度、降低了我们维护各种现代设备的成本,同时也提升了我们使用这些设备的效率。除封装外,过程的标准化、流程化同样是目前现代企业用于提升生产效率,降低成本,提高质量的有效方法。
硬件如此,软件行业同样如此。目前很多机器学习的开发语言或平台,正在这些方面加大力度,比如:对特征转换、特征选择、数据清理、数据划分、模型评估及优化等算法的封装;对机器学习过程的进行流程化、标准化、规范化;给大家比较熟悉的语言或工具提供API等方法或措施,以简化机器学习中间过程,缩短整个开发周期,使我们能更从容地应对市场的变化。Spark在这方面可谓后来居上,尤其是最近发布的版本,明显加大了这方面的力度,我们可以从以下几个方面看出这种趋势:
1)Spark机器学习的API,正在由基于RDD过渡到基于Dataset或DataFrame,基于RDD的API在Spark2.2后处于维护阶段,Spark3.0后将停止使用(来自Spark官网);
2)建议大家使用Spark ML,尤其是它的Pipeline;
3)增加大量特征选择、特征转换、模型选择和优化等算法;
4)丰富、增强Spark与Java、Python、R的API,使其更通用。
SKLearn、Spark等机器学习平台或工具在这方面都处于领先的地位,我们也希望借助本书,把Spark在这方面的有关内容介绍给大家,使大家可以少走些弯路。
此外,Spark目前主要涉及常用机器学习算法,缺乏对一般神经网络的支持,更不用说深度学习了,这好像也是目前Spark的一个不足。不过好消息是:雅虎把深度学习框架TensorFlow与Spark整合在一起,而且开源了这些代码。为弥补广大Spark爱好者的上述缺憾,本书介绍了TensorFlowOnSpark,其中包括深度学习框架TensorFlow的基础知识及使用卷积神经网络、循环神经网络等的一些实际案例。
另外,我们提供了与本书环境完全一致的免费云操作环境,这样一来是希望节约您的宝贵时间,二来是希望能通过真正的实战,给您不一样的体验和收获!总之,我们希望能使更多有志于大数据、人工智能的朋友加入这个充满生机、前景广阔的行业中来。
本书特色
本书最大特点就是注重实战!或许有读者会问,能从哪几个方面体现出来?
1)介绍了目前关于机器学习的新趋势,并分析了如何使用Pipeline使机器学习过程流程化。
2)简介了机器学习的一般框架Spark、深度学习框架Tensorflow及把两者整合在一起的框架TensorflowOnSpark。
3)提供可操作、便执行及具有实战性的项目及其详细代码。
4)提供与书完全一致的云操作环境,而且这个环境可以随时随地使用实操环境,登录地址为httpwww.feiguyun.comsparksupport。
5)除了代码外,还附有一些必要的架构或原理说明,便于大家能从一个更高的角度来理解把握相关问题。
总之,希望你通过阅读本书,不但可以了解很多内容或代码,更可以亲自运行或调试这些代码,从而带来新的体验和收获!
读者对象
对大数据、机器学习感兴趣的广大在校、在职人员。
对Spark机器学习有一定基础,欲进一步提高开发效率的人员。
熟悉Python、R等工具,希望进一步拓展到Spark机器学习的人。
对深度学习框架TensorFlow及其拓展感兴趣的读者。
如何阅读本书
本书正文共14章,从内容结构来看,可以分为四部分。
第一部分为第1~7章,主要介绍了机器学习的一些基本概念,包括如何构建一个Spark机器学习系统,Spark ML主要特点,Spark ML中流水线(Pipeline),ML中大量特征选取、特征转换、特征选择等函数或方法,同时简单介绍了Spark MLlib的一些基础知识。
第二部分为第8~12章,主要以实例为主,具体说明如何使用Spark ML中Pipeline的Stage,以及如何把这Stage组合到流水线上,最后通过评估指标,优化模型。
第三部分即第13章,与之前的批量处理不同,这一章主要以在线数据或流式数据为主,介绍Spark的流式计算框架Spark Streaming。
第四部分即第14章,为深度学习框架,主要包括TensorFlow的基础知识及它与Spark的整合框架TensorFlowOnSpark。
此外,书中的附录部分还提供了线性代数、概率统计及Scala的基础知识,以帮助读者更好地掌握机器学习的相关内容。
勘误和支持
除封面署名外,参加本书编写、环境搭建的人还有杨本法、张魁、刘未昕等、杨本法负责第12章 Spark R的编写,张魁、刘未昕负责后台环境的搭建和维护。由于笔者水平有限,加之编写时间仓促,书中难免出现错误或不准确的地方。恳请读者批评指正,你可以通过访问httpwww.feiguyun.com留下宝贵意见。也可以通过微信(wumg3000)或QQ(1715408972)给我们反馈。非常感谢你的支持和帮助。
致谢
在本书编写过程中,得到很多在校老师和同学的支持!感谢上海大学机电工程与自动化学院的王佳寅老师及黄文成、杨中源、熊奇等同学,上海理工管理学院的张帆老师,上海师大数理学院的田红炯、李昭祥老师,华师大的王旭同学,博世王冬,飞谷云小伙伴等提供的支持和帮助。
感谢机械工业出版社的杨福川、李艺老师给予本书的大力支持和帮助。
感谢参与本书编写的其他作者及提供支持的家人们,谢谢你们!