ML Pipelines
前言:在这一节中,我们介绍一个叫做ML Pipelines管道的概念。ML Pipelines提供了一套建立在 DataFrames 之上的高级APIs来帮助用户创造和协调机器学习中实际实用的管道技术。
本文布局
Pipelines的主要概念
MLlib是标准化的机器学习算法APIs来让机器学习算法变得更简单融合复杂的算法在一个管道里,或者工作流。管道是一种灵感来自于 scikit-learn project,这节将会介绍它的Pipelines API。
DataFrame:这是ML API 使用来自于Spark SQL的DataFrame作为一个ML 自己的数据集。DataFrame是一种能够支持多种数据类型的数据集。比如DataFrame能够含有不同的列存储文本,向量,真实的标签,和预测标签。
Transformer:Transformer是一种能够将一个DataFrame转化另一个DataFrame的算法。比如ML 模型是一个Transformer ,这样的模型就能够将一个有特征的DataFrame转化为一个预测的DataFrame。
Estimator:Pipelines是一个能够采取合适的方法将DataFrame产出一个Transformer。
Pipeline:Pipeline是一种被多种Transformers 和Estimators共同描述的唯一的 ML workflow;
Parameter:所有的Transformers and Estimators都共用一个指定的参数API。
DataFrame
机器学习能够被应用到各种不同的数据类型,比如向量,文本,图片,和结构化数据。这个API为了支持多样数据类型采用来自Spark SQL的DataFrame。
DataFrame支持许多基础的和结构化的类型,并且能够被RDD明确和隐性的创造。这段代码事例,DataFrame的列被text, “features,” 和 “label”命名了
Pipeline的组成
Transformers
Transformers是一个包含了特征transformers和已经学习好的模型的抽象概念。从技术上来说transformers实现了transform()方法, transform()能够将 DataFrame转化成另一个 DataFrame。通常是通过增加一个或者更多的列来实现。
Estimators
Estimators是一个学习算法或者任何在数据上训练和普适算法的抽象概念。从技术上来说,Estimators实现了 fit()方法,fit()是一种接受 DataFrame并转化为模型的方法,是一个Transformer。举个例子,
一个学习算法比如逻辑回归算法就是一个Estimators,并使fit()方法训练出一个LogisticRegressionModel。
pipeline components的属性
Transformer.transform()s 和Estimator.fit()s都是无状态的 ,在未来,状态性的算法会由可选择的概念支持。
每一个 Transformer 和 Estimator运行实例都有一个不同的ID,这个ID用来区别参数。(下文讨论)
Pipeline
在机器学习中,运行一个序列化好的数据的算法是一件很常见的事情。比如一个简单的文本处理工作流可能包含下面几个步骤。
1.对每个文档进行分词。
2.将每个文档分词转化为数学特征向量。
3.利用特征向量和标签产生一个预测模型。
MLlib使用Pipeline代表这个工作流。Pipeline由序列化好的PipelineStages和运行特定的顺序。下节点我们使用这个简单的工作流来运行一个简单的例子。
他是如何工作的
一个 Pipeline已经被指定了运行步骤,每一个步骤不是 Transformer就是Estimator,这些步骤都是按顺序运行的。输入的DataFrame数据被转化,每当通过每一个步骤。在Transformer阶段,transform()返回DataFrame。在Estimator阶段,fit()返回一个Transformer(这是一个 PipelineModel的一部分,或者已经转化合适的Pipel