机器学习库 (MLlib) 指南
MLlib 是 Spark 的机器学习 (ML) 库。它的目标是使实用的机器学习变得可扩展且易于使用。从高层次上讲,它提供了以下工具:
- ML 算法:常见的学习算法,如分类、回归、聚类和协同过滤
- 特征化:特征提取、转换、降维和选择
- 管道:用于构建、评估和调整 ML 管道的工具
- 持久化:保存和加载算法、模型和管道
- 实用程序:线性代数、统计、数据处理等
公告:基于 DataFrame 的 API 是主要 API
MLlib 基于 RDD 的 API 现在处于维护模式。
从 Spark 2.0 开始,spark.mllib
包中的基于 RDD 的 API 已进入维护模式。Spark 的主要机器学习 API 现在是 spark.ml
包中的基于 DataFrame 的 API。
有什么影响?
- MLlib 仍将支持
spark.mllib
中基于 RDD 的 API,并进行错误修复。 - MLlib 不会向基于 RDD 的 API 添加新功能。
- 在 Spark 2.x 版本中,MLlib 将向基于 DataFrame 的 API 添加功能,以达到与基于 RDD 的 API 的功能一致性。
为什么 MLlib 要切换到基于 DataFrame 的 API?
- DataFrame 提供比 RDD 更友好的 API。DataFrame 的许多优势包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化以及跨语言的统一 API。
- MLlib 的基于 DataFrame 的 API 为 ML 算法和多种语言提供了统一的 API。
- DataFrame 有助于实用的 ML 管道,尤其是特征转换。有关详细信息,请参阅 管道指南。
什么是“Spark ML”?
- “Spark ML”不是官方名称,但有时用于指代 MLlib 基于 DataFrame 的 API。这主要是因为基于 DataFrame 的 API 使用的
org.apache.spark.ml
Scala 包名称,以及我们最初用来强调管道概念的“Spark ML 管道”一词。
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 管道状态的 Spark ML 监听器 (SPARK-23674)。
- 在 Python 中的梯度提升树中添加了带有验证集的拟合 (SPARK-24333)。
RobustScaler
转换器已添加 (SPARK-28399)。Factorization Machines
分类器和回归器已添加 (SPARK-29224)。- 添加了高斯朴素贝叶斯分类器 (SPARK-16872) 和互补朴素贝叶斯分类器 (SPARK-29942)。
- Scala 和 Python 之间的 ML 功能一致性 (SPARK-28958)。
- 在所有分类模型中,
predictRaw
成为公共方法。除了LinearSVCModel
(SPARK-30358) 之外,所有分类模型的predictProbability
成为公共方法。
迁移指南
迁移指南现已存档 在此页面上。
-
要详细了解系统优化本机的优势和背景,您可能希望观看 Sam Halliday 的 ScalaX 演讲,主题是 Scala 中的高性能线性代数。 ↩