第8章 构建Spark ML 分类模型

在上一章中,我们通过实例介绍了Spark中基于协同过滤的推荐模型,了解了推荐模型的原理以及场景、使用流水线组装任务,使用自定义函数优化模型等。这一章我们将就Spark中分类模型为例,进一步说明如何使用Spark ML中特征选取、特征转换、流水线、模型选择或优化等方法,简化、规范化、流程化整个机器学习过程。
分类、回归和聚类是机器学习中重要的几个分支,也是日常数据处理与分析中最常用的手段。这几类的算法有着较高的成熟度,原理也较容易理解,且有着不错的效果,深受数据分析师们的喜爱。本章以Spark ML分类模型为例,主要包括以下内容:
 简介用于分类的几种常用算法
 加载数据
 探索加载后的数据
 预处理数据
 把各种任务组装到流水线上
 模型调优

8.1分类模型简介

8.1.1线性模型

8.1.2 决策树模型

决策树模型是一个强大的非概率模型,可以用来表示复杂的非线性模式和特征的相互关系。

8.1.3 朴素贝叶斯模型

关于朴素贝叶斯详细的原理,在维基百科中有更为详细的数学公式解释:http://en.wikipedia.org/wiki/Naive_Bayes_classifier。

8.2数据加载

存放路径在 /home/hadoop/data/train.tsv。
数据集下载
先使用shell命令对数据进行试探性的查看,并做一些简单的数据处理。
1) 查看前2行数据

数据集中的第1行为标题(字段名)行,下面是一些的字段说明。
2) 查看文件记录总数

结果显示共有:数据集一共有7396条数据
3) 由于textFile目前不好过滤标题行数据,为便于spark操作数据,需要先删除标题。

4) 将数据文件上传到 hdfs

5) 查看是否上成功

6) 启动Spark Shell

7) 通过sc对象的textFile方法,由本地文件数据创建RDD

8.3数据探索

1) 查看数据前2行

由上面可以看到,得到的是只有一行字符串数组。通过常看源文件,我们可以发现字段间由制表符(\t)分割。由于后续的算法我们不需要时间戳以及网页的内容,所以这里先将其过滤掉。下面我们获取每个属性。
2) 根据以上分析,对数据进行处理,并生成新的RDD

3) 查看数据结构

4) 查看总的数据行数

5) 查看每一行数据的列数

6) 获取第一行的某个值

8.4数据预处理

1) 导入LabeledPoint

2) 导入Vectors矢量方法

3) 对数据进行1-4步的数据清洗工作

上述代码可通过复制粘贴到代码行中,使用 :paste ,粘贴过后按下 Ctrl+D 即可。
4) 考虑到使用朴素贝叶斯算法时,数据需不小于0,故需要做些处理。

5) 查看清理后数据集的前2行数据

6) 通过RDD创建DataFrame

7) 查看df和nbDF的数据

8) 查看df和nbDF的Schema的信息和数据总行数

9) 随机地将数据进行划分,80%用于训练集,20%用于测试集

10) 查看训练数据和测试数据的总行数

11) 由于后续使用网格参数和交叉验证的时候,需要多次使用到训练集和测试集,所以将这两者载入内存,可大大提高性能。

12) 导入逻辑回归分类器、决策树模型以及朴素贝叶斯模型

13) 创建贝叶斯模型,设置初始参数

14) 通过朴素贝叶斯训练模型,对测试数据进行预测

15) 朴素贝叶斯准确性统计

可以看到,朴素贝叶斯的准确率为56.6419%。

8.5组装

1) 导入特征索引类

2) 建立特征索引

3) 创建逻辑回归模型

4) 创建决策树模型

5) 导入网格参数和交叉验证

6) 导入流水线

7) 导入评估器

8) 配置2个流水线:一个是逻辑回归的流水线,包含2个stages( featureIndexer和lr);
一个是决策树回归的流水线,包含2个stages( featureIndexer 和 dt)。

8.6模型优化

1) 分别配置网格参数,使用ParamGridBuilder构造一个parameter grid

2) 分别实例化交叉验证模型

3) 通过交叉验证模型,获取最优参数集,并测试模型

4) 查看数据

5) 查看逻辑回归匹配模型的参数

6) 查看决策树匹配模型的参数

7) 统计逻辑回归的预测正确率

可以看到,我们通过交叉验证得出最优参数,从而获得最佳模型,将这个过程使用流水线连接起来,方便了我们的工作。关于模型的优化,其实我们还有很多工作要做,第11章也也出了一定的优化思路和方法。

8.7小结

本章就Spark ML中分类模型进行的详细介绍,包括逻辑回归、决策树、朴素贝叶斯模型的原理,同时介绍了分类模型的一些使用场景。通过流水线、网格参数以及交叉验证的方式,将整个机器学习过程规范化、标准化、流程化。

第8章 构建Spark ML 分类模型》有1个想法

  1. Pingback引用通告: 深度实践Spark机器学习 – 飞谷云人工智能

评论已关闭。