Apache Spark 2.0: 机器学习模型持久化
在即将发布的Apache Spark 2.0中将会提供机器学习模型持久化能力。机器学习模型持久化(机器学习模型的保存和加载)使得以下三类机器学习场景变得容易:
数据科学家开发ML模型并移交给工程师团队在生产环境中发布;
数据工程师把一个Python语言开发的机器学习模型训练工作流集成到一个Java语言开发的机器学习服务工作流;
数据科学家创建多个训练ML模型的作业,稍后需要保存和评估。
Spark MLlib将提供基于DataFrame的API来支持ML持久化。后面将分三部分介绍:概要、代码实例和MLlib持久化API一些小细节。
概要
ML持久化关键特色:
支持Spark原有的多种开发语言:Scala、Java和Python & R;
基于DataFrame的API几乎支持所有的ML算法;
支持单个ML模型和多管道ML模型;
使用可转换格式分布式保存机器学习模型
学学API
在Apache Spark 2.0中,机器学习组件MLlib提供基于DataFrame的API,可实现类似于Spark数据源API的保存和载入功能,见以前的文章。
作者使用经典的机器学习例子(手写数字识别,使用MNIST数据库,MNIST数据库包含0到9的手写数字和标注标记数据)来证实ML模型保存和加载功能。作者取其它手写数字并鉴别数字是几,完整例子代码见notebook:加载数据、训练模型和保存以及加载模型。
保存和加载单模型
首先展示如何使用不同编程语言保存和加载同一单模型。作者使用Python训练和保存随机森林分类器模型,然后使用Scala来加载同一个ML模型回来。
training = sqlContext.read... # data: features, label rf = RandomForestClassifier(numTrees=20) model = rf.fit(training)
可以简单的调用save方法来保存上面训练好的ML模型,然后使用load方法再加载回来。
model.save("myModelPath") sameModel = RandomForestClassificationModel.load("myModelPath")
这里也可以加载刚才同一个ML模型(使用Python保存)进入Scala或者Java应用。
// Load the model in Scala
val sameModel = RandomForestClassificationModel.load("myModelPath")
这个工作既可以对小数据量、局部模型(比如,常见的分类模型K-Means)适用,也可以对海量数据、分布式模型(比如,常见的推荐模型ALS)。刚加载的模型都包含有相同的参数设置和训练数据,所以即使在不同的Spark部署加载同一个模型也会得到相同的预测结果。
保存和加载多管道模型
前面仅仅描述来保存和加载单个ML模型,而实际应用中,ML工作流包含多阶段:从特征提取和转化到模型拟合和优化。MLlib会提供Pipeline来辅助使用者来构建这些工作流。
MLlib提供使用者保存和加载整个Pipeline。下面来看下如何来实现:
特征提取:图像数据二值化为0和1(黑和白);
模型拟合:随即森林分类器读取图像数据并预测数字0到9;
优化结果:交叉验证来优化树的深度。看下代码:
// Construct the Pipeline: Binarizer + Random Forest val pipeline = new Pipeline().setStages(Array(binarizer, rf))// Wrap the Pipeline in CrossValidator to do model tuning. val cv = new CrossValidator().setEstimator(pipeline) ...
在这个管道拟合模型前先来展示我们如何保存整个ML工作流。这个工作流将在其它Spark集群后续被加载。
cv.save("myCVPath") val sameCV = CrossValidator.load("myCVPath")
最后,我们拟合模型管道,保存管道,并在以后进行加载。下面保存了特征抽取、随机森林模型交叉验证的优化以及模型优化对应的统计数据。
val cvModel = cv.fit(training) cvModel.save("myCVModelPath") val sameCVModel = CrossValidatorModel.load("myCVModelPath")
细节知识点
Python优化
在Spark 2.0中并没有提供Python优化功能,Python不支持保存和加载CrossValidator和TrainValidationSplit来做模型超参数优化,这个功能将在Spark 2.1中实现(SPARK-13786)。但是Python还是可以保存CrossValidator和TrainValidationSplit的结果。例如,我们可以使用Cross-Validation优化随机森林模型并保存调试好的优化模型。
# Define the workflow rf = RandomForestClassifier() cv = CrossValidator(estimator=rf, ...) # Fit the model, running Cross-Validation cvModel = cv.fit(trainingData) # Extract the results, i.e., the best Random Forest model bestModel = cvModel.bestModel # Save the RandomForest model bestModel.save("rfModelPath")
可转换的存储格式
本质上,我们把模型元数据和参数存储为JSON,数据集存储成Parquet。这些存储格式是可转换的,并且也能被其它开发库读取。Parquet文件允许使用者存储小模型(比如,贝叶斯分类)和分布式模型(比如,ALS)。存储路径可以是任意Dataset/DataFrame支持的URI,比如S3、本地存储等。
跨语言兼容性
机器学习模型可以在Scala、Java和Python & R间任意存储和加载。但R语言有两个局限性:第一,不是所有MLlib模型都支持R语言,所以不是所有的使用其它语言训练的模型能被R语言加载;第二,使用R独有的方式的R模型格式存储不易被其它语言使用。
结论
随着Spark 2.0的即将发布,基于DataFrame的MLlib API将会提供几乎完善的模型和机器学习管道持久化。机器学习模型持久化在团队间合作、多编程语言ML工作流以及迁移模型到生产环境方面相当重要。基于DataFrame的MLlib API也将最终会成为Spark在机器学习方面主要的API。
Apache Spark 2.0: 机器学习模型持久化相关推荐
- Apache Spark 2.0预览: 机器学习模型持久化
在即将发布的Apache Spark 2.0中将会提供机器学习模型持久化能力.机器学习模型持久化(机器学习模型的保存和加载)使得以下三类机器学习场景变得容易: \\ 数据科学家开发ML模型并移交给工程 ...
- 全方位掌握Apache Spark 2.0七步走(二)
2019独角兽企业重金招聘Python工程师标准>>> 在上一篇普及过Spark的相关概念之后,让我们继续深入研究它的核心结构以及好用的API,本篇视频内容丰富,机(fan)智(qi ...
- 云栖大会 | Apache Spark 3.0 和 Koalas 最新进展
本资料来自2019-09-26在杭州举办的云栖大会的大数据 & AI 峰会分会.议题名称<New Developments in the Open Source Ecosystem: A ...
- Apache Spark 3.0 预览版正式发布,多项重大功能发布
今天早上 06:53(2019年11月08日 06:53) 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0预览版正式发布,这个版本主要是为了对即将发布 ...
- .NET for Apache Spark 1.0 版本发布
.NET for Apache Spark 1.0 现已发布,这是一个用于 Spark 大数据的 .NET 框架,可以让 .NET 开发者轻松地使用 Apache Spark. 该软件包由微软和 .N ...
- 微信团队回应“部分用户朋友圈无法刷新”;罗永浩:准备做综艺节目;Apache Spark 3.0 发布| 极客头条...
整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...
- Apache Spark探秘:多进程模型还是多线程模型?
Apache Spark探秘:多进程模型还是多线程模型? 原文链接
- Apache Spark 3.0 DStreams-Streaming编程指南
目录 总览 一个简单的例子 基本概念 连结中 初始化StreamingContext 离散流(DStreams) 输入DStreams和接收器 基本资料 进阶资源 自订来源 接收器可靠性 DStrea ...
- Apache Spark 3.0 结构化Streaming流编程指南
目录 总览 快速范例 Scala语言 Java语言 Python语言 R语言 程式设计模型 基本概念 处理事件时间和延迟数据 容错语义 使用数据集和数据帧的API 创建流数据框架和流数据集 流数据帧/ ...
最新文章
- 从0开始构建Arduino_STM32
- linux下安装新硬盘并挂载mount
- 机器学习入门10 - 正则化:简单性(Regularization for Simplicity)
- 学习Spring Boot:(十八)Spring Boot 中session共享
- 在 Oracle 中使用正则表达式
- itools 苹果录屏大师 java_AirPlayer电脑版(itools苹果录屏大师)下载|AirPlayer电脑免费版...
- 测试用例设计方法详解
- 临湘东经子午线经度_经纬度与中央子午线查询表(精确到县级)
- win10共享其它计算机文件,两台win10间如何文件共享
- python 实时股票行情_python 实时获取股票行情脚本
- 海康摄像头的ISAPI协议
- VC++调用IcmpSendEcho函数实现对远端地址的ping检测(附源码)
- QT生成动态链接库.so文件
- 计算机桌面没有cd驱动器,电脑没有光盘驱动器怎么解决?
- 超平面、半空间、多面体的辨析
- 网络安全(一) 了解什么是黑客
- buildroot 使用
- rosbag 详细使用
- [附源码]SSM计算机毕业设计水库水面漂浮物WEB系统JAVA
- EN 1096-4涂层玻璃建筑材料英国UKCA认证—EN 1096-4
热门文章
- hmacsha256是对称算法吗_HMAC-SHA256签名计算算法
- 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...
- qgraphicsview 添加矩形框并拖动改变大小_如何用手机巧影软件为视频添加字幕
- android元素离边框间距,RecyclerView Item 的分割线 距边框距离问题总结
- java 定时器delay_技术贴-java 定时器
- python导入模块教程_Python教程——导入自定义模块
- 计算机类警察限制身高吗,招警考试对身高有要求吗?男生170cm以下能否报考公安警察?...
- python使用近似公式计算e_python如何算自然底数e(方法二)
- /opt/hbase/conf 中不能启动hbase_浅谈Hbase在用户画像上的应用
- 51单片机驱动ds12887c语言,51单片机+DS12887+12864大数字时钟程序+电路