spark 与 scikit-learn 机器学习流程组件设计哲学比较

概述:估算器,变换器和管道 - spark.ml

该spark.ml软件包旨在提供基于DataFrame构建的一组统一的高级API ,帮助用户创建和调整实用的机器学习流程。有关子包的指南,请参阅下面的算法指南部分 spark.ml,包括Pipelines API特有的功能转换器,集合等。

管道中的主要概念

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

DataFrame:Spark ML使用DataFrameSpark SQL作为ML数据集,它可以容纳各种数据类型。例如,a DataFrame可以具有存储文本,特征向量,真实标签和预测的不同列。

Transformer:A Transformer是一种可以将一种变换DataFrame为另一种的算法DataFrame。例如,ML模型是Transformer将DataFrame特征转换为DataFrame具有预测的特征。

Estimator:An Estimator是一种可以适合DataFrame生成a 的算法Transformer。例如,学习算法是Estimator在a上训练DataFrame并产生模型的算法。

Pipeline:将Pipeline多个Transformers和Estimators 链在一起以指定ML工作流。

Parameter:所有Transformers和Estimators现在共享一个用于指定参数的通用API。

数据帧

机器学习可以应用于各种数据类型,例如矢量,文本,图像和结构化数据。Spark ML采用DataFrameSpark SQL来支持各种数据类型。

DataFrame支持许多基本和结构化类型; 有关支持的类型列表,请参阅Spark SQL数据类型参考。除了Spark SQL指南中列出的类型之外,DataFrame还可以使用ML Vector类型。

一个DataFrame可以从常规创建或隐或显式RDD。有关示例,请参阅下面的代码示例和Spark SQL编程指南。

a DataFrame中的列被命名。下面的代码示例使用诸如“text”,“features”和“label”之类的名称。

管道组件

变形金刚

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

特征变换器可以采用a DataFrame,读取列(例如,文本),将其映射到新列(例如,特征向量),并输出DataFrame附加了映射列的新列。

学习模型可能需要a DataFrame,读取包含特征向量的列,预测每个特征向量的标签,并输出DataFrame带有作为列附加的预测标签的新元素。

估计

一个Estimator抽象学习算法或适合或数据串的任何算法的概念。从技术上讲,一个Estimator实现一个方法fit(),它接受DataFrame并生成一个 Model,这是一个Transformer。例如,学习算法例如LogisticRegression是Estimator,并且呼叫 fit()训练a LogisticRegressionModel,其是a Model,因此是a Transformer。

管道组件的属性

Transformer.transform()s和Estimator.fit()s都是无国籍的。将来,可以通过替代概念支持有状态算法。

a的每个实例Transformer或Estimator具有唯一ID,这在指定参数(下面讨论)时很有用。

管道

在机器学习中,通常运行一系列算法来处理和学习数据。例如,简单的文本文档处理工作流程可能包括几个阶段:

将每个文档的文本拆分为单词。

将每个文档的单词转换为数字特征向量。

使用特征向量和标签学习预测模型。

Spark ML表示诸如a之类的工作流Pipeline,其由要按特定顺序运行的PipelineStages(Transformers和Estimators)序列组成 。我们将在本节中将此简单工作流用作运行示例。

这个怎么运作

A Pipeline被指定为阶段序列,每个阶段是a Transformer或a Estimator。这些阶段按顺序运行,输入DataFrame在通过每个阶段时进行转换。对于Transformer阶段,该transform()方法被调用DataFrame。对于Estimator阶段,fit()方法被调用,以产生Transformer(它成为的部分PipelineModel,或装配Pipeline),以及Transformer的transform()方法被称为上DataFrame。

我们为简单的文本文档工作流说明了这一点。下图是针对a的训练时间使用情况Pipeline。

Spark ML管道示例

上图中,顶行表示Pipeline三个阶段。前两个(Tokenizer和HashingTF)是Transformers(蓝色),第三个(LogisticRegression)是Estimator(红色)。底行表示流经管道的数据,其中柱面表示DataFrames。该Pipeline.fit()方法在原始DataFrame文件上调用,原始文本文档和标签。该Tokenizer.transform()方法将原始文本文档拆分为单词,添加带有单词的新列DataFrame。该HashingTF.transform()方法将单词列转换为特征向量,将具有这些向量的新列添加到DataFrame。现在,因为LogisticRegression是一个Estimator,第Pipeline一次调用LogisticRegression.fit()产生一个LogisticRegressionModel。如果Pipeline有更多的阶段,它会打电话给LogisticRegressionModel在传递到下一阶段之前的transform() 方法。DataFrameDataFrame

A Pipeline是一个Estimator。因此,之后Pipeline的fit()方法运行时,它产生一个PipelineModel,这是一个 Transformer。这PipelineModel是在测试时使用的 ; 下图说明了这种用法。

Spark ML PipelineModel示例

在上图中,它PipelineModel具有与原始相同的阶段数Pipeline,但原始中的所有Estimators Pipeline都变为Transformers。当PipelineModel的transform()方法被称为上的测试数据集,该数据是为了通过拟合管道传递。每个阶段的transform()方法都会更新数据集并将其传递到下一个阶段。

Pipelines和PipelineModels有助于确保培训和测试数据经过相同的功能处理步骤。

细节

DAG Pipeline小号:甲Pipeline的级被指定为一个有序阵列。这里给出的例子都是线性Pipelines,即Pipelines,其中每个阶段使用前一阶段产生的数据。Pipeline只要数据流图形成有向无环图(DAG),就可以创建非线性s。目前,此图基于每个阶段的输入和输出列名称(通常指定为参数)隐式指定。如果Pipeline形成DAG,则必须按拓扑顺序指定阶段。

