1. 程式人生 > >《Spark 官方文件》機器學習庫(MLlib)指南

《Spark 官方文件》機器學習庫(MLlib)指南

我們推薦您使用spark.ml,因為基於DataFrames的API更加的通用而且靈活。不過我們也會繼續支援spark.mllib包。使用者可以放心使用,spark.mllib還會持續地增加新的功能。不過開發者需要注意,如果新的演算法能夠適用於機器學習管道的概念,就應該將其放到spark.ml包中,如:特徵提取器和轉換器。

下面的列表列出了兩個包的主要功能。

spark.mllib: 資料型別,演算法以及工具

spark.ml: 機器學習管道高階API

雖然還有些降維技術在spark.ml中尚不可用,不過使用者可以將spark.mllib中的的相關實現和spark.ml中的演算法無縫地結合起來。

依賴項

MLlib使用的線性代數程式碼包是Breeze,而Breeze又依賴於 netlib-java 優化的數值處理。如果在執行時環境中這些原生庫不可用,你將會收到一條警告,而後spark會使用純JVM實現來替代之。

由於許可限制的原因,spark在預設情況下不會包含netlib-java的原生代理庫。如果需要配置netlib-java/Breeze使用其系統優化庫,你需要新增依賴項:com.github.fommil.netlib:all:1.1.2(或者在編譯時加上引數:-Pnetlib-lgpl),然後再看一看 netlib-java 相應的安裝文件。

要使用MLlib的Python介面,你需要安裝

NumPy 1.4以上的版本。

遷移指南

MLlib目前還在積極的開發當中。所以標記為 Experimental / DeveloperApi 的介面可能在未來發生變化,下面的遷移指南說明了版本升級後的變化。

從1.5升級到1.6

從1.5到1.6,spark.mllib 和 spark.ml 包中並沒有重大的API變化,不過有一些行為不再支援或者發生變化。

已經廢棄:

  • SPARK-11358: spark.mllib.clustering.KMeans 的runs引數已經廢棄
  • SPARK-10592: spark.ml.classification.LogisticRegressionModel和spark.ml.regresion.LinearRegressionModel 中,weights欄位改名為coefficients。這一變動有助於消除歧義,可以和輸入給演算法的例項(行)權重(weights)區分開來。

行為有變:

  • SPARK-7770spark.mllib.tree.GradientBoostedTreesvalidationTol 的語義在1.6中有變。原先其代表誤差變化絕對值的一個閾值,而現在它類似於GradientDescent中的convergenceTol:對於較大的誤差,使用相對誤差(相對於上一次);而對於較小的誤差(<0.01),使用絕對誤差。
  • SPARK-11069: spark.ml.feature.RegexTokenizer:以前,在分詞之前不會講字串轉小寫。現在的實現是,預設會將字串轉小寫,不過有選項可以設為不轉。這中實現和Tokenizertransformer的行為相匹配。

Spark老版本

以前版本的遷移指南歸檔在這裡:on this page