Apache Spark 机器学习 管道 3

news2024/11/19 16:23:27

Apache Spark的机器学习管道提供一个统一的、高级的APIs集合,该APIs集合是以数据框架(Datagrams)为基础,帮助开发人员创建或者优化一个用于实际环境的机器学习的管道。

管道(Pipeline)的基本概念

Spark机器学习类库MLlib提供丰富的用于机器学习的算法,使得机器学习更加容易地在一个管道、工作流程中综合多种不同的算法,以提供更加强大的机器学习能力,管道的基本概念如下所示:

  • DataFrame,机器学习API使用Spark SQL的数据框架DataFrame作为用于数据处理的数据集,该数据框架提供多数据列的支持、支持丰富多样的数据类型,例如,其数据类型包括文本、特征集合、标签以及预测结果

  • Transformer,数据框架转换器,提供将一个数据框架转换成其他的数据框架,例如,一个机器学习的模型对应一个转换器,其将包括特征集的数据框架转换成包括预测结果的数据框架

  • Estimator,估算函数或者估算器,对应一个算法,其对一个数据框架(特征数据样本)进行拟合(fit),最终训练成以及输出一个用于预测的模型,用于机器学习的算法是一个估算函数

  • Pipeline,管道是一个链式的处理过程,其链接了多个Transformer、多个Estimator,并综合在一起,形成一个用于机器学习的工作流程

  • Parameter,所有的Transformer以及Estimator使用共同的API指定参数

数据框架

机器学习能被广泛地运用于各种不同的数据类型,例如,文本、向量集、图像以及结构化的数据,Spark机器学习的API适配Spark SQL的DataFrame就是为了支持各种不同的数据类型。

管道的组件

如前面所述,管道包括的组件是Transformers、Estimators。

转换器(Transformers)

该组件是用于对DataFrame执行转换,是一个抽象的结构,其具体实现包括特征转换器以及学习的模型,在技术上,一个转换器Transformer实现了其方法transform,该方法对输入的DataFrame执行转换成另外一个DataFrame输出,一般情况下,输出的DataFrame增加了列或者减少了列,其特性描述如下所示:

  •  一个特征转换器Transformer,读取输入的DataFrame的列(文本),然后,映射(map)成一个新列(特征集),最后,输出一个新的、包括新列的DataFrame

  • 一个学习模型,读取输入的DataFrame的特征集,为每个特征向量预测其对应的标签,最后,输出一个新的、包括预测标签列的DataFrame

估算器(Estimators)

估算器是一个学习算法或者任何算法的抽象,是用于拟合(fit)数据或者训练(train)数据,技术上,一个估算器Estimator实现了方法fit,该方法接受一个DataFrame作为输入,然后,产生一个模型作为输出,其对应一个已学习的模型的Transformer,例如,LogisticRegression逻辑回归类是一个估算器Estimator,其调用fit方法,训练成一个LogisticRegressionModel逻辑回归模型类,这是一个模型、也是一个Transformer转换器。

管道组件的属性

目前转换器的Transformer.transform()方法以及估算器的Estimator.fit()方法都是无状态的,在未来的版本中,可能会提供有状态算法的支持。

然而,每个转换器实例、每个估算器实例都包括一个唯一性的ID,该机制在指定参数的时候发生非常大的作用。

管道(Pipeline)

机器学习通常会按照顺序地运行一系列的算法处理数据以及从数据中学习,例如,一个简单的文本文档的处理包括如下所示的阶段:

  • 对每个文档的文本进行分词的处理,输出单词的序列

  • 将每个文档的单词序列转换成数字特征向量

  • 使用特征向量及其对应的标签学习一个可从新数据样本中进行预测的模型

机器学习类库MLlib将这些阶段的工作流程定义成一个管道,管道中包括一系列的PipelineStages(管道阶段,Transformers或者Estimators),其按照指定的顺序执行。

工作原理

如前面所述,一个管道是由一连串的阶段组成,每个阶段是一个Transformer转换器或者是一个Estimator估算器,这些阶段是按照指定的顺序执行,输入的数据框架DataFrame经过每个阶段,都会被转换成新的数据框架DataFrame,如果是Transformer 阶段,则执行其transform方法,如果Estimator阶段,则执行其fit方法、并且生成一个Transformer(是一个已经训练完成、已拟合的模型,PipelineModel),最后,调用输出模型的transfrom方法对全新的样本数据进行预测。

如上所示,蓝色框内指的是Transformer、红色框内指的是Estimator,圆柱表示数据框架DataFrame用于存储数据集。

