当前位置:   article > 正文

python Pipelines(管道)_python pipelines

python pipelines

 

https://blog.csdn.net/cheng9981/article/details/63279807

机器学习库(MLlib)指南
    MLlib是Spark的机器学习(ML)库。 它的目标是使实用的机器学习可扩展和容易。它提供了一个高水平的工具,如:
    ML算法:常见的学习算法,如分类,回归,聚类和协同过滤
    特征:特征提取和选择,变换,降维
    管道:用于构建,评估和调整ML管道的工具
    持久性:保存和加载算法,模型和管道
    工具:线性代数,统计,数据处理等
一、ML Pipelines:
    在本节中,我们介绍ML管线的概念。ML管道提供一套统一的高级API,它建立在DataFrames之上,帮助用户创建和调整实用的机器学习管道。
    1、管道中的主要概念
        1.1 DataFrame
        1.2 管道组件
            1.2.1 Transformers
            1.2.2 Estimators
            1.2.3 管道组件的性能

        1.3 Pipeline
            1.3.1 How it works
            1.3.2 Details

        1.4 参数
        1.5 保存和加载管道
    2、代码示例
        2.1 示例:Estimator, Transformer, and Param
        2.2 示例:Pipeline
        2.3 Model selection (hyperparameter tuning)

 1、管道中的主要概念
     MLlib为机器学习算法标准化API,以便更容易将多个算法合并到单个管道或工作流中。 本部分涵盖Pipelines API引入的关键概念,其中管道概念
 主要受scikit-learn项目的启发。
     DataFrame:这个是ML的API使用Spark SQL中的DataFrame作为ML数据集,它可以容纳各种数据类型。 例如,DataFrame可以具有存储文本,特征向量,真实标签和预测的不同列。
     变换器:变换器是一种可以将一个DataFrame转换为另一个DataFrame的算法。 例如,ML模型是将具有特征的DataFrame转换为具有预测的DataFrame的Transformer。
     估计器:估计器是一种可以适合DataFrame以产生变换器的算法。 例如,学习算法是在DataFrame上训练并产生模型的估计器。
     管道:管道将多个变换器和估计器链接在一起,以指定ML工作流。
     参数:所有变换器和估计器现在共享用于指定参数的公共API。
     
     
1.1 DataFrame
    机器学习可应用于各种各样的数据类型,例如向量,文本,图像和结构化数据。 此API采用Spark SQL中的DataFrame以支持各种数据类型。
DataFrame支持许多基本和结构化类型; 相关的支持类型,请参阅Spark SQL数据类型参考。 除了Spark SQL指南中列出的类型之外,
DataFrame还可以使用ML Vector类型。可以从常规RDD隐式或显式创建DataFrame。 请参阅下面的代码示例和Spark SQL编程指南的示例。
DataFrame中的列已命名。 下面的代码示例使用名称,如“text”,“功features”和“label”。


1.2 Pipeline components
1.2.1 Transformers
    Transformers是包括特征变换和学习模型的一种抽象。 技术上,Transformer实现了一个方法transform(),它通过附加一个或多个列将一个DataFrame转换为另一个DataFrame。 例如:特征变换器可以采用DataFrame,读取列(例如,文本),将其映射到新列(例如,特征向量),并且输出具有附加的映射列的新DataFrame。学习模型可以采用DataFrame,读取包含特征向量的列,预测每个特征向量的标签,并输出新的DataFrame,其中预测的标签作为列添加。
     
1.2.2 Estimators
    Estimators是学习算法或任何算法对数据进行填充和训练的概念。 从技术上讲,Estimator实现了一个方法fit(),它接受一个DataFrame并产生一个Model,可以说是一个一个Transformer。例如,诸如LogisticRegression的学习算法是Estimators,并且调用fit()训练LogisticRegressionModel,因为LogisticRegressionModel是一个模型,因此Estimators也是一个Transformers。


1.2.3 Properties of pipeline components
    Transformer.transform()和Estimator.fit()都是无状态的。 在将来,可以经由替代概念来支持状态算法。
    Transformer或Estimator的每个实例都有一个唯一的ID,在指定参数(下面讨论)时很有用。


