2.1组件(ml)

2.1 组件(ml)

2.1.1 管道化(Pipeline)

虽然 MLlib 已经足够简单实用,但如果目标数据集结构复杂,需要多次处理,或是在学习过程中,要使用多个转化器 (Transformer) 和预测器 (Estimator),这种情况下使用 MLlib 将会让程序结构极其复杂。所以,一个可用于构建复杂机器学习工作流应用的新库已经出现了,它就是 Spark 1.2 版本之后引入的 ML Pipeline。ML Pipeline 是建立在 DataFrames 上的更高层次的 API 库,旨在帮助使用者来创建和调试实际的机器学习工作流。

Pipeline组件:

DataFrame

ML API 使用 Spark SQL 中的 DataFrame 作为机器学习数据集,可以容纳很多种类型的数据:文本、向量、图像和结构化数据等等。Spark DataFrame 以 RDD(Resilient Distributed Datasets) 为基础,但是带有 Schema(数据库中对象的集合)信息,类似于传统数据库中的二维表格。

Transformer

中文可译作转换器,继承自 PipelineStage,它是一个算法,可以将一个 DataFrame 转换成另一个 DataFrame。如:一个特征转换器对 DataFrame 的操作可能为,读取一个文本列,将其映射为一个新的特征向量列,然后输出一个带有特征向量的新的 DataFrame。一个机器学习模型对 DataFrame 的操作可能为,读取一个带有特征向量的列,对每一个特征向量进行预测,然后输出一个带有预测数据的新的 DataFrame。

Estimator

中文可译作预测器,它也是一个算法。预测器通过 fit() 方法,接收一个 DataFrame 并产出一个模型。例如,逻辑回归 (LogisticRegression) 算法就是一种预测器,通过调用 fit() 方法来训练得到一个逻辑回归模型。

注:Transformer.transform() 和 Estimator.fit() 都是无状态的。未来可能会被有状态的算法替代。每个转换器和预测器都有唯一 ID,这在调参过程中很有用。

Pipeline

Pipeline 连接多个转换器和预测器在一起,形成一个机器学习工作流。

在机器学习过程中,通过一系列的算法来处理和学习数据是很普遍的,例如,一个简单的文档处理工作流可能包括以下几步:

  1. 将每个文档分成单个词
  2. 将文档中的词转化成数字化的特征向量(关于这步可以参考我之前写过的文章:数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder)
  3. 基于特征向量和标签学习得到预测模型

MLlib 将上述一个工作流归为一个 Pipeline,包括一系列的 PipelineStage(多个 Transformer 和 Estimator),按特定的顺序执行。

Parameter

所有的转换器和预测器使用同一个 API 来指定参数。 一个 Param 是被定义好的已命名参数。一个 ParamMap 是一组“参数-值” (parameter, value) 对。向一个算法传参的方法主要有两种:

  1. 为实例设置参数。例如,lr 是 LogisticRegression 的一个实例,我们可以通过调用 lr.setMaxIter(10) 方法来设定 lr.fit() 最多进行10次迭代。这个 API 和 spark.mllib 包中的 API 相似。
  2. 通过 ParamMap 给 fit() 和 transform() 传参。ParamMap 中的参数将会覆盖之前通过 setter 方法设置过的参数。

如果我们有两个 LogisticRegression 实例 lr1 和 lr2,可以创建一个包含两个 maxIter 的 ParamMap:ParamMap(lr1.maxIter -> 10, lr2.maxIter -> 20)。如果一个 Pipeline 里有两个带有 maxIter 的算法,这种方法比较实用。

工作原理:

Pipeline 由一系列 stage 组成,每个 stage 为一个转换器 (Transformer) 或预测器 (Estimator)。这些 stage 的执行是按一定顺序的,输入的 DataFrame 在通过每个 stage 时被改变。在转换器阶段,transform() 方法作用在 DataFrame 上。预测器阶段,调用 fit() 方法来产生一个转换器(成为 PipelneModel 的一部分),然后该转换器的 transform() 方法作用在 DataFrame 上。

2.1组件(ml)_第1张图片

 

返回主目录(Spark MLlib算法思想总结)

 

2.1组件(ml)_第2张图片

你可能感兴趣的:(Spark,MLlib,机器学习算法,ml,Spark)