機器學習函式庫 (MLlib) 指南
MLlib 是 Spark 的機器學習 (ML) 函式庫。其目標是讓實務機器學習可擴充且容易。在高階層級,它提供以下工具:
- ML 演算法:常見的學習演算法,例如分類、回歸、分群和協同過濾
- 特徵化:特徵萃取、轉換、降維和選擇
- 管道:用於建置、評估和調整 ML 管道的工具
- 持久性:儲存和載入演算法、模型和管道
- 公用程式:線性代數、統計、資料處理等
公告:基於資料框的 API 是主要 API
MLlib 基於 RDD 的 API 現在處於維護模式。
自 Spark 2.0 起,spark.mllib
套件中基於 RDD的 API 已進入維護模式。Spark 的主要機器學習 API 現在是 spark.ml
套件中基於資料框的 API。
這有什麼影響?
- MLlib 仍會在
spark.mllib
中支援基於 RDD 的 API,並修正錯誤。 - MLlib 不會為基於 RDD 的 API 新增新功能。
- 在 Spark 2.x 版本中,MLlib 會為基於資料框的 API 新增功能,以達到與基於 RDD 的 API 相同的功能。
為什麼 MLlib 要轉換為基於資料框的 API?
- 資料框提供比 RDD 更友善的 API。資料框的許多好處包括 Spark 資料來源、SQL/資料框查詢、Tungsten 和 Catalyst 最佳化,以及跨語言的統一 API。
- MLlib 的基於資料框的 API 提供跨 ML 演算法和多種語言的統一 API。
- 資料框促進實務 ML 管道,特別是特徵轉換。請參閱管道指南以取得詳細資料。
什麼是「Spark ML」?
- 「Spark ML」不是正式名稱,但偶爾用來指 MLlib 基於資料框的 API。這主要是因為基於資料框的 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,您需要 1.4 或更新版本的 NumPy。
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 在 ScalaX 上關於 Scala 中的高效能線性代數 的演講。 ↩