1.3 Pipeline
    在机器学习中,通常运行一系列算法来处理和学习数据。 例如,简单的文本文档处理工作流可以包括以下几个阶段:
    (1)将每个文档的文本拆分为单词。
    (2)将每个文档的单词转换为数字特征向量。
    (3)使用特征向量和标签了解预测模型。


    MLlib将包括以特定顺序运行的PipelineStages(Transformers和Estimators)序列的工作流表示为Pipeline。 
在本节中,我们将使用这个简单的工作流程作为一个运行的例子。


1.3.1 How it works
    Pipeline被指定为阶段序列,并且每个阶段是Transfomer或Estimator。这些阶段按顺序运行,并且输入DataFrame在其通过每个阶段时被转换。 对于Transformer阶段,在DataFrame上调用transform()方法。 对于Estimator阶段,调用fit()方法以产生Transformer(它成为PipelineModel的一部分或拟合的管道),并且Transformer的transform()方法在DataFrame上调用。 我们说明这个简单的文本文档工作流。 下图是管道的训练时间用法。


                  ML Pipeline Example


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


    Pipeline是一个Estimator。 因此,在Pipeline的fit()方法运行之后,它产生一个PipelineModel,它是一个Transformer。 这个管道模型在测试时使用;
下图说明了这种用法。
            
            
          ML PipelineModel Example
             
    在上图中,PipelineModel具有与原始流水线相同的级数,但是原始流水线中的所有Estimator都变为Transformer。 当在test数据集上调用PipelineModel的transform()
方法时,数据按顺序通过拟合Pipiline。 每个阶段的transform()方法更新数据集并将其传递到下一个阶段。
    Pipelines and PipelineModels有助于确保 training和test数据通过相同的特征处理步骤。
    
1.3.2 Details
    DAG管道:Pipeline的阶段被指定为有序数组。这里给出的示例全部用于线性Pipeline,即其中每个级使用由前一级产生的数据的Pipeline。只要数据流图形形成定向非循环图(DAG),
就可以创建非线性Pipeline。此图形当前基于每个阶段的输入和输出列名称(通常指定为参数)隐式指定。如果Pipeline形成DAG,则这个阶段必须以拓扑顺序指定。
    运行时检查:由于Pipelines可以对不同类型的DataFrames进行操作,因此它们不能使用编译时类型检查。 Pipelines和PipelineModel而不是在实际运行管道之前进行运行时检查。
此类型检查是使用DataFrame模式完成的,DataFrame模式是DataFrame中列的数据类型的描述。
    独特的流水线阶段:流水线的阶段应该是唯一的实例。例如,相同的实例myHashingTF不应该插入管道两次,因为管道阶段必须具有唯一的ID。
然而,不同的实例myHashingTF1和myHashingTF2(两者类型HashingTF)可以放入同一流水线,因为不同的实例将创建与不同的ID。


1.4 参数
    MLlib的Estimators和Transformers使用统一的API来指定参数。Param是一个包含文档的命名参数。 ParamMap是一组(parameter,value)对。
将参数传递给算法有两种主要方法: 设置实例的参数。 例如,如果lr是LogisticRegression的一个实例,可以调用lr.setMaxIter(10)使lr.fit()最多使用10次迭代。
此API类似于spark.mllib包中使用的API。 将paramMap传递给fit()或transform()。 ParamMap中的任何参数都将覆盖先前通过setter方法指定的参数。
参数属于Estimators和Transformers的特定实例。 例如,如果我们有两个LogisticRegression实例lr1和lr2,
那么我们可以创建一个具有指定的maxIter参数的ParamMap:ParamMap(lr1.maxIter - > 10,lr2.maxIter - > 20)。 
如果在流水线中有两个算法带有maxIter参数,这是有用的。


1.5 保存和加载管道
    通常,值得将模型或管道保存到磁盘以备后用。 在Spark 1.6中,模型导入/导出功能已添加到Pipeline API。 支持大多数基本变压器以及一些更基本的ML模型。
请参阅算法的API文档,以了解是否支持保存和加载。


2、代码示例
    本节给出了说明上述功能的代码示例。 有关详细信息,请参阅API文档(Scala,Java和Python)。
2.1 示例:Estimator, Transformer, and Param

     此示例涵盖Estimator,Transformer和Param的概念。不知道什么问题,源代码运行不了

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/989793
推荐阅读
相关标签
  

闽ICP备14008679号