Spark机器学习库(MLlib)指南

机器学习库(MLlib)指南

MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习可扩展且简单。从较高的层面来说,它提供了以下工具:

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

声明:基于DataFrame的API是主要API

基于MLlib RDD的API现在处于维护模式。

从Spark 2.0开始,软件包中基于RDD的API spark.mllib已进入维护模式。Spark的主要机器学习API现在是包中基于DataFrame的API spark.ml

有什么影响?

  • MLlib仍将支持基于RDD的API spark.mllib以及错误修复。
  • MLlib不会为基于RDD的API添加新功能。
  • 在Spark 2.x版本中,MLlib将为基于DataFrames的API添加功能,以实现与基于RDD的API的功能奇偶校验。
  • 在达到功能奇偶校验(粗略估计Spark 2.3)之后,将弃用基于RDD的API。
  • 预计将在Spark 3.0中删除基于RDD的API。

为什么MLlib会切换到基于DataFrame的API?

  • DataFrames提供比RDD更加用户友好的API。DataFrame的许多好处包括Spark数据源,SQL / DataFrame查询,Tungsten和Catalyst优化以及跨语言的统一API。
  • 基于DataFrame的MLlib API跨ML算法和多种语言提供统一的API。
  • DataFrames有助于实用的ML管道,特别是功能转换。有关详细信息,请参阅管道指南

什么是“Spark ML”?

  • “Spark ML”不是官方名称,但偶尔用于指代基于MLlib DataFrame的API。这主要是由于org.apache.spark.ml基于DataFrame的API使用的Scala包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。

MLlib已被弃用吗?

  • MLlib包括基于RDD的API和基于DataFrame的API。基于RDD的API现在处于维护模式。但是这两种API都没有被弃用,整个也没有MLlib。

依赖

MLlib使用线性代数包Breeze,它依赖于 netlib-java进行优化的数值处理。如果本机库1在运行时不可用,您将看到一条警告消息,而将使用纯JVM实现。

由于运行时专有二进制文件的许可问题,我们netlib-java默认情况下不包含本机代理。要配置netlib-java/ Breeze以使用系统优化的二进制文件,请包含 com.github.fommil.netlib:all:1.1.2(或构建Spark with -Pnetlib-lgpl)作为项目的依赖项,并阅读netlib-java文档以获取平台的其他安装说明。

最受欢迎的原生BLAS,如英特尔MKLOpenBLAS,可以在一次操作中使用多个线程,这可能与Spark的执行模型冲突。

配置这些BLAS实现以使用单个线程进行操作实际上可以提高性能(请参阅SPARK-21305)。通常最好将此值与每个Spark任务配置使用的核心数相匹配,默认情况下为1,通常保留为1。

扫描二维码关注公众号,回复: 2961699 查看本文章

请参考以下资源,了解如何配置这些BLAS实现使用的线程数:Intel MKLOpenBLAS

要在Python中使用MLlib,您将需要NumPy 1.4或更新版本。

2.3中的亮点

下面的列表重点介绍了2.3 Spark发布中添加到MLlib的一些新功能和增强功能:

迁移指南

MLlib正在积极开发中。在以后的版本中标记ExperimentalDeveloperApi可能会更改API ,下面的迁移指南将解释版本之间的所有更改。

从2.2到2.3

打破变化

  • 逻辑回归模型摘要的类和特征层次结构被更改为更清晰,更好地适应了多类摘要的添加。对于将a转换LogisticRegressionTrainingSummary为a的 用户代码,这是一个重大更改BinaryLogisticRegressionTrainingSummary。用户应该使用该model.binarySummary 方法。有关更多详细信息,请参阅SPARK-17139请注意,这是一个ExperimentalAPI)。这不会影响Python summary方法,对于多项和二进制情况,它仍然可以正常工作。

行为的贬低和变化

弃用

  • OneHotEncoder已被弃用,将被删除3.0。它已被新的取代OneHotEncoderEstimator (见SPARK-13​​030)。注意OneHotEncoderEstimator将改名为OneHotEncoder3.0(但 OneHotEncoderEstimator将保留作为一个别名)。

行为的变化

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

以前的Spark版本

较早的迁移指南已存档在此页面上


  1. 要了解有关系统优化本机的优点和背景的更多信息,您可能希望观看Sam Halliday的ScalaX 在Scala中的高性能线性代数的演讲。 

猜你喜欢

转载自blog.csdn.net/u010675669/article/details/81745064