在即将发布的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应用。

  1. // Load the model in Scala

  2. 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: 机器学习模型持久化相关推荐

  1. Apache Spark 2.0预览: 机器学习模型持久化

    在即将发布的Apache Spark 2.0中将会提供机器学习模型持久化能力.机器学习模型持久化(机器学习模型的保存和加载)使得以下三类机器学习场景变得容易: \\ 数据科学家开发ML模型并移交给工程 ...

  2. 全方位掌握Apache Spark 2.0七步走(二)

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇普及过Spark的相关概念之后,让我们继续深入研究它的核心结构以及好用的API,本篇视频内容丰富,机(fan)智(qi ...

  3. 云栖大会 | Apache Spark 3.0 和 Koalas 最新进展

    本资料来自2019-09-26在杭州举办的云栖大会的大数据 & AI 峰会分会.议题名称<New Developments in the Open Source Ecosystem: A ...

  4. Apache Spark 3.0 预览版正式发布,多项重大功能发布

    今天早上 06:53(2019年11月08日 06:53) 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0预览版正式发布,这个版本主要是为了对即将发布 ...

  5. .NET for Apache Spark 1.0 版本发布

    .NET for Apache Spark 1.0 现已发布,这是一个用于 Spark 大数据的 .NET 框架,可以让 .NET 开发者轻松地使用 Apache Spark. 该软件包由微软和 .N ...

  6. 微信团队回应“部分用户朋友圈无法刷新”;罗永浩:准备做综艺节目;Apache Spark 3.0 发布| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  7. Apache Spark探秘:多进程模型还是多线程模型?

    Apache Spark探秘:多进程模型还是多线程模型? 原文链接

  8. Apache Spark 3.0 DStreams-Streaming编程指南

    目录 总览 一个简单的例子 基本概念 连结中 初始化StreamingContext 离散流(DStreams) 输入DStreams和接收器 基本资料 进阶资源 自订来源 接收器可靠性 DStrea ...

  9. Apache Spark 3.0 结构化Streaming流编程指南

    目录 总览 快速范例 Scala语言 Java语言 Python语言 R语言 程式设计模型 基本概念 处理事件时间和延迟数据 容错语义 使用数据集和数据帧的API 创建流数据框架和流数据集 流数据帧/ ...

最新文章

  1. 从0开始构建Arduino_STM32
  2. linux下安装新硬盘并挂载mount
  3. 机器学习入门10 - 正则化:简单性(Regularization for Simplicity)
  4. 学习Spring Boot:(十八)Spring Boot 中session共享
  5. 在 Oracle 中使用正则表达式
  6. itools 苹果录屏大师 java_AirPlayer电脑版(itools苹果录屏大师)下载|AirPlayer电脑免费版...
  7. 测试用例设计方法详解
  8. 临湘东经子午线经度_经纬度与中央子午线查询表(精确到县级)
  9. win10共享其它计算机文件,两台win10间如何文件共享
  10. python 实时股票行情_python 实时获取股票行情脚本
  11. 海康摄像头的ISAPI协议
  12. VC++调用IcmpSendEcho函数实现对远端地址的ping检测(附源码)
  13. QT生成动态链接库.so文件
  14. 计算机桌面没有cd驱动器,电脑没有光盘驱动器怎么解决?
  15. 超平面、半空间、多面体的辨析
  16. 网络安全(一) 了解什么是黑客
  17. buildroot 使用
  18. rosbag 详细使用
  19. [附源码]SSM计算机毕业设计水库水面漂浮物WEB系统JAVA
  20. EN 1096-4涂层玻璃建筑材料英国UKCA认证—EN 1096-4

热门文章

  1. hmacsha256是对称算法吗_HMAC-SHA256签名计算算法
  2. 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...
  3. qgraphicsview 添加矩形框并拖动改变大小_如何用手机巧影软件为视频添加字幕
  4. android元素离边框间距,RecyclerView Item 的分割线 距边框距离问题总结
  5. java 定时器delay_技术贴-java 定时器
  6. python导入模块教程_Python教程——导入自定义模块
  7. 计算机类警察限制身高吗,招警考试对身高有要求吗?男生170cm以下能否报考公安警察?...
  8. python使用近似公式计算e_python如何算自然底数e(方法二)
  9. /opt/hbase/conf 中不能启动hbase_浅谈Hbase在用户画像上的应用
  10. 51单片机驱动ds12887c语言,51单片机+DS12887+12864大数字时钟程序+电路