第9章 构建Spark ML回归模型


本章数据集下载

第9章 构建Spark ML回归模型

回归模型属于监督式学习,每个个体都有一个与之相关联的实数标签,并且我们希望在给出用于表示这些实体的数值特征后,所预测出的标签值可以尽可能接近实际值。
回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:普通最小二乘法(OLS)(Ordinary Least Square),它使用损失函数是平方损失函数(1/2 (w^T x-y)^2),简单的预测就是y=w^T x,标准的最小二乘回归不使用正则化,这就意味着数据中异常数据点非常敏感,因此,在实际应用中经常使用一定程度的正则化(目的避免过拟合、提供泛化能力)。
本章主要介绍Spark ML中的回归模型,以回归分析中常用决策树回归、线性回归为例,对共享单车租赁的情况进行预测,其中介绍了一些特征转换、特征选择、交叉验证等方法的具体使用,主要内容包括:
回归模型简介
把数据加载到HDFS,Spark读取HDFS中的数据
探索特征及其分布信息
预处理数据
把pipeline的多个Stages组装到流水线上
模型优化

9.1 回归模型简介

ML目前支持回归模型有:
Linear regression (线性回归)
Generalized linear regression(广义线性回归)
Decision tree regression (决策树的回归)
Random forest regression(随机森林回归 )
Gradient-boosted tree regression (梯度提高树回归)
Survival regression(生存回归)
Isotonic regression(保序回归)

9.2 数据加载

查看数据大致情况:

从数据集前3行的数据可以看出,第一行为标题,其他为租赁数据,共有17个字段和17380条记录。
把数据文件hour.csv复制到HDFS上。

以独立模式启动spark,然后读取数据。

导入需要使用的类。

读取数据,把第一行为列名:

查看前4行样本数据

9.3 探索特征分布

Spark读取数据后,我们就可以对数据进行探索和分析,首先查看前4行样本数据

查看rawdata的数据结构

目前这些数据的字段都是字符型,后续需要转换为数值型。
查看主要字段的统计信息

其中有很多字段是类型型,如果使用回归算法时,需要通过OneHotEncoder把数据转换为二元向量,对一些字段或特征进行规范化。
通过pyspark可以画出主要特征的重要程度:

图9-2 各特征的重要性

通过pyspark可以画出其中一些特征的分布情况:

图9-3特征间的关系图

9.4 数据预处理

9.4.1 特征选择

首先把字符型的特征转换为数值类型,并过滤instant、dteday、casual、registered等4个无关或冗余特征。cnt特征作为标志。

生成一个存放以上预测特征的特征向量

把源数据组合成特征向量features

9.4.2 特征转换

使用决策树回归算法前,我们对类别特征进行索引化或数值化。

因OneHotEncoder不是Estimator,这里我们对采用回归算法的数据另外进行处理,先建立一个流水线,把以上转换组装到这个流水线上。

把原来的4个及转换后的8个二元特征向量,拼接成一个feature向量。

9.5 组装

1)将data1数据分为训练和测试集(30%进行测试,种子设为12):

2)设置决策树回归模型参数

3)设置线性回归模型的参数

4)把决策树回归模型涉及的特征转换及模型训练组装在一个流水线上。

5)把线性回归模型涉及的特征转换、模型训练组装载一个流水上线。

6)训练模型

7)作出预测

8)评估模型

从以上使用不同模型情况看来,决策树性能稍好与线性回归,但这仅是粗糙的比较,下面使用模型选择中介绍的一些方法,对线性模型进行优化。

9.6 模型优化

从图9-3可知,temp特征与atemp特征线性相关,而且从图9-2可知,atemp的贡献度较小,所以我们将过滤该特征。

对label标签特征进行转换,使其更接近正态分布,这里我们SQLTransformer转换器,其具体使用可参考第4章。

这里我们利用训练验证划分法对线性回归模型进行优化,对参数进行网格化,将数据集划分为训练集、验证集和测试集。
1)导入需要用到的包。

2)建立模型,预测label1的值,设置线性回归参数。

3)设置流水线,为便于把特征组合、特征值优化、模型训练等任务组装到这条流水线上。

4)建立参数网格。

5)选择(prediction, label1),计算测试误差。

6)训练模型并自动选择最优参数。

7)查看模型全部参数

8)用最好的参数组合,做出预测。

看了对标签特征进行转换、利用网格参数及训练验证划分等优化方法,从102下降到3左右,效果比较明显。

9.7 小结

本章主要介绍Spark ML的线性回归模型、决策树回归模型,对共享单车的租赁信息进行预测,由于很多数据不规范,因此,对原数据进行了二元向量转换、对类别数据索引化,然后把这些转换组装到流水线上,在训练集上训练模型,在测试集上进行预测,最后,更加评估指标对模型进行优化。

《第9章 构建Spark ML回归模型》有1个想法

发表评论