作者:黄美灵 页数:406 出版社:电子工业出版社 |
本书以Spark 1.4.1版本源码为切入点, 全面并且深入地解析SpkM Lib模块, 着力于探索分布式机书中本着序渐进的原则, 首先解析MLlib的底层实现基础:数据操作及矩阵向量计算操作, 该部分是MLLib实现的基础:接着对各个机器学习算法的理论知识进行讲解, 并且解析机器学习算法如何在MLb中实现分布式计算:然后对ML lib源码进行详细的讲解:最后进行ML lib实例的讲解, 相信通过本书的学习, 读者可全面掌握Spark ML lib机器学习, 能够进行ML lib实战、MLib定制开发等。
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,井利用规律对未知数据进行预测的算法。在算法设计方面,随着数据量的增加,从传统的单机计算发展到大规模的集群计算,以至发展到今天的一种大规模、快速计算的集群平台——Apache Spark。Spark是一个开源集群运算框架, 最初由加州料存放到磁盘中, Spark使用了内存内运算技术, 能在资料尚未写入硬盘时即在内存内分析运算,能快10倍。Spark允许将数据加载至集群内存, 并多次对其进行查询, 非常适合用于机器学习架, 实现了常用的机器学习, 如聚类、分类、回归等算法。本文循序渐进, 从Spark的基础知识、矩阵向量的基础知识开始, 然后再讲解各种算法的理论知识, 以及Spark源码实现和实例器学习的底层实现。
本书适合大数据、Spark、数据挖掘领域的从业人员阅读, 同时也为Spark开发者和大数据爱好者展现了分布式机器学习的原理和实现细节.其中大部分理论来源于18、19世纪,例如贝叶斯定理,是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes) 提出的重要概率论理论:而21世纪则侧重于如何将机器学习理论运用在工业化中,帮助改进性能及提升其效率。机器学习理论关注可以实现的、行之有效的学习算法:机器学习研究的不是求解精确的结果,而是研究开发容易处理的近似求解算法。尤其是在21世纪,知识和数据量爆发的时代,机器学大学伯克利分校AMP实验室开发。相对于Had oop的Map Reduce会在执行完工作后将中介资Spark在内存上的运算速度比Had oop Map Reduce的运算速度快100倍, 即便是在磁盘上运行也
本书侧重讲解Spark ML lib模块。Spark ML lib是一种高效、快速、可扩展的分布式计算框
。学习本书需要的基础知识包括:Spark基础入门、Scala入门、线性代数基础知识,本书面向的读者:Spark开发者、大数据工程师、数据挖掘工程师、机器学习工程师。
Spark MLib机器学习的基出包括:Spark数据操作、矩阵向量, 它们都是各个机器学习算法的底层实现基Spark ML Iib机器学习算法的全面解析,包含常见机器学习:归,分类,聚类、关联、推荐和神经网络通过这部分掌:机器学习算法理论知识,机器学习算法的分布实现方法, ML lih源码解析, 实例解析其中第14、15章是基于Spark ML lib上实现或者定制开发机器学习算法。
第1章
Spark机器学习简介
机器学习(Machine Learning, ML) 是一门多领域交叉学科, 涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法,在算法设计方面,机器学习理论关注可以实现的、行之有效的学习算法。题是半监督学习,比如会应用在图像分类中,涉及的数据集很大但是只包含极少数标签的数据。机器学习可以分成下面几种类别。
监督学习:输入数据被称为训练数据,它们有已知的标签或者结果,比如垃圾邮件/非垃圾邮件或者某段时间的股票价格。模型的参数确定需要通过一个训练的过程,在这个过程中模型将会要求做出预测,当预测不符时,则需要做出修改。常见的监督学习算法包括回归分析和统计分类。
·无监督学习:输入数据不带标签或者没有一个已知的结果。通过推测输入数据中存在的结构来建立模型。常见的无监督学习算法有聚类。
半监督学习:输入数据由带标签的和不带标签的组成。合适的预测模型虽然已经存在,但是模型在预测的同时还必须能通过发现潜在的结构来组织数据,这类问题包括分类和回归。
·强化学习:输入数据作为来自环境的激励提供给模型,且模型必须做出反应。反馈井不像监督学习那样来自训练的过程,而是作为环境的惩罚或者奖赏。例如,系统和机器人控制。
算法的例子包括Q学习和时序差分学习,当你处理大量数据来对商业决策建模时,通常会使用监督和无监督学习,目前的一个热门话常见的机器学习算法如下:
·分类与回归——线性回归、逻辑回归、贝叶斯分类、决策树分类等:'聚类——K Means聚类、LDA主题、KNN等;关联规则——Apriori、FP Growth等:”推荐——协同过滤、ALS等:神经网络——BP、RBF、SVM等;·深度神经网络等算法,
1.2Spark介绍
Spark是一个基于内存计算的开源集群计算系统, 是由加州大学伯克利分校AMP实验室使用Scala语言开发的, 目前已是Apache的顶级开源项目, 是Apache社区最火热的项目之一。Spark提供了一个更快、更通用的数据处理平台, 和Had oop相比, Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。Spark是基于Map Reduce算法实现的分布式计算, 拥有Had oop Map Reduce所具有的优点:但不同于Map Reduce的是中间过程的输出和结果可以保存在内存中, 从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法。中, 目前这些库包括Spark SQL、Spark Streaming、ML lib及Graph X, 如图1-1所示,Spark核心由一组功能强大的、高级别的库组成, 这些库可以无缝地应用到同一个应用程序Spark Core是一个基本引擎, 用于大规模并行和分布式数据处理。Spark引入了弹性分布式数据集(RDD, Resilient Distributed Dataset) , RDD是一个不可变的、容错的、分布式对象集合, 我们可以并行地操作这个集合, 并且RDD提供了丰富的数据操作接口,
Spark SQL是Spark的一个组件, 它支持我们通过SQL或者Hive查询语言来查询数据。Spark Stream ning支持对流数据的实时处理, 例如产品环境Web服务器的日志文件(例如Apache Flume和HDFS/S 3) , Spark Streaming会接收日志数据, 然后将其分为不同的批次, 接下来Spark引擎来处理这些批次, 井根据批次中的结果, 生成最终的流。ML lib是一个机器学习库, 它提供了各种各样的算法, 这些算法用来在集群上针对分类、回归、聚类、协同过滤等。Gap hX是一个图计算库, 用来处理图, 执行基于图的并行操作。1.3Spark ML lib介绍ML lib目前支持随机梯度下降法、少内存拟牛领法、最小二乘法等。ML lib是Spark中可扩展的机器学习库, 它由一系列机器学习算法和实用程序组成, 包括分类、回归、聚类、协同过滤、降维,还包括一些底层的优化方法,如图1-2所示。
1)依赖
ML lib的底层实现采用数值计算库Breeze和基础线性代数库BLAS。
2)优化计算
3)回归
ML lib目前支持线性回归、逻辑回归、岭回归、保序回归和与之相关的L 1和L 2正则化的变体。ML lib中回归算法的优化计算方法采用随机梯度下降法,
4)分类
ML lib目前支持贝叶斯分类、决策树分类、线性SVM和逻辑回归, 同时也包括LI和L 2正则化的变体。优化计算方法也采用随机梯度下降法。
5)聚类
ML lib目前支持K Means聚类算法、LDA主题模型算法。
6)推荐
ML lib目前支持ALS推荐, 采用交替最小二乘求解的协同推荐算法.
7)关联规则
ML lib目前支持FP Growth关联规则挖掘算法。
第2章 Spark数据操作
2.1Spark RDD操作
RDD, 即弹性分布式数据集, 全称为Resilient Distributed Dataset, 是一个容错的、并行的数据结构, 可以让用户显式地将数据存储到磁盘和内存中, 并能控制数据的分区, 同时, RDD还提供了一组丰富的操作来操作这些数据, 如map、flat Map、filter等转换操作, 以及count、save As TextFile、reduce By Key等行动操作, 以支持常见的数据运算。
2.1.1Spark RDD创建操作
1.数据集合
RDD, 里面包含了1~9这9个数字, 它们分别在3个分区中,textFile(path:String,minPartions:Int=defaultMinPartitions) :RDD[Strng] , 第一个参数指定注意:textFile可以读取多个文件或者一个文件夹, 也支持压缩文件, 包含通配符的路径。textFile方法也可以传入第二个可选参数来控制文件的分片数量, 默认情况下, Spark会为创建一个能够并行操作的分布数据集,集合中的元素都会被复制。例如,从普通数组创建parallelize[T] (seq:Seq[T] ,numSlices:Int=defaultParallelismXimplicitarg0:ClassTag[T] ) :RDD[T],第一个参数指定数据集合,第二个参数指定数据分区。val data=Array(1, 2, 3, 4, 5, 6, 7, B, 9)val dist Data=sc.parallelize(data, 3)RDD的一个重要参数是将数据集划分成分片的数量。对每一个分片, Spark会在集群中运行一个对应的任务, 典型情况下, 集群中的每一个CPU将对应运行2-4个分片。一般情况下,Spark会根据当前集群的情况自行设定分片数量。但是, 你也可以通过将第二个参数传递给parallelize方法(比如sc.parallelize(data, 3) ) 来手动确定分片数量,
2.外部数据源
可以通过Had oop支持的外部数据源(包括本地文件系统、HDFS、Cassandra、H Base、亚马逊S 3等) 建立分布数据集。Spark支持文本文件、序列文件及其他任何Had oop输入格式文件。通过文本文件创建RDD要使用Spark Context的textFile方法, 这个方法会使用一个文件的URI(或本地文件路径,hdfs://、s3n//这样的URI等) , 然后读入这个文件建立一个文本行的集合。以下是一个例子:数据路径,第二个参数指定数据分区。val distFile 1=sc.textFile( data.txt*) //本地当前目录下的文件val distFile 2=sc.textFile( hdfs://192.168.1.1ee:9888/input/data.txt ) //HDFS文件val distFile 3-sc.textFile( file:/input/data.txt ) //本地指定日录下的文件uRu aval distFile 4=sc.textFile( /input/data.txt ) //本地指定目录下的文件textFile(*/input/e 81.txt, /input/002.txt“) //读取多个文件textFile(“/input ) //读取目录textFile( /input/*.txt*) //含通配符的路径事内的曲textFile(“/input/*.gz ) //读取压维文件文件的每一个块(在HDFS中块的大小默认是64MB) 创建一个分片。但是你也可以通过传入一个更大的值来要求Spark建立更多的分片。注意, 分片的数量绝不能小于文件块的数量。
2.1.2Spark RDD转换操作
1.map
map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD:RDD之间的元素是一对一关系。
....................
封面1
书名2
版权3
前言4
目录7
第一部分 SparkM Llib基础15
第1章 Spark机器学习简介15
1.1 机器学习介绍15
1.2 Spark介绍16
1.3 Spark MLlib介绍17
第2章 Spark数据操作19
2.1 Spark RDD操作19
2.1.1 Spark RDD创建操作19
2.1.2 Spark RDD转换操作20
2.1.3 Spark RDD行动操作27
2.2 MLlib Statistics统计操作28
2.2.1 列统计汇总28
2.2.2 相关系数29
2.2.3 假设检验31
2.3 MLlib数据格式31
2.3.1 数据处理31
2.3.2 生成样本35
第3章 Spark MLlib矩阵向量39
3.1 Breeze介绍39
3.1.1 Breeze创建函数40
3.1.2 Breeze元素访问及操作函数42
3.1.3 Breeze数值计算函数47
3.1.4 Breeze求和函数48
3.1.5 Breeze布尔函数49
3.1.6 Breeze线性代数函数50
3.1.7 Breeze取整函数52
3.1.8 Breeze常量函数53
3.1.9 Breeze复数函数53
3.1.10 Breeze三角函数53
3.1.11 Breeze对数和指数函数53
3.2 BLAS介绍54
3.2.1 BLAS向量-向量运算55
3.2.2 BLAS矩阵-向量运算55
3.2.3 BLAS矩阵-矩阵运算56
3.3 MLlib向量56
3.3.1 MLlib向量介绍56
3.3.2 MLlib Vector接口57
3.3.3 MLlib DenseVector类59
3.3.4 MLlib SparseVector类62
3.3.5 MLlib Vectors伴生对象63
3.4 MLlib矩阵70
3.4.1 MLlib矩阵介绍70
3.4.2 MLlib Matrix接口70
3.4.3 MLlib DenseMatrix类72
3.4.4 MLlib SparseMatrix类77
3.4.5 MLlib Matrix伴生对象84
3.5 MLlib BLAS90
3.6 MLlib分布式矩阵106
3.6.1 MLlib分布式矩阵介绍106
3.6.2 行矩阵(RowMatrix)107
3.6.3 行索引矩阵(IndexedRowMatrix)109
3.6.4 坐标矩阵(CoordinateMatrix)110
3.6.5 分块矩阵(BlockMatrix)111
第二部分 Spark MLlib回归算法115
第4章 Spark MLlib线性回归算法115
4.1 线性回归算法115
4.1.1 数学模型115
4.1.2 最小二乘法118
4.1.3 梯度下降算法118
4.2 源码分析119
4.2.1 建立线性回归121
4.2.2 模型训练run方法124
4.2.3 权重优化计算127
4.2.4 线性回归模型134
4.3 实例136
4.3.1 训练数据136
4.3.2 实例代码136
第5章 Spark MLlib逻辑回归算法139
5.1 逻辑回归算法139
5.1.1 数学模型139
5.1.2 梯度下降算法141
5.1.3 正则化142
5.2 源码分析145
5.2.1 建立逻辑回归147
5.2.2 模型训练run方法150
5.2.3 权重优化计算150
5.2.4 逻辑回归模型157
5.3 实例161
5.3.1 训练数据161
5.3.2 实例代码161
第6章 Spark MLlib保序回归算法164
6.1 保序回归算法164
6.1.1 数学模型164
6.1.2 L2保序回归算法166
6.2 源码分析166
6.2.1 建立保序回归167
6.2.2 模型训练run方法169
6.2.3 并行PAV计算169
6.2.4 PAV计算170
6.2.5 保序回归模型172
6.3 实例177
6.3.1 训练数据177
6.3.2 实例代码177
第三部分 Spark MLlib分类算法183
第7章 Spark MLlib贝叶斯分类算法183
7.1 贝叶斯分类算法183
7.1.1 贝叶斯定理183
7.1.2 朴素贝叶斯分类184
7.2 源码分析186
7.2.1 建立贝叶斯分类186
7.2.2 模型训练run方法189
7.2.3 贝叶斯分类模型192
7.3 实例194
7.3.1 训练数据194
7.3.2 实例代码195
第8章 Spark MLlib SVM支持向量机算法197
8.1 SVM支持向量机算法197
8.1.1 数学模型197
8.1.2 拉格朗日199
8.2 源码分析202
8.2.1 建立线性SVM分类204
8.2.2 模型训练run方法207
8.2.3 权重优化计算207
8.2.4 线性SVM分类模型209
8.3 实例212
8.3.1 训练数据212
8.3.2 实例代码212
第9章 Spark MLlib决策树算法215
9.1 决策树算法215
9.1.1 决策树215
9.1.2 特征选择216
9.1.3 决策树生成218
9.1.4 决策树生成实例219
9.1.5 决策树的剪枝221
9.2 源码分析222
9.2.1 建立决策树224
9.2.2 建立随机森林229
9.2.3 建立元数据233
9.2.4 查找特征的分裂及划分236
9.2.5 查找最好的分裂顺序241
9.2.6 决策树模型244
9.3 实例247
9.3.1 训练数据247
9.3.2 实例代码247
第四部分 Spark MLlib聚类算法251
第10章 Spark MLlib KMeans聚类算法251
10.1 KMeans聚类算法251
10.1.1 KMeans算法251
10.1.2 演示KMeans算法252
10.1.3 初始化聚类中心点252
10.2 源码分析253
10.2.1 建立KMeans聚类255
10.2.2 模型训练run方法260
10.2.3 聚类中心点计算261
10.2.4 中心点初始化264
10.2.5 快速距离计算267
10.2.6 KMeans聚类模型268
10.3 实例271
10.3.1 训练数据271
10.3.2 实例代码272
第11章 Spark MLlib LDA主题模型算法274
11.1 LDA主题模型算法274
11.1.1 LDA概述274
11.1.2 LDA概率统计基础275
11.1.3 LDA数学模型277
11.2 GraphX基础280
11.3 源码分析283
11.3.1 建立LDA主题模型285
11.3.2 优化计算292
11.3.3 LDA模型296
11.4 实例301
11.4.1 训练数据301
11.4.2 实例代码301
第五部分 SparkMLlib关联规则挖掘算法305
第12章 Spark MLlib FPGrowth关联规则算法305
12.1 FPGrowth关联规则算法305
12.1.1 基本概念305
12.1.2 FPGrowth算法306
12.1.3 演示FP树构建307
12.1.4 演示FP树挖掘309
12.2 源码分析311
12.2.1 FPGrowth类311
12.2.2 关联规则挖掘313
12.2.3 FPTree类316
12.2.4 FPGrowthModel类319
12.3 实例319
12.3.1 训练数据319
12.3.2 实例代码319
第六部分 Spark M Llib推荐算法323
第13章 SparkMLlib ALS交替最小二乘算法323
13.1 ALS交替最小二乘算法323
13.2 源码分析325
13.2.1 建立ALS327
13.2.2 矩阵分解计算335
13.2.3 ALS模型342
13.3 实例347
13.3.1 训练数据347
13.3.2 实例代码347
第14章 Spark MLlib协同过滤推荐算法350
14.1 协同过滤推荐算法350
14.1.1 协同过滤推荐概述350
14.1.2 用户评分351
14.1.3 相似度计算351
14.1.4 推荐计算353
14.2 协同推荐算法实现354
14.2.1 相似度计算357
14.2.2 协同推荐计算361
14.3 实例363
14.3.1 训练数据363
14.3.2 实例代码363
第七部分 Spark MLlib神经网络算法367
第15章 Spark MLlib神经网络算法综述367
15.1 人工神经网络算法367
15.1.1 神经元367
15.1.2 神经网络模型368
15.1.3 信号前向传播369
15.1.4 误差反向传播370
15.1.5 其他参数373
15.2 神经网络算法实现374
15.2.1 神经网络类376
15.2.2 训练准备383
15.2.3 前向传播388
15.2.4 误差反向传播390
15.2.5 权重更新394
15.2.6 ANN模型395
15.3 实例397
15.3.1 测试数据397
15.3.2 测试函数代码400
15.3.3 实例代码401
封底406