Spark机器学习库

机器学习模型是使用算法和数据的组合来建立的。使用强大的算法是至关重要的,但同样重要(有些人可能认为更重要)的是使用大量高质量数据进行训练。

一般来说,数据越多,机器学习的表现就更好。2001年,微软研究人员Michele Banko和Eric Brill在他们颇具影响力的论文《自然语言消歧扩展到非常非常大的语料库》中首次提出了这个概念。谷歌的研究主任Peter Norvig在他的论文“数据的不合理有效性”中进一步推广了这个概念。

Apache Spark的所有优势也由此扩展到了机器学习领域。Apache Spark最重要的是它的分布式特性,它使用户能够以足够的速度在非常大的数据集上训练和应用机器学习算法。Apache Spark的另一个优势是它的统一性:它提供了一个执行大多数任务的平台。用户可以在同一个系统中,并使用相同的API,进行数据的收集、准备和分析,并对模型进行训练、评估和使用。

Apache Spark提供了最流行的机器学习算法的分布式实现,并且不断添加新的算法。Apache Spark的主要机器学习API叫做MLlib,它是基于加州伯克利的MLbase项目。MLlib是基于RDD的,从Spark 0.8开始被包含进来,并被开源社区不断扩展和开发。

从Apache Spark 1.2开始,引入了一个名为Spark ML的新机器学习API,它是基于DataFrame的,目标是提供一个通用的API,用同样的方式来训练和调优不同的算法。它还提供了pipelines(管道),用来实现机器学习工作流。新的Spark ML API是与“旧”Spark MLlib API并行开发的。Spark MLlib目前处于维护状态。

Apache Spark ML机器学习库支持如下这些机器学习算法:

1. 协同过滤

Alternating Least Squares (ALS)算法:协同过滤是推荐系统中常用的一种方法。这些技术旨在填补用户项关联矩阵中缺失的条目。spark.mllib目前支持基于模型的协同过滤。在这个实现中,user和item由一组可以用来预测缺失条目的潜在因素来描述。sprk.mllib使用ALS算法学习这些潜在因素。

2. 聚类

在Spark中实现了以下聚类技术:

  • (1) k-means:这是一种常用的聚类算法,它将数据点聚类到预定义的集群数量中。集群的数量由用户决定。spark.mllib实现包括k-means++方法的并行变体。
  • (2) Gaussian mixture:高斯混合模型(Gaussian Mixture Model,GMM)表示从k个高斯子分布中选取点的复合分布。每个分布都有它自己的概率。spark.mllib实现使用期望最大化算法在给定一组样本的情况下归纳出最大似然模型。
  • (3) Power Iteration Clustering (PIC):这是一个可伸缩的算法,用于根据给定的一对相似的边属性来聚类图的顶点。它使用权力迭代(power iteration)计算图的(归一化的关联矩阵)伪特征向量。spark.mllib包括一个使用GraphX的PIC实现。它采用元组的RDD并输出带有集群分配的模型。相似性必须是非负的。PIC假设相似度量是对称的(在统计学中,相似性度量或相似性函数是一个实值函数,它量化了两个对象之间的相似性。这些度量是距离度量的逆;余弦相似度就是一个例子)。无论顺序如何,一对(srcId、dstId)在输入数据中最多出现一次。
  • (4) Latent Dirichlet Allocation (LDA):这是主题模型的一种形式,它从文本文档集合中推断主题。LDA是一种聚类算法的形式。以下几点说明了主题:a) 主题是集群中心,文档对应于数据集中主题和文档都存在于特征空间中的示例,其中特征向量是单词计数的向量(也称为单词包);b) LDA不是使用传统的距离方法估计集群,而是使用基于文本文档生成模型的函数。
  • (5) Bisecting k-means:这是一种层次聚类。层序聚类分析(Hierarchical Cluster Analysis,HCA)是一种聚类分析方法,它构建了一个自顶向下的集群层次结构。在这种方法中,所有的观察都从一个集群开始,当一个集群向下移动时递归地执行分割。层次聚类是聚类分析中常用的方法之一,其目的是构建一个聚类的层次。
  • (6) Streaming k-means:当数据到达流中时,我们希望动态地估计集群,并在新数据到达时更新它们。spark.mllib支持streaming k-means聚类,参数控制估计的衰减。该算法采用了微批k-means更新规则的泛化。

3. 分类

