ML工作流(Pipelines)中的一些概念
DataFrame:使用Spark SQL中的DataFrame作为数据集,它可以容纳各种数据类型。 DataFrame中的列可以是存储的文本,特征向量,真实标签和预测标签等。
Transformer:转换器,是一种可以将一个DataFrame转换为另一个DataFrame的算法。比如一个模型就是一个Transformer。
Estimator:评估器,基于算法实现了一个
fit()
方法进行拟合
,输入一个DataFrame,产生一个Transformer。PipeLine:管道将多个工作流阶段(转换器和估计器)连接在一起,形成机器学习的工作流。
Parameter:用来设置所有转换器和估计器的参数。
Pipelines如何运转
一个工作流被指定为一系列的阶段,每个阶段都是Transformer或Estimator。这些阶段按顺序运行,输入的DataFrame在通过每个阶段时会进行转换。对于Transformer阶段,会在DataFrame上调用transform()
方法。对于Estimator阶段,调用fit()
方法来拟合生成Transformer(它将成为PipelineModel或拟合管道的一部分),并在DataFrame上调用Transformer的transform()方法。
上图中,顶行表示具有三个阶段的管道。前两个(Tokenizer和HashingTF)是Transformers(蓝色),第三个(LogisticRegression)是Estimator(红色)。底行表示流经管道的数据,其中圆柱表示DataFrames。在原始DataFrame上调用Pipeline.fit()
方法拟合,它具有原始的文本和标签。Tokenizer.transform()
方法将原始文本拆分为单词,并向DataFrame添加一个带有单词的新列。 HashingTF.transform()
方法将字列转换为特征向量,向这些向量添加一个新列到DataFrame。然后,由于LogisticRegression一个Estimator,Pipeline首先调用LogisticRegression.fit()
拟合产生一个LogisticRegressionModel。如果管道有更多的Estimator,则在将DataFrame传递到下一个阶段之前,会先在DataFrame上调用LogisticRegressionModel的transform()
方法。
PipeLine本身也是一个Estimator。因而,在工作流的fit()
方法运行之后,它产生了一个PipelineModel,它也是一个Transformer。这个管道模型将在测试数据的时候使用。下图展示了这种用法。
在上图中,PipelineModel具有与原始Pipeline相同的阶段数,但是原始Pipeline中的所有估计器Estimators都变为变换器Transformers。当在测试数据集上调用PipelineModel的transform()
方法时,数据按顺序通过拟合的管道。每个阶段的transform()方法更新数据集并将其传递到下一个阶段。Pipelines和PipelineModels有助于确保训练数据集和测试数据集通过相同的特征处理步骤。
理解Estimator,Transformer和Param
相关API :Estimator
,Transformer
,Params
1 | from pyspark.ml.linalg import Vectors |
可参考examples/src/main/python/ml/estimator_transformer_param_example.py
Pipeline
相关API :Pipeline
1 | from pyspark.ml import Pipeline |