机器学习库 (MLlib) 指南
MLlib 是 Spark 的机器学习 (ML) 库。其目标是使实用的机器学习具有可伸缩性并易于使用。在较高层面,它提供了以下工具:
- ML 算法:常见的学习算法,如分类、回归、聚类和协同过滤
- 特征化:特征提取、转换、降维和选择
- 管道:用于构建、评估和调优 ML 管道的工具
- 持久化:保存和加载算法、模型和管道
- 实用工具:线性代数、统计、数据处理等
公告:基于 DataFrame 的 API 是主要 API
MLlib 基于 RDD 的 API 现已进入维护模式。
自 Spark 2.0 起,RDD-based API 在 spark.mllib
包中已进入维护模式。Spark 的主要机器学习 API 现在是 DataFrame-based API,位于 spark.ml
包中。
这意味着什么?
- MLlib 将继续支持
spark.mllib
中基于 RDD 的 API,并提供错误修复。 - MLlib 不会向基于 RDD 的 API 添加新功能。
- 在 Spark 2.x 版本中,MLlib 将向基于 DataFrames 的 API 添加功能,以实现与基于 RDD 的 API 的功能对等。
为什么 MLlib 要转向基于 DataFrame 的 API?
- DataFrames 提供了比 RDD 更用户友好的 API。DataFrames 的诸多优势包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化,以及跨语言的统一 API。
- MLlib 的基于 DataFrame 的 API 在 ML 算法和多种语言之间提供统一的 API。
- DataFrames 有助于实现实用的 ML 管道,特别是特征转换。详见管道指南。
什么是“Spark ML”?
- “Spark ML”并非官方名称,但有时用于指代 MLlib 基于 DataFrame 的 API。这主要是由于基于 DataFrame 的 API 使用了
org.apache.spark.ml
Scala 包名,以及我们最初为强调管道概念而使用的“Spark ML Pipelines”术语。
MLlib 被弃用了吗?
- 不。MLlib 包含基于 RDD 的 API 和基于 DataFrame 的 API。基于 RDD 的 API 现已进入维护模式。但这两个 API 都未被弃用,MLlib 作为一个整体也未被弃用。
依赖项
MLlib 使用线性代数包 Breeze 和 dev.ludovic.netlib 进行优化数值处理1。如果这些包作为系统库或在运行时库路径中可用,它们可能会调用 Intel MKL 或 OpenBLAS 等原生加速库。
然而,原生加速库无法随 Spark 一起分发。有关如何启用加速线性代数处理,请参阅MLlib 线性代数加速指南。如果未启用加速原生库,您将看到如下警告消息,并将转而使用纯 JVM 实现
WARNING: Failed to load implementation from:dev.ludovic.netlib.blas.JNIBLAS
要在 Python 中使用 MLlib,您需要 NumPy 1.4 或更高版本。
3.0 中的亮点
以下列表重点介绍了 Spark 3.0
版本中添加到 MLlib 的一些新功能和增强功能
Binarizer
(SPARK-23578)、StringIndexer
(SPARK-11215)、StopWordsRemover
(SPARK-29808) 和 PySparkQuantileDiscretizer
(SPARK-22796) 中添加了多列支持。- 添加了基于树的特征转换 (SPARK-13677)。
- 添加了两个新的评估器:
MultilabelClassificationEvaluator
(SPARK-16692) 和RankingEvaluator
(SPARK-28045)。 - 在
DecisionTreeClassifier/Regressor
(SPARK-19591)、RandomForestClassifier/Regressor
(SPARK-9478)、GBTClassifier/Regressor
(SPARK-9612)、MulticlassClassificationEvaluator
(SPARK-24101)、RegressionEvaluator
(SPARK-24102)、BinaryClassificationEvaluator
(SPARK-24103)、BisectingKMeans
(SPARK-30351)、KMeans
(SPARK-29967) 和GaussianMixture
(SPARK-30102) 中添加了样本权重支持。 - 添加了 PowerIterationClustering 的 R API (SPARK-19827)。
- 添加了 Spark ML 监听器以跟踪 ML 管道状态 (SPARK-23674)。
- Python 中的梯度提升树添加了带验证集的拟合功能 (SPARK-24333)。
- 添加了
RobustScaler
转换器 (SPARK-28399)。 - 添加了
Factorization Machines
分类器和回归器 (SPARK-29224)。 - 添加了高斯朴素贝叶斯分类器 (SPARK-16872) 和补集朴素贝叶斯分类器 (SPARK-29942)。
- Scala 和 Python 之间的 ML 函数对等 (SPARK-28958)。
predictRaw
在所有分类模型中公开。predictProbability
在除LinearSVCModel
之外的所有分类模型中公开 (SPARK-30358)。
迁移指南
迁移指南现已在此页面存档。
-
要了解有关系统优化原生库的优点和背景的更多信息,您可能希望观看 Sam Halliday 关于《Scala 中的高性能线性代数》的 ScalaX 演讲。 ↩