机器学习库(MLlib)指南
机器学习库(MLlib)指南
MLlib是Spark的机器学习(ML)库。旨在简化机器学习的工程实践工作,并方便扩展到更大规模。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。
MLllib目前分为两个代码包:
<a style="text-decoration: underline; color: #00a19e;" href="http://spark.apache.org/docs/latest/mllib-guide.html#data-types-algorithms-and-utilities">spark.mllib</a>
包含基于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以上的版本。
http://ifeve.com