spark官方文档Mlib学习(一)

机器学习库指南

MLlib时Spark的机器学习库,其目标是使实用的机器学习可扩展切容易。在较高级别,它提供了以下工具:

  • 机器学习算法:常用的学习算法如分类,回归,聚类,和协同过滤。
  • 特征化:特征抽取,变换,降维和选择
  • 管道:用于构建,评估和调整ML管道的工具

声明:基于DataFrame的API是主要API
基于MLlib RDD的API现在处于维护模式。

Data sources

在本节中,我们将介绍如何在ML中使用数据源加载数据,除了Parquet,CSV,JSON和JDBC之类的常规数据源外,还提供了一些特定的数据源。

图像数据源

该图像数据源用于从目录加载图像文件,它可以通过Java库中的ImageIO将压缩图像(jpeg,png等)加载为原始图像表示形式。 加载的DataFrame具有一个StructType列:“ image”,包含存储为图像架构的图像数据。 image列的架构为:

  • origin: StringType (represents the file path of the image)
  • height: IntegerType (height of the image)
  • width: IntegerType (width of the image)
  • nChannels: IntegerType (number of image channels)
  • mode: IntegerType (OpenCV-compatible type)
  • data: BinaryType (Image bytes in -OpenCV-compatible order: row-wise BGR in most cases)
>>> df = spark.read.format("image").option("dropInvalid", true).load("data/mllib/images/origin/kittens")
>>> df.select("image.origin", "image.width", "image.height").show(truncate=False)

ML 管道

在本节中,我们介绍ML管道的概念。 ML管道提供了一组统一的高级API,这些API建立在DataFrame之上,可帮助用户创建和调整实用的机器学习管道。

Main concepts in Pipelines

MLlib标准化了用于机器学习算法的API,从而使将多种算法组合到单个管道或工作流程中变得更加容易。 本节介绍了Pipelines API引入的关键概念,其中管道概念主要受scikit-learn项目的启发。

  • DataFrame:该ML API使用Spark SQL中的DataFrame作为ML数据集,该数据集可以保存各种数据类型。例如,DataFrame可以具有不同的列,用于存储文本,特征向量,真实标签和预测值。
  • Transformers:Transformers是一种将一个DataFrame转换为另一个DataFrame的算法。
  • Estimator:估计器是一种算法,可以适合于DataFrame来生成Transformer。例如,学习算法是在DataFrame上进行训练并生成模型的Estimator。
  • Pipeline:管道将多个Transformer和Estimators链接在一起以指定ML工作流
  • Parameter:现在,所有的TransformerS和EstimatorS共享一个公用的API用于指定参数。
DataFrame

机器学习可以应用于多种数据类型,例如矢量,文本,图像和结构化数据。该API采用Spark SQL中的DataFrame,以支持多种数据类型.
DataFrame支持许多基本类型和结构化类型。请参阅Spark SQL数据类型参考以获取受支持类型的列表。除了Spark SQL指南中列出的类型之外,DataFrame还可使用ML Vector类型。
可以从常规RDD隐式或显式创建DataFrame。有关示例,请参见下面的代码示例和Spark SQL编程指南。

Transformer

变形器是一种抽象,其中包括特征转换器和学习的模型。从技术上讲,Transformer实现了transform()方法,该方法通常通过附加一个或多个列将一个DataFrame转换为另一个。例如:

  • 特征转换器可以获取一个DataFrame,读取一列(例如,文本),将其映射到一个新列(例如,特征向量),然后输出一个新的DataFrame并附加映射的列。
  • 学习模型可能需要一个DataFrame,读取包含特征向量的列,预测每个特征向量的标签,然后输出带有预测标签的新DataFrame作为列添加。
Estimators

估计器抽象学习算法或适合或训练数据的任何算法的概念。从技术上讲,一个Estimator实现一个fit()方法,该方法接受一个DataFrame并生成一个Model,即一个Transformer。例如,诸如LogisticRegression之类的学习算法是Estimator,调用fit()可以训练LogisticRegressionModel,后者是Model,因此是Transformer。

Transformer.transform()和Estimator.fit()都是无状态的。将来,可通过替代概念来支持有状态算法。每个Transformer或Estimator实例都有一个唯一的ID,该ID在指定参数时很有用。

Pipeline

在机器学习中,通常需要运行一系列算法来处理数据并从中学习。例如,简单的文本文档处理工作流程可能包括几个阶段:
- 将每个文档的文本拆分为单词。
- 将每个文档的单词转换成数字特征向量。
- 使用特征向量和标签学习预测模型。

MLlib将这样的工作流表示为“管道”,它由要按特定顺序运行的一系列PipelineStages(变形器和估计器)组成。在本节中,我们将使用此简单的工作流作为运行示例。

工作流程

管线被指定为阶段序列,每个阶段可以是一个Transformer或Estimator。 这些阶段按顺序运行,并且输入DataFrame在通过每个阶段时都会进行转换。 对于Transformer阶段,在DataFrame上调用transform()方法。 对于Estimator阶段,调用fit()方法以生成一个Transformer(它将成为PipelineModel或已拟合Pipeline的一部分),并且在DataFrame上调用该Transformer的transform()方法。
我们为简单的文本文档工作流程说明了这一点。下图是管道的训练时间使用情况。
在这里插入图片描述
在上方,第一行代表一个包含三个阶段的管道。前两个(令牌生成器和HashingTF)是变形器(蓝色),第三个(LogisticRegression)是估计器(红色)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值