运行时检查:由于Pipelines可以在DataFrame具有不同类型的s上运行,因此它们不能使用编译时类型检查。 Pipelines和PipelineModels代替在实际运行之前进行运行时检查Pipeline。这种类型检查是使用DataFrame 模式完成的,模式中的列的数据类型的描述DataFrame。

独特的管道阶段:A Pipeline的阶段应该是唯一的实例。例如,myHashingTF不应将同一实例 插入Pipeline两次,因为Pipeline阶段必须具有唯一ID。但是,不同的实例myHashingTF1和myHashingTF2(两种类型HashingTF)都可以放在同一个Pipeline实例中,因为将使用不同的ID创建不同的实例。

参数

Spark ML Estimator和Transformers使用统一的API来指定参数。

A Param是带有自包含文档的命名参数。A ParamMap是一组(参数,值)对。

将参数传递给算法有两种主要方法:

设置实例的参数。例如,如果lr是实例LogisticRegression,则可以调用lr.setMaxIter(10)以lr.fit()最多使用10次迭代。此API类似于spark.mllib包中使用的API 。

传递ParamMap到fit()或transform()。在任何参数ParamMap将覆盖以前通过setter方法指定的参数。

参数属于Estimators和Transformers的特定实例。例如,如果我们有两个LogisticRegression实例lr1和lr2,然后我们可以建立一个ParamMap与两个maxIter指定的参数:ParamMap(lr1.maxIter -> 10, lr2.maxIter -> 20)。如果有两个算法的maxIter参数在a中,这很有用Pipeline。

保存和加载管道

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

代码示例

本节给出了说明上述功能的代码示例。有关详细信息,请参阅API文档(Scala, Java和Python)。一些Spark ML算法是算法的包装器spark.mllib, MLlib编程指南有关于特定算法的详细信息。

原文地址:https://www.cnblogs.com/wdmx/p/9980368.html

时间: 2024-10-03 22:48:35

spark 与 scikit-learn 机器学习流程组件设计哲学比较的相关文章

地铁译:Spark for python developers ---Spark与数据的机器学习

机器学习可以从数据中得到有用的见解. 目标是纵观Spark MLlib,采用合适的算法从数据集中生成见解.对于 Twitter的数据集, 采用非监督集群算法来区分与Apache?Spark相关的tweets . 初始输入是混合在一起的tweets. 首先提取相关特性, 然后在数据集中使用机器学习算法 , 最后评估结果和性能. ?本章重点如下: ???了解 Spark MLlib 模块及其算法,还有典型的机器学习流程 . ???? 预处理 所采集的Twitter 数据集提取相关特性, 应用非监督集

Spark Sreaming与MLlib机器学习

Spark Sreaming与MLlib机器学习 本来这篇是准备5.15更的,但是上周一直在忙签证和工作的事,没时间就推迟了,现在终于有时间来写写Learning Spark最后一部分内容了. 第10-11 章主要讲的是Spark Streaming 和MLlib方面的内容.我们知道Spark在离线处理数据上的性能很好,那么它在实时数据上的表现怎么样呢?在实际生产中,我们经常需要即使处理收到的数据,比如实时机器学习模型的应用,自动异常的检测,实时追踪页面访问统计的应用等.Spark Stream

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 1.RDIFramework.NET框架介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只须集中精力专注于业

HT图形组件设计之道(二)

上一篇我们自定义CPU和内存的展示界面效果,这篇我们将继续采用HT完成一个新任务:实现一个能进行展开和合并切换动作的刀闸控件.对于电力SCADA和工业控制等领域的人机交互界面常需要预定义一堆的行业标准控件,以便用户能做可视化编辑器里,通过拖拽方式快速搭建具体电力网络或工控环境的场景,并设置好设备对应后台编号等参数信息,将拓扑图形与图元信息一并保存到后台,实际运行环境中将打开编辑好的网络拓扑图信息,连接后台实时数据库,接下来就是接受实时数据库发送过来的采集信息进行界面实时动态刷新,包括用户通过客户

Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同时存在一个通用的搜索引擎,比如百度,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件WinForm业务平台

RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件WinForm业务平台 接前两篇: RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍 RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件Web业务平台 1.RDIFramework.NET 工作流程组件介绍 RDIFramework.NET框架V2.8以下版本不包含工作流程组件,在实际使用过程中,很多客户提出了让我们在框架中提供对工作流程

HT全矢量化的图形组件设计

HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: 矢量可无级缩放,界面不失真不模糊 描述矢量的文本内容远比图片小得多 目前各种window.devicePixelRatio不一致的设备,矢量可能是唯一彻底的解决方案 业务数据绑定 提起矢量一般都会想到SVG,但这是个坑人的玩意儿,这么多年就没见一个完善的实现者,浏览器实现千差万别,高级属性根本不能玩,Adobe SVG Viewer好多年前就停止更新,Flex支持SVG导入也仅供基本属性玩玩,当然SVG也不是一无是处hi

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件Web业务平台

RDIFramework.NET ━ .NET快速信息化系统开发框架  工作流程组件Web业务平台 接前两篇: RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍 RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件WinForm业务平台 1.RDIFramework.NET 工作流程组件介绍 RDIFramework.NET框架V2.8以下版本不包含工作流程组件,在实际使用过程中,很多客户提出了让我们在框架中提供对工作流

Python之扩展包安装(scikit learn)

scikit learn 是Python下开源的机器学习包.(安装环境:win7.0 32bit和Python2.7) Python安装第三方扩展包较为方便的方法:easy_install + packages name 在官网 https://pypi.python.org/pypi/setuptools/#windows-simplified 下载名字为 的文件. 在命令行窗口运行 ,安装后,可在python2.7文件夹下生成Scripts文件夹.把路径D:\Python27\Scripts