要构建一个 Pipeline(流水线),首先需要定义 Pipeline 中的各个 Stage,如指标提取和转换模型训练等。
<br/>
有了这些处理特定问题的 Transformer 和 Estimator,我们就可以按照具体的处理逻辑来有序地组织 Stage 并创建一个 Pipeline。
<br/>
流水线由一系列有顺序的阶段指定,每个状态的运行是有顺序的,输人的 DataFrame 通过每个阶段进行改变。在转换器阶段,`transform()` 方法被调用于 DataFrame 上。对于估计器阶段,`fit()`方法被调用来产生一个转换器,然后该转换器的 `transform()`方法被调用在 DataFrame 上。下图简单说明了文档处理工作流的运行过程。
:-: ![](https://img.kancloud.cn/1c/ef/1cefbae4852c0f5976943cd7743506d8_811x207.png)
文档处理工作流的运行过程
在上图中,第一行代表流水线处理的三个阶段。第一、二个阶段是转换器,第三个逻辑回归是估计器。底下一行代表流水线中的数据流,圆简指 DataFrame。
<br/>
`pipeline.fit()` 方法被源 DataFrame 调用,里面包含原始的文档和标签。
`Tokenizer.transform()`方法将原始文档分为词语,添加新的词语列到DataFrame 中。
`HashingTF.transform()`方法将词语列转换为特征向量,添加新的向量列到DataFrame 中。然后,因为逻辑回归是估计器,流水线先调用逻辑回归的 `fit()`方法来产生逻辑回归模型。如果流水线还有其他更多阶段,在将 DataFrame 传入下一个阶段之前,流水线会先调用逻辑回归模型的 `transform()`方法。整个流水线是一个估计器。所以当流水线的 fit()方法运行后,会产生一个流水线模型,流水线模型是转换器。流水线模型会在测试时被调用,下图说明了它的用法。
:-: ![](https://img.kancloud.cn/f9/2e/f92ec1851f01c7fa8e23c1882d26c120_775x228.png)
流水线模型图
在上图中,流水线模型和原始流水线有同样数目的阶段,然而原始流水线中的估计器此时变为了转换器。当流水线模型的 transform()方法被调用于测试数据集时,数据依次经过流水线的各个阶段。
<br/>
每个阶段的 transform()方法更新数据集,并将之传到下个阶段。流水线和流水线模型有助于确认训练数据和测试数据经过同样的特征处理流程。以上两图如果合并为一图,可用下图来表达。
:-: ![](https://img.kancloud.cn/99/a3/99a3b3311fb97ae9e7f042421e6d5c6f_460x382.jpg)
管道处理流程