Pyspark:使用Pipeline流水线进行机器学习

Spark版本:V3.2.1 

这篇博客只介绍如何使用Pyspark.ml中的Pipeline API构建端到端的机器学习流水线。而机器学习中的各个具体流程会在其他系列博客中详细介绍,可以参考:

1 流水线

很多机器学习框架有流水线的概念,其表示对数据组织一系列操作的一种方式。在机器学习场景中使用流水线可以带来以下好处:

  • 将机器学习的步骤分解组合成流水线可以解决程序代码冗长的问题;
  • 做进行交叉验证的时候,需要根据不同的训练、测试数据比例来反复拟合训练数据和测试数据,使用流水线技术可以解决程序不能并行的问题;

流水线的一般框架如下图:

下面依次对Transformer和Estimator进行介绍。

  • 转化器(Transformer)

它接收一个 DataFrame 作为输入,并返回添加了一列或多列的新DataFrame(新列会添加在末尾)。转化器不会从数据中学到任何参数,只是简单地应用基于规则的转化操作,从而为模型训练准备数据。或使用训练好的模型来生成预测结果。转化器都有.transform()方法。

  • 预估器(Estimator)

从 DataFrame 通过 .fit() 方法学习或者拟合得出参数,并返回模型Model,模型本身是转化器。

  • 流水线(Pipeline)

将一系列转化器和预估器整合为单个模型。流水线本身是预估器,pipeline.fit() 的输出则是 PipelineModel,后者是一个转化器。一般流水线由n(n\geq 1)个转换器和1个估计器构成。

2 代码示例

下面使用一个具体的案例来介绍流水线的使用和构建。本次实验使用来自 Inside Airbnb 的旧金山住房数据集,利用用'accommodates'、房间数(bedrooms)、浴室数目(bathrooms)、评论数目(number_of_reviews)、评分数(review_scores_rating)等来预测出租价格(price),这里暂时不考虑对数据进行处理,只先完整介绍机器学习的流程。具体代码如下:

from pyspark.sql import SparkSession
from pyspark.ml.regression import LinearRegression
from pyspark.ml.feature import VectorAssembler
from pyspark.ml import Pipeline
from pyspark.ml.evaluation import RegressionEvaluator

filepath="/sf-airbnb/sf-airbnb-clean.parquet/"

spark=SparkSession.builder.appName("machine-learning").getOrCreate()

df=spark.read.parquet(filepath)
#划分训练集和测试集
train_df,test_df=df.randomSplit([0.8,0.2],seed=24)

#构建特征,将多个特征合并到一个名为features的列中
vecAssembler=VectorAssembler(inputCols=['accommodates','bedrooms','bathrooms',
                                       'number_of_reviews','review_scores_rating'],
                             outputCol='features')

#训练模型:featuresCol为x,labelCol为y
lr=LinearRegression(featuresCol='features',labelCol='price')

#构建流水线
pipeline=Pipeline(stages=[vecAssembler,lr])
pipelineModel=pipeline.fit(train_df)
predDF=pipelineModel.transform(test_df) #预测结果会直接保存在prediction列中

#评估模型训练结果
evaluator=RegressionEvaluator(predictionCol='prediction',
                              labelCol='price',metricName="rmse")
rmse=evaluator.evaluate(predDF)
print('rmse:{}'.format(rmse)) #rmse结果为318.52

参考资料:

  1. 《scikit-learn的机器学习流水线技术与应用》 

  2. 《Spark快速大数据分析》

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值