Spark机器学习库(MLlib)指南
spark-1.6.1
機器學習庫(MLlib)指南
MLlib是Spark的機器學習(ML)庫。旨在簡化機器學習的工程實踐工作,并方便擴展到更大規模。MLlib由一些通用的學習算法和工具組成,包括分類、回歸、聚類、協同過濾、降維等,同時還包括底層的優化原語和高層的管道API。
MLllib目前分為兩個代碼包:
- spark.mllib?包含基于RDD的原始算法API。
- spark.ml?則提供了基于DataFrames?高層次的API,可以用來構建機器學習管道。
我們推薦您使用spark.ml,因為基于DataFrames的API更加的通用而且靈活。不過我們也會繼續支持spark.mllib包。用戶可以放心使用,spark.mllib還會持續地增加新的功能。不過開發者需要注意,如果新的算法能夠適用于機器學習管道的概念,就應該將其放到spark.ml包中,如:特征提取器和轉換器。
下面的列表列出了兩個包的主要功能。
spark.mllib: 數據類型,算法以及工具
- Data types(數據類型)
- Basic statistics(基礎統計)
- summary statistics(摘要統計)
- correlations(相關性)
- stratified sampling(分層抽樣)
- hypothesis testing(假設檢驗)
- streaming significance testing
- random data generation(隨機數據生成)
- Classification and regression(分類和回歸)
- linear models (SVMs, logistic regression, linear regression)(線性模型(SVM,邏輯回歸,線性回歸))
- naive Bayes(樸素貝葉斯)
- decision trees(決策樹)
- ensembles of trees (Random Forests and Gradient-Boosted Trees)(樹套裝(隨機森林和梯度提升決策樹))
- isotonic regression(保序回歸)
- Collaborative filtering(協同過濾)
- alternating least squares (ALS)(交替最小二乘(ALS))
- Clustering(聚類)
- k-means(K-均值)
- Gaussian mixture(高斯混合)
- power iteration clustering (PIC)(冪迭代聚類(PIC))
- latent Dirichlet allocation (LDA)(隱含狄利克雷分配)
- bisecting k-means(平分K-均值)
- streaming k-means(流式K-均值)
- Dimensionality reduction(降維)
- singular value decomposition (SVD)(奇異值分解(SVD))
- principal component analysis (PCA)(主成分分析(PCA))
- Feature extraction and transformation(特征抽取和轉換)
- Frequent pattern mining(頻繁模式挖掘)
- FP-growth(FP-增長)
- association rules(關聯規則)
- PrefixSpan(PrefixSpan)
- Evaluation metrics(評價指標)
- PMML model export(PMML模型導出)
- Optimization (developer)(優化(開發者))
- stochastic gradient descent(隨機梯度下降)
- limited-memory BFGS (L-BFGS)(有限的記憶BFGS(L-BFGS))
spark.ml: 機器學習管道高級API
- Overview: estimators, transformers and pipelines(概覽:評估器,轉換器和管道)
- Extracting, transforming and selecting features(抽取,轉換和選取特征)
- Classification and regression(分類和回歸)
- Clustering(聚類)
- Advanced topics(高級主題)
雖然還有些降維技術在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-7770:?spark.mllib.tree.GradientBoostedTrees:?validationTol?的語義在1.6中有變。原先其代表誤差變化絕對值的一個閾值,而現在它類似于GradientDescent中的convergenceTol:對于較大的誤差,使用相對誤差(相對于上一次);而對于較小的誤差(<0.01),使用絕對誤差。
- SPARK-11069:?spark.ml.feature.RegexTokenizer:以前,在分詞之前不會講字符串轉小寫?,F在的實現是,默認會將字符串轉小寫,不過有選項可以設為不轉。這中實現和Tokenizertransformer的行為相匹配。
Spark老版本
以前版本的遷移指南歸檔在這里:on this page
總結
以上是生活随笔為你收集整理的Spark机器学习库(MLlib)指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现 二叉搜索树算法(BST)
- 下一篇: Storm入门之第一章