产品特色
编辑推荐
MLlib是Apache Spark机器学习库。本书入门简单,实例丰富,详解协同过滤、线性回归、分类、决策树、保序回归、聚类、关联、数据降维、特征提取和转换等MLlib主要算法,用实例说明MLlib大数据机器学习算法的运用。
内容简介
Spark作为新兴的、应用范围*为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相关内容的学习与开发,其中MLlib是Spark框架使用的核心。本书是一本细致介绍Spark MLlib程序设计的图书,入门简单,示例丰富。
本书分为13章,从Spark基础安装和配置开始,依次介绍MLlib程序设计基础、MLlib的数据对象构建、MLlib中RDD使用介绍,各种分类、聚类、回归等数据处理方法,*后还通过一个完整的实例,回顾了前面的学习内容,并通过代码实现了一个完整的分析过程。
本书理论内容由浅而深,采取实例和理论相结合的方式,讲解细致直观,适合Spark MLlib初学者、大数据分析和挖掘人员,也适合高校和培训学习相关专业的师生教学参考。
作者简介
王晓华,高校资深计算机专业讲师,主要研究方向为云计算、数据挖掘;曾主持和参与多项国家和省级科研课题,发表过多篇论文,有一项专利。
内页插图
目录
第1章 星星之火 1
1.1 大数据时代 1
1.2 大数据分析时代 2
1.3 简单、优雅、有效——这就是Spark 3
1.4 核心——MLlib 4
1.5 星星之火,可以燎原 6
1.6 小结 6
第2章 Spark安装和开发环境配置 7
2.1 Windows单机模式Spark安装和配置 7
2.1.1 Windows 7安装Java 7
2.1.2 Windows 7安装Scala 10
2.1.3 Intellij IDEA下载和安装 13
2.1.4 Intellij IDEA中Scala插件的安装 14
2.1.5 HelloJava——使用Intellij IDEA创建Java程序 18
2.1.6 HelloScala——使用Intellij IDEA创建Scala程序 21
2.1.7 *后一脚——Spark单机版安装 26
2.2 经典的WordCount 29
2.2.1 Spark实现WordCount 29
2.2.2 MapReduce实现WordCount 31
2.3 小结 34
第3章 RDD详解 35
3.1 RDD是什么 35
3.1.1 RDD名称的秘密 35
3.1.2 RDD特性 36
3.1.3 与其他分布式共享内存的区别 37
3.1.4 RDD缺陷 37
3.2 RDD工作原理 38
3.2.1 RDD工作原理图 38
3.2.2 RDD的相互依赖 38
3.3 RDD应用API详解 39
3.3.1 使用aggregate方法对给定的数据集进行方法设定 39
3.3.2 提前计算的cache方法 42
3.3.3 笛卡尔操作的cartesian方法 43
3.3.4 分片存储的coalesce方法 44
3.3.5 以value计算的countByValue方法 45
3.3.6 以key计算的countByKey方法 45
3.3.7 除去数据集中重复项的distinct方法 46
3.3.8 过滤数据的filter方法 47
3.3.9 以行为单位操作数据的flatMap方法 47
3.3.10 以单个数据为目标进行操作的map方法 48
3.3.11 分组数据的groupBy方法 48
3.3.12 生成键值对的keyBy方法 49
3.3.13 同时对两个数据进行处理的reduce方法 50
3.3.14 对数据进行重新排序的sortBy方法 51
3.3.15 合并压缩的zip方法 52
3.4 小结 53
第4章 MLlib基本概念 54
4.1 MLlib基本数据类型 54
4.1.1 多种数据类型 54
4.1.2 从本地向量集起步 55
4.1.3 向量标签的使用 56
4.1.4 本地矩阵的使用 58
4.1.5 分布式矩阵的使用 59
4.2 MLlib数理统计基本概念 62
4.2.1 基本统计量 62
4.2.2 统计量基本数据 63
4.2.3 距离计算 64
4.2.4 两组数据相关系数计算 65
4.2.5 分层抽样 67
4.2.6 假设检验 69
4.2.7 随机数 70
4.3 小结 71
第5章 协同过滤算法 72
5.1 协同过滤 72
5.1.1 协同过滤概述 72
5.1.2 基于用户的推荐 73
5.1.3 基于物品的推荐 74
5.1.4 协同过滤算法的不足 75
5.2 相似度度量 75
5.2.1 基于欧几里得距离的相似度计算 75
5.2.2 基于余弦角度的相似度计算 76
5.2.3 欧几里得相似度与余弦相似度的比较 77
5.2.4 *个例子——余弦相似度实战 77
5.3 MLlib中的交替*小二乘法(ALS算法) 80
5.3.1 *小二乘法(LS算法)详解 81
5.3.2 MLlib中交替*小二乘法(ALS算法)详解 82
5.3.3 ALS算法实战 83
5.4 小结 85
第6章 MLlib线性回归理论与实战 86
6.1 随机梯度下降算法详解 86
6.1.1 道士下山的故事 87
6.1.2 随机梯度下降算法的理论基础 88
6.1.3 随机梯度下降算法实战 88
6.2 MLlib回归的过拟合 89
6.2.1 过拟合产生的原因 90
6.2.2 lasso回归与岭回归 91
6.3 MLlib线性回归实战 91
6.3.1 MLlib线性回归基本准备 91
6.3.2 MLlib线性回归实战:商品价格与消费者收入之间的关系 94
6.3.3 对拟合曲线的验证 95
6.4 小结 97
第7章 MLlib分类实战 98
7.1 逻辑回归详解 98
7.1.1 逻辑回归不是回归算法 98
7.1.2 逻辑回归的数学基础 99
7.1.3 一元逻辑回归示例 100
7.1.4 多元逻辑回归示例 101
7.1.5 MLlib逻辑回归验证 103
7.1.6 MLlib逻辑回归实例:肾癌的转移判断 104
7.2 支持向量机详解 106
7.2.1 三角还是圆 106
7.2.2 支持向量机的数学基础 108
7.2.3 支持向量机使用示例 109
7.2.4 使用支持向量机分析肾癌转移 110
7.3 朴素贝叶斯详解 111
7.3.1 穿裤子的男生or女生 111
7.3.2 贝叶斯定理的数学基础和意义 112
7.3.3 朴素贝叶斯定理 113
7.3.4 MLlib朴素贝叶斯使用示例 114
7.3.5 MLlib朴素贝叶斯实战:“僵尸粉”的鉴定 115
7.4 小结 117
第8章 决策树与保序回归 118
8.1 决策树详解 118
8.1.1 水晶球的秘密 119
8.1.2 决策树的算法基础:信息熵 119
8.1.3 决策树的算法基础——ID3算法 121
8.1.4 MLlib中决策树的构建 122
8.1.5 MLlib中决策树示例 123
8.1.6 随机雨林与梯度提升算法(GBT) 125
8.2 保序回归详解 127
8.2.1 何为保序回归 128
8.2.2 保序回归示例 128
8.3 小结 129
第9章 MLlib中聚类详解 130
9.1 聚类与分类 130
9.1.1 什么是分类 130
9.1.2 什么是聚类 131
9.2 MLlib中的Kmeans算法 131
9.2.1 什么是kmeans算法 131
9.2.2 MLlib中Kmeans算法示例 133
9.2.3 Kmeans算法中细节的讨论 134
9.3 高斯混合聚类 135
9.3.1 从高斯分布聚类起步 135
9.3.2 混合高斯聚类 137
9.3.3 MLlib高斯混合模型使用示例 137
9.4 快速迭代聚类 138
9.4.1 快速迭代聚类理论基础 138
9.4.2 快速迭代聚类示例 139
9.5 小结 140
第10章 MLlib中关联规则 141
10.1 Apriori频繁项集算法 141
10.1.1 啤酒与尿布 141
10.1.2 经典的Apriori算法 142
10.1.3 Apriori算法示例 144
10.2 FP-growth算法 145
10.2.1 Apriori算法的局限性 145
10.2.2 FP-growth算法 145
10.2.3 FP树示例 148
10.3 小结 149
第11章 数据降维 150
11.1 奇异值分解(SVD) 150
11.1.1 行矩阵(RowMatrix)详解 150
11.1.2 奇异值分解算法基础 151
11.1.3 MLlib中奇异值分解示例 152
11.2 主成分分析(PCA) 153
11.2.1 主成分分析(PCA)的定义 154
11.2.2 主成分分析(PCA)的数学基础 154
11.2.3 MLlib中主成分分析(PCA)示例 155
11.3 小结 156
第12章 特征提取和转换 157
12.1 TF-IDF 157
12.1.1 如何查找所要的新闻 157
12.1.2 TF-IDF算法的数学计算 158
12.1.3 MLlib中TF-IDF示例 159
12.2 词向量化工具 160
12.2.1 词向量化基础 160
12.2.2 词向量化使用示例 161
12.3 基于卡方检验的特征选择 162
12.3.1 “吃货”的苦恼 162
12.3.2 MLlib中基于卡方检验的特征选择示例 163
12.4 小结 164
第13章 MLlib实战演练——鸢尾花分析 166
13.1 建模说明 166
13.1.1 数据的描述与分析目标 166
13.1.2 建模说明 168
13.2 数据预处理和分析 171
13.2.1 微观分析——均值与方差的对比分析 171
13.2.2 宏观分析——不同种类特性的长度计算 174
13.2.3 去除重复项——相关系数的确定 176
13.3 长与宽之间的关系——数据集的回归分析 180
13.3.1 使用线性回归分析长与宽之间的关系 180
13.3.2 使用逻辑回归分析长与宽之间的关系 183
13.4 使用分类和聚类对鸢尾花数据集进行处理 184
13.4.1 使用聚类分析对数据集进行聚类处理 184
13.4.2 使用分类分析对数据集进行分类处理 187
13.5 *终的判定——决策树测试 188
13.5.1 决定数据集的归类——决策树 188
13.5.2 决定数据集归类的分布式方法——随机雨林 190
13.6 小结 191
精彩书摘
第 6 章
MLlib线性回归理论与实战 ?
回归分析(regression analysis)是一种用来确定两种或两种以上变量间相互依赖的定量关系的统计分析方法,运用十分广泛。回归分析可以按以下要素分类:
按照涉及的自变量的多少,分为回归和多重回归分析;
按照自变量的多少,可分为一元回归分析和多元回归分析;
按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多重线性回归分析。
回归分析是*常用的机器学习算法之一,可以说回归分析理论与实际研究的建立使得机器学习作为一门系统的计算机应用学科得以确认。
MLlib中,线性回归是一种能够较为准确预测具体数据的回归方法,它通过给定的一系列训练数据,在预测算法的帮助下预测未知的数据。
本章将向读者介绍线性回归的基本理论与MLlib中使用的预测算法,以及为了防止过度拟合而进行的正则化处理,这些不仅仅是回归算法的核心,也是MLlib的*核心部分。
本章主要知识点:
随机梯度下降算法详解
MLlib回归的过拟合
MLlib线性回归实战
6.1 随机梯度下降算法详解
机器学习中回归算法的种类有很多,例如神经网络回归算法、蚁群回归算法、支持向量机回归算法等,这些都可以在一定程度上达成回归拟合的目的。
MLlib中使用的是较为经典的随机梯度下降算法,它充分利用了Spark框架的迭代计算特性,通过不停地判断和选择当前目标下的*优路径,从而能够在*短路径下达到*优的结果,继而提高大数据的计算效率。
6.1.1 道士下山的故事
在介绍随机梯度下降算法之前,给大家讲一个道士下山的故事。请读者看图6-1。
图6-1 模拟随机梯度下降算法的演示图
这是一个模拟随机梯度下降算法的演示图。为了便于理解,笔者将其比喻成道士想要出去游玩的一座山。
设想道士有一天和道友一起到一座不太熟悉的山上去玩,在兴趣盎然中很快登上了山顶。但是天有不测,下起了雨。如果这时需要道士和其同来的道友以*快的速度下山,那该怎么办呢?
如果想以*快的速度下山,那么*快的办法就是顺着坡度*陡峭的地方走下去。但是由于不熟悉路,道士在下山的过程中,每走过一段路程需要停下来观望,从而选择*陡峭的下山路线。这样一路走下来的话,可以在*短时间内走到山脚。
这个*短的路线从图上可以近似的表示为:
① → ② → ③ → ④ → ⑤ → ⑥ → ⑦
每个数字代表每次停顿的地点,这样只需要在每个停顿的地点上选择*陡峭的下山路即可。
这个就是一个道士下山的故事。随机梯度下降算法和这个类似,如果想要使用*迅捷的方法,那么*简单的办法就是在下降一个梯度的阶层后,寻找一个当前获得的*大坡度继续下降。这就是随机梯度算法的原理。
6.1.2 随机梯度下降算法的理论基础
从上一小节的例子可以看到,随机梯度下降算法就是不停地寻找某个节点中下降幅度*大的那个趋势进行迭代计算,直到将数据收缩到符合要求的范围为止。它可以用数学公式表达如下:
在上一章介绍*小二乘法的时候,笔者通过*小二乘法说明了直接求解*优化变量的方法,也介绍了在求解过程中的前提条件是要求计算值与实际值的偏差的平方*小。
但是在随机梯度下降算法中,对于系数需要通过不停地求解出当前位置下*优化的数据。这句话通过数学方式表达的话就是不停地对系数θ求偏导数。即公式如下:
公式中θ会向着梯度下降的*快方向减少,从而推断出θ的*优解。
因此可以说随机梯度下降算法*终被归结为通过迭代计算特征值从而求出*合适的值。θ求解的公式如下:
公式中α是下降系数,用较为通俗的话来说就是用以计算每次下降的幅度大小。系数越大则每次计算中差值越大,系数越小则差值越小,但是计算时间也相对延长。
6.1.3 随机梯度下降算法实战
随机梯度下降算法将梯度下降算法通过一个模型来表示的话,如图6-2所示:
图6-2 随机梯度下降算法过程
从图中可以看到,实现随机梯度下降算法的关键是拟合算法的实现。而本例的拟合算法实现较为简单,通过不停地修正数据值从而达到数据的*优值。具体实现代码如程序6-1所示:
代码位置://SRC//C06// SGD.scala
程序6-1 随机梯度下降算法
import scala.collection.mutable.HashMap
object SGD {
val data = HashMap[Int,Int]() //创建数据集
def getData():HashMap[Int,Int] = { //生成数据集内容
for(i <- 1 to 50){ //创建50个数据
data += (i -> (12*i)) //写入公式y=2x
}
data //返回数据集
}
var θ:Double = 0 //*步假设θ为0
var α:Double = 0.1 //设置步进系数
def sgd(x:Double,y:Double) = { //设置迭代公式
θ = θ - α * ( (θ*x) - y) //迭代公式
}
def main(args: Array[String]) {
val dataSource = getData() //获取数据集
dataSource.foreach(myMap =>{ //开始迭代
sgd(myMap._1,myMap._2) //输入数据
})
println(“*终结果θ值为 ” + θ) //显示结果
}
}
*终结果请读者自行验证完成。
读者在重复运行本程序的时候,可以适当地增大数据量和步进系数。当增大数据量的时候可以看到,θ值会开始偏离一定的距离,请读者考虑为何会这样。
6.2 MLlib回归的过拟合
有计算就有误差,误差不可怕,我们需要的是采用何种方法消除误差。
回归分析在计算过程中,由于特定分析数据和算法选择的原因,结果会对分析数据产生非常强烈的拟合效果;而对于测试数据,却表现得不理想,这种效果和原因称为过拟合。本节将分析过拟合产生的原因和效果,并给出一个处理手段供读者学习和掌握。
6.2.1 过拟合产生的原因
在上一节的*后,我们建议和鼓励读者对数据的量进行调整从而获得更多的拟合修正系数。相信读者也发现,随着数据量的增加,拟合的系数在达到一定值后会发生较大幅度的偏转。在上一节程序6-1的例子中,步进系数在0.1的程度下,数据量达到70以后就发生偏转。产生这样原因就是MLlib回归会产生过拟合现象。
对于过拟合的例子请读者参看图6-3。
……
前言/序言
Spark在英文中是火花的意思,创作者希望它
Spark MLlib机器学习实践(第2版) 下载 mobi epub pdf txt 电子书 格式