其中,上层的Tokenizer以及HashingTF表示两个Transformer,LogisticRegression表示一个Estimator,下层表示通过管道的数据流。

首先,调用的是Pipeline的fit方法,该方法处理原始输入的DataFrame(数据样本),其包括文本文档及其对应的标签,调用Tokenizer的transform方法将上一步骤的文本文档分割成单词,输出包括新列单词词汇的新DataFrame,调用HashingTF的transform方法将上一步骤的新列单词词汇转换成特征向量集,输出包括新列特征向量集的新DataFrame,调用LogisticRegression的fit方法对上一步骤的特征向量集进行模型训练,输出一个LogisticRegressionModel已经拟合的、训练完成的模型。

由以上的分析可知,Pipeline管道是一个Transformer转换器,调用其fit方法,可以输出一个训练完成的PipelineModel模型。

如上所示,模型训练完成之后,调用PipelineModel的transform方法执行数据样本测试阶段,并用于对全新的数据进行预测。其中,PipelineModel与Pipeline包含的阶段保持一致。

其中,上层显示,Tokenizer、HashingTF以及LogisticRegressionModel这些蓝色框内的组件已经全部是Transformer。

其中,下层显示,调用PipelineModel的transform方法对测试样本数据集进行预测分析,随着数据流的流向,按照阶段的顺序执行每个阶段,每个阶段的transform方法更新DataFrame数据框架中的数据集,最后,输出特征向量集对应的预测结果Predictions标签数据集。

由以上的分析可知,Pipeline管道以及PipelineModel管道模型分别用于训练数据以及测试数据,两者的数据流都经历了相同的处理步骤。

管道其他性质

为了提高管道的执行效率以及管道的可用性,管道也提供以下的属性支持:

DAG管道

管道包括的阶段是以一个顺序的数组结构进行存储,如前面所述的管道类型是线性管道,其以固定顺序执行管道中的阶段,非线性管道包括的阶段对应的数据流图形成一个DAG(Directed Acyclic Graph),该图是有向非循环图,也就是,所有阶段对应的数据流不会形成一个闭环,该图是以每个阶段中的列的名称进行隐式地指定,如果管道形成一个DAG,则管道包括的阶段是拓扑(图理论)的顺序指定

运行时检查

由于管道是对包括不同数据类型的数据框架DataFrame进行操作,所以,管道做不到在编译阶段就对数据类型进行合法性校验,Pipeline与PipelineModel是在执行管道阶段之前对数据类型进行运行时的合法性校验,开发者可以在数据框架DataFrame中定义对列的合法性校验规则

唯一性管道阶段

管道包括的每个阶段在整个机器学习过程中必须保持唯一性的实例,相同的实例不能在相同的管道中使用两次,但是相同类型的两个不同实例可以在管道重复使用,因为不同的实例具有不同的唯一性ID

管道的实例代码1

如上所示,创建了两个模型,分别对模型设置最大迭代次数以及设置参数,使用模型2进行测试数据集的预测分析。

管道的实例代码2

如上所示,创建了一个管道,使用管道对测试数据集进行预测分析。

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试之Bug与用例【创建Bug、Bug级别、Bug生命周期、测试用例的万能公式、设计测试用例具体方法】

文章目录1. 如何创建Bug2. Bug的级别3. Bug的生命周期4. 面试题:跟开发产生争执怎么办5. 设计测试用例的万能公式使用万能公式对水杯设计测试用例6. 设计测试用例的具体方法6.1 等价类6.2 边界类6.3 判定表6.4 正交法(allparis)6.5 场景设计法1. 如何创建Bug 提 Bu…

关于USB的事儿