在Spark中实现了以下分类技术:

  • (1) Decision Trees:决策树及其集合是分类和回归的方法之一。决策树很受欢迎,因为它们易于解释、处理分类特性并扩展到多类分类设置。它们不需要特征缩放,也能够捕获非线性和特征交互。树集成算法、随机森林和增强算法在分类和回归场景中表现最好。spark.mllib实现了用于二元和多类分类以及回归的决策树。它支持连续和分类特征。该实现按行分区数据,允许使用数百万个实例进行分布式训练。
  • (2) Naive Bayes:朴素贝叶斯分类器是基于应用贝叶斯定理(查看贝叶斯定理),在特征之间具有强(朴素)独立性假设的一类简单概率分类器。Naive Bayes是一种多类分类算法,假设每一对特征之间都是独立的。该算法在一次训练数据的传递中,计算出给定标签的每个特征的条件概率分布,然后应用贝叶斯定理计算出给定观察值的标签的条件概率分布,然后用于预测。spark.mllib支持多项式朴素贝叶斯和伯努利朴素贝叶斯。这些模型通常用于文档分类。
  • (3) Probability Classifier:在机器学习中,Probability Classifier(概率分类器)是这样一种分类器:给定一个输入,它可以预测一组类的概率分布,而不是输出样本应该属于的最有可能的类。概率分类器提供了一些确定性的分类,这些确定性本身或在将分类器组合成整体时非常有用。
  • (4) Logistical Regression:这是一种用来预测二元响应的方法。Logistic回归通过使用逻辑函数估计概率来度量分类因变量和自变量之间的关系。这个函数是一个累积逻辑分布。
  • Random Forest:该算法利用决策树的集合来确定决策边界。随机森林结合了许多决策树。这降低了过拟合结果的风险。Spark ML支持用于二元分类和多类分类以及回归的随机森林。它可以用于连续值或分类值。

4. 降维

降维(Dimensionality reduction)是一个减少机器学习变量数量的过程。它可以用于从原始特征中提取潜在特征,或者在维护整体结构的同时压缩数据。MLlib在RowMatrix类的基础上提供了支持降维。

  • (1) Singular value decomposition (SVD):矩阵M的奇异值分解:M x n(实数或复数)是形式UΣV *的一个因式分解,其中U是一个m x R矩阵。Σ是一个R x R矩形对角矩阵(对角非负实数),V是一个n x r单式矩阵。r等于矩阵M的秩。
  • (2) Principal component analysis (PCA):这是一种统计方法,用于在第一个坐标中找到最大方差的旋转。每一个后续坐标都有最大的可能方差。旋转矩阵的列称为主分量。主成分分析在降维中得到了广泛的应用。MLlib使用RowMatrix支持对存储在面向行格式中的所有瘦矩阵应用PCA。

5. 频繁模式挖掘

在Spark中实现了频繁模式挖掘(Frequent pattern mining)。

  • (1) FP-growth:FP代表频繁模式。算法首先计算数据集中出现的项(属性和值对),并将它们存储在头表中。在第二步中,该算法通过插入实例(由items组成)来构建FP树结构。每个实例中的items项按照它们在数据集中出现的频率降序排序;这确保了可以快速处理树。每个实例中不满足最小覆盖阈值的items项将被丢弃。对于许多实例共享最频繁items项的用例,FP树提供了接近树根的高压缩。
  • (2) Association rules:关联规则学习是在大型数据库中发现变量之间有趣关系的一种机制。它实现了一个并行规则生成算法,用于构造以单个item项作为结果的规则。

6. PrefixSpan

PrefixSpan:这是一个顺序模式挖掘算法。

7. 评价指标

spark.mllib提供了一套用于评估算法的度量标准。

8. PMML模型导出

PMML model export:预测模型标记语言(Predictive Model Markup Language,PMML)是一种基于xml的预测模型交换格式。PMML为分析应用程序描述和交换机器学习算法生成的预测模型提供了一种机制。spark.mllib允许将其机器学习模型导出到PMML及其等价的PMML模型。

9. 优化

随机梯度下降(Stochastic Gradient Descent):这是用来优化梯度下降,以最小化一个目标函数;这个函数是可微函数的和。梯度下降法和随机次梯度下降法(Stochastic Subgradient Descent,SGD)是MLlib中的低级原语,在此基础上发展了各种机器学习算法。

10. L-BFGS

Limited-Memory BFGS (L-BFGS):这是一种优化算法,它使用有限的计算机内存。用于机器学习中的参数估计。它属于近似Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法的准牛顿方法族。BFGS方法近似于牛顿方法,牛顿方法是一类寻找函数平稳点的爬山优化技术。对于这类问题,一个必要的最优条件是梯度应该为零。


《Flink原理深入与编程实战》