机器学习库 (MLlib) 指南
MLlib 是 Spark 的机器学习 (ML) 库。其目标是使实用的机器学习可扩展且易于使用。从高层次上讲,它提供如下工具:
- ML 算法:常见的学习算法,如分类、回归、聚类和协同过滤
- 特征化:特征提取、转换、降维和选择
- 管道(Pipelines):用于构建、评估和调整 ML 管道(Pipelines)的工具
- 持久化:保存和加载算法、模型和管道(Pipelines)
- 实用程序:线性代数、统计、数据处理等。
公告:基于 DataFrame 的 API 是主要 API
MLlib 基于 RDD 的 API 现在处于维护模式。
从 Spark 2.0 开始,RDD 中基于 spark.mllib
包的 API 已进入维护模式。 Spark 的主要机器学习 API 现在是 DataFrame 中基于 spark.ml
包的 API。
这意味着什么?
- MLlib 仍然会支持
spark.mllib
中基于 RDD 的 API,并进行错误修复。 - MLlib 不会向基于 RDD 的 API 添加新功能。
- 在 Spark 2.x 版本中,MLlib 将向基于 DataFrames 的 API 添加功能,以达到与基于 RDD 的 API 的功能对等。
为什么 MLlib 要切换到基于 DataFrame 的 API?
- 与 RDD 相比,DataFrames 提供了更友好的 API。 DataFrames 的许多优点包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化以及跨语言的统一 API。
- MLlib 基于 DataFrame 的 API 提供了跨 ML 算法和多种语言的统一 API。
- DataFrames 有助于实际的 ML 管道(Pipelines),特别是特征转换。有关详细信息,请参阅 管道(Pipelines)指南。
什么是 “Spark ML”?
- “Spark ML” 不是正式名称,但有时用于指代 MLlib 基于 DataFrame 的 API。这主要是由于基于 DataFrame 的 API 使用的
org.apache.spark.ml
Scala 包名称,以及我们最初用于强调管道(pipeline)概念的“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)。 - 添加了用于跟踪 ML 管道(pipeline)状态的 Spark 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)。
迁移指南
迁移指南现在已在此页面上存档 on this page。
-
要了解有关系统优化本机库的优势和背景的更多信息,您可能希望观看 Sam Halliday 关于 Scala 中高性能线性代数的 ScalaX 演讲。 ↩