Spark 機器學習庫【MLlib】編程指南

一.機器學習庫

MLlib是Spark的機器學習庫【ML】。其目標是使實用的機器學習算法變得可擴展且容易使用。在較高級別,它提供了以下工具:

  • 機器學習算法:常見的機器學習算法,例如分類,迴歸,聚類和協同過濾。
  • 特徵化:特徵提取,變換,降維和選擇。
  • 管道:用於構建,評估和調整ML管道的工具。
  • 持久性:保存和加載算法、模型和管道。
  • 實用程序:線性代數,統計信息,數據處理等。

二.基於DataFrame的API

基於MLlib RDD的API現在處於維護模式。

從Spark 2.0開始,軟件包中基於RDD的API spark.mllib 已進入維護模式。現在,用於Spark的主要機器學習API是軟件包中基於DataFrame的API spark.ml

這意味着什麼?

  • 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查詢、Tungsten和Catalyst優化以及跨語言的統一API。
  • 用於MLlib的基於DataFrame的API爲ML算法和多種語言提供了統一的API。
  • DataFrame促進了實用的ML管道,特別是功能轉換。

MLlib是否已棄用?

否。MLlib同時包含基於RDD的API和基於DataFrame的API。基於RDD的API現在處於維護模式。但是既不棄用API,也不棄用MLlib。

三.依存關係

MLlib使用線性代數軟件包Breeze,該軟件包依賴 netlib-java進行優化的數值處理。如果本地庫在運行時不可用,將看到一條警告消息,轉而使用純JVM實現。

由於運行時專有二進制文件存在許可問題,因此netlib-java默認情況下,不包含的本機代理。要配置netlib-java/Breeze使用系統優化的二進制文件,請包含 com.github.fommil.netlib:all:1.1.2(或使用構建Spark -Pnetlib-lgpl)作爲項目的依賴項,並閱讀netlib-java文檔以獲取平臺的其他安裝說明。

最受歡迎的本機BLAS(例如Intel MKL,OpenBLAS)可以在單個操作中使用多個線程,這可能與Spark的執行模型衝突。

將這些BLAS實現配置爲使用單個線程進行操作實際上可以提高性能。通常,最好將此配置與每個Spark任務配置爲使用相同的內核數,默認爲1,通常保留爲1。

請注意,如果系統中未正確配置nativeBLAS,則將使用java實現(f2jBLAS)作爲後備選項。

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

四.Spark3.0新特性

Spark3.0版本中添加到MLlib的一些新功能和增強功能:

  • 多列支持已添加到Binarizer、StringIndexer、StopWordsRemover和PySpark QuantileDiscretizer。
  • 添加了基於樹的特徵轉換。
  • 添加了兩個新的評估器MultilabelClassificationEvaluator和RankingEvaluator。
  • 在DecisionTreeClassifier/Regressor、RandomForestClassifier/Regressor、GBTClassifier/Regressor、 MulticlassClassificationEvaluator、RegressionEvaluator、BinaryClassificationEvaluator、BisectingKMeans、KMeans和GaussianMixture添加樣本權重支持。
  • PowerIterationClustering添加了R API 。
  • 添加了Spark ML偵聽器,用於跟蹤ML管道狀態。
  • 適合的驗證集已添加到Python的Gradient Boosted Trees中。
  • RobustScaler添加了變壓器。
  • Factorization Machines添加了分類器和迴歸器。
  • 添加了高斯樸素貝葉斯分類器和互補樸素貝葉斯分類器。
  • Scala和Python之間的ML函數奇偶校驗。
  • predictRaw在所有分類模型中公開。predictProbability在LinearSVCModel 以外的所有分類模型中公開。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章