MLlib是Spark的机器学习(ML)库。它的目标是使机器学习的实际应用变得容易和可扩展。在较高层次上,它提供了以下工具:

  • ML算法:常见的学习算法,如分类、回归、聚类和协作过滤
  • 特征化:特征提取、转换、降维和筛选
  • 工作流(Pipelines):构建、评估和调整ML工作流的工具
  • 持久性:保存和加载算法、模型和工作流
  • 实用程序:线性代数、统计学、数据处理等。

注:基于DataFrame的API是主API

基于MLlib RDDAPI当前处于维护模式。

从Spark 2.0开始,Spark.mllib包中基于RDD (http://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds) 的API已经进入维护模式。Spark的主要机器学习API现在是Spark.ml包中基于DataFrame  (http://spark.apache.org/docs/latest/sql-programming-guide.html) 的API。

这意味着什么?

  • MLlib仍然支持spark.MLlib中基于RDD的API,并修复了错误。
  • MLlib不会向基于RDD的API添加新特性。
  • 在Spark 2.x版本中,MLlib将向基于DataFrame 的API添加特性,与基于RDD的API的特性达到对等。
  • 在达到特性对等(初步估计是在Spark 2.3,当前最新的已经是2.4.5)之后,将不推荐使用基于RDD的API。
  • 基于RDD的API将在Spark 3.0中被删除。

为什么MLlib要切换到基于DataFrame API

  • DataFrame 提供了比rdd更友好的API。DataFrame的许多优点包括Spark数据源、SQL/DataFrame查询、Tungsten and Catalyst优化以及跨语言的统一api。
  • 基于DataFrame的MLlib API提供了跨ML算法和跨多种语言的统一API。
  • DataFrame更适合实用的ML工作流,特别是特性转换。详细信息请参见工作流指南(http://spark.apache.org/docs/latest/ml-pipeline.html)。

什么是“Spark ML”

  • “Spark ML”不是一个官方名称,偶尔用于表示MLlib这个基于DataFrame 的API。这主要是因为基于DataFrame的API使用了org.apache.spark.ml 这个Scala包名,另外,最初我们用 “Spark ML Pipelines”这个术语只是为了强调工作流(Pipelines)的概念。

MLlib被弃用了吗?

  • 没有,MLlib包括基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但无论是API还是MLlib都没有被弃用。

依赖关系

MLlib使用线性代数库Breeze(http://www.scalanlp.org/),它依赖于netlib-java(https://github.com/fommil/netlib-java)来优化数值处理。如果本地库在运行时不可用,您将看到一条警告消息,并且会用纯JVM的实现来替代。

由于运行时专有二进制文件的许可问题,默认情况下我们未使用netlib-java的本地代理。如果需要将netlib-java/Breeze配置为使用系统优化的二进制文件,请将com.github.fommil.netlib:all:1.1.2(或使用-Pnetlib-lgpl来构建Spark)作为工程(project)的依赖项,并引入netlib-java的文档作为平台的附加安装说明。

最流行的本地基本线性代数子程序(Basic Linear Algebra Subprograms,BLAS),如Intel MKL、OpenBLAS,可以在一个操作中使用多个线程,这可能与Spark的执行模型相冲突。

将这些BLAS的实现配置为单线程在计算中使用,将很有可能提高性能(请参阅SPARK-21305(https://issues.apache.org/jira/browse/SPARK-21305))。通常,将其与每个Spark任务配置的核心数相匹配才是最佳的,默认情况下为1,通常保留为1。

想了解如何配置这些BLAS实现使用的线程数,请参阅以下参考资料: Intel MKL and OpenBLAS。

要在Python中使用MLlib,您需要NumPy 1.4或更高版本(http://www.numpy.org/)。

Spark 2.3的亮点

以下列表重点介绍了Spark 2.3中添加到MLlib的一些新优化和功能:

  • 增加了读入图像为DataFrame 的内置支持(SPARK-21866)。
  • 增加了OneHotEncoderEstimator,建议用它代替现有的onehotecoder转换器(transformer)。这个新的估计器支持多列转换。
  • QuantileDiscretizer和Bucketizer(SPARK-22397和SPARK-20542)也增加了多列支持
  • 增加了新的FeatureHasher转换器(SPARK-13969)。
  • 在使用TrainValidationSplit或CrossValidator执行交叉验证时,增加了并行评估多个模型的支持(SPARK-19357)。
  • 改进了对Python中自定义工作流组件的支持(参见SPARK-21633和SPARK-21542)。
  • 增加了向量列描述性摘要统计的DataFrame 函数(SPARK-19634)。
  • 具有Huber损失函数的鲁棒(Robust)线性回归(SPARK-3181)。

迁移指南

MLlib正在积极开发中。标记为Experimental/DeveloperApi的api在未来的版本中可能会发生变化,下面的迁移指南将解释版本之间的所有变化。

从2.2到2.3

重大变化

  • 对logistic回归模型摘要的类和特征层次结构进行了修改,使之更清晰,更好地适应多类摘要的添加。对于用户代码来说,这是一个重大的变化,它将LogisticRegressionTrainingSummary强制转换为BinaryLogisticRegressionTrainingSummary。用户应该改为使用model.binarySummary方法。更多细节见SPARK-17139(注意这是一个实验性的API)。这不会影响Python的summary方法,该方法仍然适用于多类和二分类的情况。

弃用和其他变化

弃用

  • OneHotEncoder已被弃用,将在3.0中删除。它已经被新的OneHotEncoderEstimator所取代(见SPARK-13030)。注:在3.0中,OneHotEncoderEstimator将重命名为OneHotEncoder(但OneHotEncoderEstimator会保留为别名)。

其他变化

  • SPARK-21027: OneVsRest中使用的默认并行度现在设置为1(即串行)。在2.2和更早版本中,并行级别设置为默认的Scala线程池大小。
  • SPARK-22156: 当numIterations设置为大于1时,Word2Vec的学习率更新不正确。这将导致2.3和早期版本的训练结果不同。
  • SPARK-21681:修正了多项式logistic回归中的一个边界bug,当某些特征的方差为零时,该错误会导致系数不正确。
  • SPARK-16957: 树算法现在使用中间点分割值。这可能会改变模型训练的结果。
  • SPARK-14657:修正了RFormula在没有截获的情况下生成的特征与R中的输出不一致的问题。这可能会改变这个场景中模型训练的结果。

以前的Spark版本

以前的迁移指南存档在此页上(http://spark.apache.org/docs/latest/ml-migration-guides.html)。

注:想要进一步了解系统本地优化的好处和背景,您可以观看Sam Halliday的, 关于“Scala中高性能线性代数”的ScalaX演讲(http://fommil.github.io/scalax14/#/)。

机器学习库(MLlib)指南(Spark 2.4.5)相关推荐

  1. 【Spark】实验6 Spark机器学习库MLlib编程实践

    Spark机器学习库MLlib编程实践 一.实验目的 通过实验掌握基本的MLLib编程方法: 掌握用MLLib解决一些常见的数据分析问题,包括数据导入.成分分析和分类和预测等. 二.实验平台 新工科智 ...

  2. Spark 机器学习库【MLlib】编程指南

    一.机器学习库 MLlib是Spark的机器学习库[ML].其目标是使实用的机器学习算法变得可扩展且容易使用.在较高级别,它提供了以下工具: 机器学习算法:常见的机器学习算法,例如分类,回归,聚类和协 ...

  3. Java机器学习库ML之六关于模型迭代训练的思考

    我遇到的场景是:样本集有5000万条,接近5个G,那么这样的样本集一次导入训练,我放着一天一夜都没跑出结果,机器性能还特别好,是64位linux有128G内存. 针对这样的情况,我想到的是两种思路: ...

  4. Spark机器学习库(MLlib)指南

    spark-1.6.1 机器学习库(MLlib)指南 MLlib是Spark的机器学习(ML)库.旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib由一些通用的学习算法和工具组成,包括分 ...

  5. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南

    我们推荐您使用spark.ml,因为基于DataFrames的API更加的通用而且灵活.不过我们也会继续支持spark.mllib包.用户可以放心使用,spark.mllib还会持续地增加新的功能.不 ...

  6. 离线轻量级大数据平台Spark之MLib机器学习库概念学习

    Mlib机器学习库 1.1机器学习概念 机器学习有很多定义,倾向于下面这个定义.机器学习是对能通过经验自动改进的计算机算法的研究.机器学习依赖数据经验并评估和优化算法所运行出的模型.机器学习算法尝试根 ...

  7. MLlib机器学习库

    MLlib代表机器学习库. MLlib 数据准备:特征提取.变换.选择.分类特征的散列和一些自然语言处理方法 机器学习算法:实现了一些流行和高级的回归.分类和聚类算法 使用程序:统计方法,如描述性统计 ...

  8. 【Hadoop Summit Tokyo 2016】Hivemall: Apache Hive/Spark/Pig 的可扩展机器学习库

    本讲义出自 Makoto YUI与NTT Takashi Yamamuro在Hadoop Summit Tokyo 2016上的演讲,主要介绍了Hivemall的相关知识以及Hivemall在Spar ...

  9. 猿辅导 python_关于猿辅导机器学习项目ytk-learn和ytk-mp4j分布式机器学习库

    本文描述了猿辅导开源分布式机器学习库ytk-learn及分布式通信库ytk-mp4j的相关内容,可实现在多应用场景中使用.ytk-learn 是基于Java的高效分布式机器学习库, 简单易用,文档详细 ...

最新文章

  1. GetClientRect()和GetWindowRect()
  2. 数据结构(哈夫曼树+KMP)之 数据加密+解密
  3. 基于opencv在摄像头ubuntu根据视频获取
  4. python 查看变量_剖析python运算符is和==的区别
  5. 结巴分词关键词相似度_jieba+gensim 实现相似度
  6. 带你入门SpringCloud 之 服务网关 Zuul
  7. spring的延迟初始化bean (default-lazy-init 与 lazy-init )
  8. 人力节省 50%,研发效能提升 40%,阿里 Serverless 架构落地实践
  9. View4.5测试参考文档1--测试环境规划
  10. python模块规定的格式,按照这样写,最规范
  11. win10黑客教学(5)--xscan漏洞探测
  12. 台式计算机进入安全模式蓝屏,电脑进安全模式蓝屏怎么办
  13. Python文字识别
  14. 计算机三级路由器配置例题,计算机三级网络技术(7):路由器配置及使用(上)...
  15. 关于京东评价数目,淘宝评价数目延迟加载
  16. OpenWrt TL-WR841N WAN口down问题
  17. log4j按日期和文件大小生成日志文件
  18. 大一学生WEB前端静态网页——唯品会1页 包含hover效果
  19. 微信视频号100w播放收入1000+的变现方式
  20. java实现 库鲁斯卡尔算法 kruskal(算法设计与分析作业)

热门文章

  1. 罗马数字(暴力破解)
  2. 《丑陋的中国人》之读后感
  3. android屏幕适配无效_Android屏幕适配之全面屏适配
  4. 在线直播系统源码,自定义底部 BottomNavigationBar
  5. 非标品如何写标题、选关键词?淘宝非标品关键词怎么进行布局?
  6. 网络基础-路由器工作原理
  7. ContentProvider实现短信备份
  8. JavaScript 逆向调试技巧
  9. 大神的一个仿qq气泡
  10. 炉石传说|炉石战棋|整活脚本