暂无说说

机器学习工作流(ML Pipelines)

pyspark jiajun 8个月前 (03-10) 216次浏览 0个评论 扫描二维码

一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出。这非常类似于流水线式工作,即通常会包含源数据 ETL(抽取、转化、加载),数据预处理,指标提取,模型训练与交叉验证,新数据预测等步骤。

在介绍工作流之前,我们先来了解几个重要概念:

DataFrame:使用 Spark SQL 中的 DataFrame 作为数据集,它可以容纳各种数据类型。 较之 RDD,包含了 schema 信息,更类似传统数据库中的二维表格。它被 ML Pipeline 用来存储源数据。例如,DataFrame 中的列可以是存储的文本,特征向量,真实标签和预测的标签等。
Transformer:翻译成转换器,是一种可以将一个 DataFrame 转换为另一个 DataFrame 的算法。比如一个模型就是一个 Transformer。它可以把 一个不包含预测标签的测试数据集 DataFrame 打上标签,转化成另一个包含预测标签的 DataFrame。技术上,Transformer 实现了一个方法 transform(),它通过附加一个或多个列将一个 DataFrame 转换为另一个 DataFrame。
Estimator:翻译成估计器或评估器,它是学习算法或在训练数据上的训练方法的概念抽象。在 Pipeline 里通常是被用来操作 DataFrame 数据并生产一个 Transformer。从技术上讲,Estimator 实现了一个方法 fit(),它接受一个 DataFrame 并产生一个转换器。如一个随机森林算法就是一个 Estimator,它可以调用 fit(),通过训练特征数据而得到一个随机森林模型。

Parameter:Parameter 被用来设置 Transformer 或者 Estimator 的参数。现在,所有转换器和估计器可共享用于指定参数的公共 API。ParamMap 是一组(参数,值)对。

PipeLine:翻译为工作流或者管道。工作流将多个工作流阶段(转换器和估计器)连接在一起,形成机器学习的工作流,并获得结果输出。


工作流如何工作

要构建一个 Pipeline 工作流,首先需要定义 Pipeline 中的各个工作流阶段 PipelineStage,(包括转换器和评估器),比如指标提取和转换模型训练等。有了这些处理特定问题的转换器和 评估器,就可以按照具体的处理逻辑有序的组织 PipelineStages 并创建一个 Pipeline。比如:

pipeline =Pipeline(stages=[stage1,stage2,stage3])

然后就可以把训练数据集作为输入参数,调用 Pipeline 实例的 fit 方法来开始以流的方式来处理源训练数据。这个调用会返回一个 PipelineModel 类实例,进而被用来预测测试数据的标签。更具体的说,工作流的各个阶段按顺序运行,输入的 DataFrame 在它通过每个阶段时被转换。 对于 Transformer 阶段,在 DataFrame 上调用 transform()方法。 对于估计器阶段,调用 fit()方法来生成一个转换器(它成为 PipelineModel 的一部分或拟合的 Pipeline),并且在 DataFrame 上调用该转换器的 transform()方法。

上面,顶行表示具有三个阶段的流水线。 前两个(Tokenizer 和 HashingTF)是 Transformers(蓝色),第三个(LogisticRegression)是 Estimator(红色)。 底行表示流经管线的数据,其中圆柱表示 DataFrames。 在原始 DataFrame 上调用 Pipeline.fit()方法,它具有原始文本文档和标签。 Tokenizer.transform()方法将原始文本文档拆分为单词,向 DataFrame 添加一个带有单词的新列。 HashingTF.transform()方法将字列转换为特征向量,向这些向量添加一个新列到 DataFrame。 现在,由于 LogisticRegression 是一个 Estimator,Pipeline 首先调用 LogisticRegression.fit()产生一个 LogisticRegressionModel。 如果流水线有更多的阶段,则在将 DataFrame 传递到下一个阶段之前,将在 DataFrame 上调用 LogisticRegressionModel 的 transform()方法。

值得注意的是,工作流本身也可以看做是一个估计器。在工作流的 fit()方法运行之后,它产生一个 PipelineModel,它是一个 Transformer。 这个管道模型将在测试数据的时候使用。 下图说明了这种用法。

在上图中,PipelineModel 具有与原始流水线相同的级数,但是原始流水线中的所有估计器都变为变换器。 当在测试数据集上调用 PipelineModel 的 transform()方法时,数据按顺序通过拟合的工作流。 每个阶段的 transform()方法更新数据集并将其传递到下一个阶段。工作流和工作流模型有助于确保培训和测试数据通过相同的特征处理步骤。

喜欢 (2)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址