1.实验目的
- 了解与熟悉数据探索、数据划分、数据填充;
- 了解与熟悉类别变量处理、建模与调优、测试与评估。
2.实验内容及结果截屏
- Spark机器学习流程
载入本章需要用到的程序包:
调用spark的函数read()读取泰坦尼克号乘客数据集:
(2) 数据探索
调用数据框的函数count()得到数据框的样本数:
(3)数据划分
调用数据框中函数randomSplit()随机抽取70%的样本作为训练集,并且仅保留有预测意义的变量:
(4)数据填充
调用程序包pyspark.sql.functions中的函数isnull()得到变量age和fare是否为空的布尔型列:
①填充训练集
用中位数填充所有训练集中的数值变量,即变量age和fare:
查看在原数据集中变量age和fare为空的记录填充后的情况:
②填充测试集
调用填充器的函数transform()填充测试集:
(5)类别变量处理
①类别编码
调用类别编码器的函数fit()做训练,输入参数为数据框,返回训练后的类别编码器模型;调用类别编码器模型的函数transform()做训练集的类别编码,输入参数和返回结果都是数据框:
调用类别编码器的函数transform()做测试集的类别编码:
使用类别编码器模型的属性labels得到每个序数对应的类别:
②独热编码
调用独热编码器模型的函数transform()做训练集的独热编码,输入参数和返回结果都是数据框:
调用独热编码器的函数transform()做测试集的独热编码:
(6)建模与调优
①向量化
调用向量封装器的函数transform()做训练集的向量封装,将预测变量封装为名为features的向量,输入参数和返回结果都是数据框:
调用向量封装器的函数transform()做测试集的向量封装:
缺乏机器学习模型所需要的元数据(如类别数量、独立值等)调用类别编码器做变换:
只保留预测变量和目标变量,并将目标变量重命名为label:
在做完独热编码后,定义列索引对应的变量名:
②卡方特征选择
调用卡方特征选择器模型的函数transform()做训练集的特征选择,输入参数和返回结果都是数据框:
使用特征选择器模型的属性selectedFeatures得到选择特征的序号,并进一步得到变量名称:
(7)建模与调优
①创建机器学习模型
调用程序包pyspark.ml.classification中的构造函数DecisionTreeClassifier()创建决策树分类器:
②超参数调优
调用决策树分类器的函数explainParams()得到超参数列表和每个超参数的默认值:
定义超参数调优算法——调用程序包pyspark.ml.tuning中的构造函数ParamGridBuilder()创建网格搜索超参数调优器:
定义超参数的搜索范围——调用网格搜索超参数调优器的函数build()创建超参数字典:
定义重采样策略——调用程序包pyspark.ml.tuning中的构造函数CrossValidator()创建交叉验证器:
执行超参数调优——调用交叉验证器的函数fit()做超参数调优,输入参数为数据框,返回训练后的交叉验证器模型:
3.实验分析及小结
在此次实验过程中,我了解了数据探索、数据划分、数据填充,同时也了解了类别变量处理、建模与调优、测试与评估。在实验过程中,因步步紧跟实验指导,我没有发生什么问题。在之后的实验中,我也会更加认真地学习、理解代码,同时尽可能减少粗心导致的错误。