FTDI公司的产品值得研究,包含很多USB转接芯片【串口、SPI、IIC、JTAG】。USB通信芯片本身也是需要编程的,上位机和USB芯片通信是需要驱动的,才能实现对应的识别。上位机(VB、C#、C等一系列面向对象程序)调用dll文件,里面很多API函…

集群安全Security

一、多节点 1、配置文件中配置 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.client_authentication: required xpack.security.transport.ssl.ke…

Java中最常用的循环--for循环

文章目录0 写在前面1 格式2 举例说明三种循环之间的区别写在最后0 写在前面 Java for循环用于多次迭代程序的一部分,或者多次执行同一个代码块。如果迭代次数是固定的,建议使用for循环。 说实在的,for循环就是while循环的变种。只不过限定条…

初识网络原理

网络的迅速发展普及了计算的使用,网路由一开始的独立模式(计算机之间相互独立)到局域网(局域网内的主机之间能方便的进行网络通信)再到现在的广域网(通过路由器将多个局域网连接起来,在物理上组…

Java多线程进阶

目录1.常见锁策略1.1 乐观锁和悲观锁1.2 读写锁和普通互斥锁1.3 重量级锁和轻量级锁1.4 挂起等待锁和自旋锁1.5 公平锁和非公平锁1.6 重入锁和非重入锁1.7 synchronized锁的特点2.CAS2.1 CAS实现原子类2.2 实现自旋锁2.3 CAS的ABA问题2.4 解决ABA问题3.synchronized的锁优化机制…

“华为杯”研究生数学建模竞赛2004年-【华为杯】B题:有交货时间限制的大规模实用下料问题(附优秀论文)

赛题描述 “下料问题(cutting stock problem)”是把相同形状的一些原材料分割加工成若干个不同规格大小的零件的问题,此类问题在工程技术和工业生产中有着重要和广泛的应用. 这里的“实用下料问题”则是在某企业的实际条件限制下的单一材料的下料问题。 一个好的下料方案首先…

axios踩坑,不同版本默认Content-Type不同

文章目录1、请求封装2、问题axios 0.21源码axios 1.2源码总结1、请求封装 封装代码: /**axios封装* 请求拦截、相应拦截、错误统一处理*/ import axios from axios import QS from qs; import { Message } from element-ui// 环境的切换 if (process.env.NODE_ENV…

大数据必学Java基础(一百二十):Maven工程的介绍与创建

文章目录 Maven工程的介绍与创建 一、Maven工程类型 1、POM工程 2、JAR工程 3、WAR工程

Cookie、Session、Token、JWT详解

Cookie、Session、Token、JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹…

盖子的c++小课堂——第九讲:文件输入输出

前言 作者:哈咯大家好,我是盖…… 粉丝:更新更新!再不更新我来偷你家马桶盖!快更快更~~ 作者:子的盖…… 粉丝:再不更我真来偷你家马桶盖了昂~~ 作者:……啊!&#…

实用!ArcGIS更改字段名称、类型、顺序的技巧

01需求说明 常规来说。ArcGIS属性表中的字段一旦建立,他的顺序、字段名称、字段的类型是没有办法更改的。 我们在属性表中拖动字段,也只是改变了字段的临时显示顺序。一旦数据重新加载就会显示会原来的顺序。 那么有什么技巧来解决这样的问题&#xff0c…

python爬虫的简单复习1【使用etree进行XPath解析】

一、相关知识1.1 etree的使用1.1.1 编码流程将HTML文本加载到etree对象中调用etree的xpath()函数完成标签定位对标签为所欲为(此时获得的标签其实是xpath()函数返回的对象)1.1.2 环境安装pip install lxml1.1.3 实例化etree对象# 首先导入模块 from lxml…

优思学院|如何更有效地进行5why分析(五问法)?

所谓5-why(五个为什么或五问法),意思是要问五次 "为什么",直到你找到问题的根本原因。具体的过程是:首先确定问题,然后回答"为什么",并记录答案。第二次回答"为什么&q…

虚拟串口及其在串口转以太网中的应用

本文介绍虚拟串口的概念,以及如何在串口转以太网中利用该技术。 1.虚拟串口的概念 虚拟串口是用操作系统的虚拟驱动技术产生的串口(COM口),相对于计算机本身的硬件串口(COM1等)来说虚拟串口并不对应一个物…

贪心法讲解

目录 一、前言 二、贪心法 1、优缺点 2、例子:最少硬币问题 3、贪心和动态规划 4、例题:快乐司机(lanqiaoOJ题号1513) 5、例题:旅行家的预算(lanqiaoOJ题号775) 三、例题 1、翻硬币&am…

数据结构:线性表的类型定义

线性表的类型定义 线性表是最简单、也是最基本的一种线性数据结构。它有两种存储表示方法:顺序表和链表,它的主要基本操作是插入、删除和查找。 线性表是n(n>0)个数据元素的有限序列,表中各个数据元素具有相同特性,即属同一数…

LeetCode 114. 二叉树展开为链表

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 114. 二叉树展开为链表,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 Leet…

2021年大数据挑战赛A题智能运维中的异常检测与趋势预测

2021年大数据挑战赛 A题 智能运维中的异常检测与趋势预测 原题再现: 异常检测(异常诊断/发现)、异常预测、趋势预测,是智能运维中首当其冲需要解决的问题。这类问题是通过业务、系统、产品直接关联的 KPI 业务指标进行分析诊断&…

MD语法 官方参考

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…