1 MLlib概述
1.1 MLlib 介紹
◆ 是基于Spark core的機器學習庫,具有Spark的優點
◆ 底層計算經過優化,比正常編碼效率往往要高
◆ 實作了多種機器學習算法,可以進行模型訓練及預測
1.2 Spark MLlib實作的算法
◆ 邏輯回歸 樸素
貝葉斯線性回歸 SVM 決策樹 LDA 矩陣分解
1.3 Spark MLlib官方介紹
1.3.1 搜尋官方文檔
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CNiJmM2cjZhNmZ4M2MxkTOkFmN0EWYhNmM2IDZ4MTOh9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
1.3.2 閱讀文檔 - 機器學習庫(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仍将支援
基于RDD的API以及錯誤修複spark.mllib中
- MLlib不會為基于RDD的API添加新功能
- 在Spark 2.x版本中,MLlib将為基于DataFrames的API添加功能,以實作與基于RDD的API的功能奇偶校驗。
- 在達到功能奇偶校驗(粗略估計Spark 2.3)之後,将棄用基于RDD的API。
- 預計基于RDD的API将在Spark 3.0中删除。
為什麼MLlib會切換到基于DataFrame的API?
- DataFrames提供比RDD更加使用者友好的API。 DataFrame的許多好處包括Spark資料源,SQL / DataFrame查詢,Tungsten和Catalyst優化以及跨語言的統一API。
- 基于DataFrame的MLlib 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,它依賴于netlib-java進行優化的數值處理。如果本機庫1在運作時不可用,您将看到一條警告消息,而将使用純JVM實作。
由于運作時專有二進制檔案的許可問題,我們預設不包括netlib-java的本機代理。要配置netlib-java / Breeze以使用系統優化的二進制檔案,請包含com.github.fommil.netlib:all:1.1.2(或使用-Pnetlib-lgpl建構Spark)作為項目的依賴項并閱讀netlib-java文檔為您的平台提供其他安裝說明。
最受歡迎的原生BLAS,如英特爾MKL,OpenBLAS,可以在一次操作中使用多個線程,這可能與Spark的執行模型沖突。
配置這些BLAS實作以使用單個線程進行操作實際上可以提高性能(請參閱SPARK-21305)。通常最好将此與每個Spark任務配置使用的核心數相比對,預設情況下為1,通常保留為1。
請參考以下資源,了解如何配置這些BLAS實作使用的線程數:Intel MKL和OpenBLAS。
要在Python中使用MLlib,您将需要NumPy 1.4或更高版本。
2.3中的亮點
下面的清單重點介紹了Spark 2.3版本中添加到MLlib的一些新功能和增強功能:
- 添加了内置支援将圖像讀入DataFrame(SPARK-21866)。
- 添加了OneHotEncoderEstimator,應該使用它來代替現有的OneHotEncoder轉換器。 新的估算器支援轉換多個列。
- QuantileDiscretizer和Bucketizer(SPARK-22397和SPARK-20542)也增加了多列支援
- 添加了一個新的FeatureHasher變換器(SPARK-13969)。
- 在使用TrainValidationSplit或CrossValidator(SPARK-19357)執行交叉驗證時,添加了對并行評估多個模型的支援。
- 改進了對Python中自定義管道元件的支援(請參閱SPARK-21633和SPARK-21542)。
- DataFrame函數用于矢量列的描述性摘要統計(SPARK-19634)。
- Huber損失的穩健線性回歸(SPARK-3181)。
打破變化
邏輯回歸模型摘要的類和特征層次結構被更改為更清晰,更好地适應了多類摘要的添加。對于将LogisticRegressionTrainingSummary強制轉換為BinaryLogisticRegressionTrainingSummary的使用者代碼,這是一個重大變化。使用者應該使用model.binarySummary方法。有關更多詳細資訊,請參閱SPARK-17139(請注意,這是一個實驗API)。這不會影響Python摘要方法,它對于多項和二進制情況仍然可以正常工作。
廢棄和行為變化
棄用
OneHotEncoder已被棄用,将在3.0中删除。它已被新的OneHotEncoderEstimator所取代(參見SPARK-13030)。請注意,OneHotEncoderEstimator将在3.0中重命名為OneHotEncoder(但OneHotEncoderEstimator将保留為别名)。
行為的變化
- SPARK-21027:OneVsRest中使用的預設并行度現在設定為1(即串行)。在2.2及更早版本中,并行度級别設定為Scala中的預設線程池大小。
- SPARK-22156:當numIterations設定為大于1時,Word2Vec的學習速率更新不正确。這将導緻2.3和早期版本之間的訓練結果不同。
- SPARK-21681:修複了多項Logistic回歸中的邊緣案例錯誤,當某些特征的方差為零時,導緻系數不正确。
- SPARK-16957:樹算法現在使用中點來分割值。這可能會改變模型訓練的結果。
- SPARK-14657:修複了RFormula在沒有截距的情況下生成的特征與R中的輸出不一緻的問題。這可能會改變此場景中模型訓練的結果。