数据挖掘与机器学习的联系与区别、挖掘工具Mahout、Spark MLlib讲解,Mahout和MLlib支持的机器学习算法列举

一. 数据挖掘与机器学习

  • 数据挖掘是识别出海量数据中有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程,简单来说就是从海量数据中找出有用的知识。机器学习起初的研究动机是为了让计算机系统具有人的学习能力,以便实现人工智能。机器学习利用经验来改善计算机系统自身的性能,由于“经验”在计算机系统中是以数据的形式存在的,因此,机器学习主要就是实现智能的数据分析。数据挖掘利用了机器学习提供的技术来分析数据以发掘其中蕴含的有用信息。针对大数据进行数据挖掘,不仅需要关注机器学习方法和算法本身,即研究新的或改进的学习模型和学习方法,以不断提升分析预测结果的准确性,而且还需关注如何结合分布式和并行化的大数据处理技术,以便在可接受的时间内完成计算。业界已经研究并构建了一批兼具机器学习和大规模分布并行计算处理能力的一体化系统,普通用户不用编写复杂的机器学习算法,也不用深入掌握基于大数据的分布式存储与并行计算模型,只需了解算法的调用接口即可应用机器学习并实现大数据挖掘。

二. 数据挖掘工具Mahout讲解

  • Apache Mahout是一个由Java语言实现的开源的可扩展的机器学习算法库。2008 年Mahout还只是Apache Lucene 开源搜索引擎的子项目,其主要实现Lucene框架在文本搜索与文本挖掘中用到的聚类和分类算法,后来Mahout 逐渐脱离出来成为独立的子项目并吸纳了开源的协同过滤项目Taste。 2010 年4月,Mahout 成为Apache顶级项目。Mahout不仅高效地实现了聚类、分类和协同过滤等机器学习算法,关键是其所能处理的数据规模远大于R、Python、 MATLAB等基于单机的传统数据分析平台,因为Mahout的算法既可在单机上运行,也可在Hadoop平台上运行。Mahout通过将机器学习算法构建于MapReduce 并行计算模型之上,将算法的输入、输出和中间结果构建于HDFS分布式文件系统之上,使得Mahou具有高吞吐、高并发、高可靠性的特点,这就保证了其适合于大规模数据的机器学习。
  • Mahout官方在2014年4月宣布,其不再接收新的基于MapReduce 的算法实现,而改为支持基于Spark和H2O平台的算法,同时由于Apache Spark平台自身也提供了机器学习算法库MLlib, 所以,很多人认为Mahout 前途渺茫。其实相对于其他机器学习算法库,自2010年Mahout成为Apache顶级项目以来,经过多年发展,其更为成熟和稳定。Mahout未来的目标是机器学习平台,将提供类似R的DSL以支持线性代数运算(如分布式向量计算)、大数据统计等基本功能,也可对用户算法进行自动优化并自动生成为并行程序。目前,Apache Mahout 不仅可运行在Hadoop MapReduce计算模型之上,而且还可运行在Spark和H2O平台上,不久还可以运行在Flink平台上。到Mahout 0.10.1为止,其在各平台上主要支持的机器学习算法如下表所示。

三. Mahout 在各平台所支持的机器学习算法

算法 单机 MapReduce Spark H20
聚类算法
Canopy deprecated deprecated
K -means × ×
模糊K-means × ×
流K-means × ×
谱聚类 ×
分类算法
逻辑回归 ×
朴素贝叶斯 × ×
随机森林 ×
隐马尔可夫模型 ×
多层感知器 ×
协同过滤算法
基于用户的协同过滤 × ×
基于物品的协同过滤 × × ×
基于ALS的矩阵分解 × ×
基于ALS的矩阵分解(隐式反馈 × ×
加权矩阵分解 ×
降维算法
奇异值分解 × × × ×
Lanczos deprecated deprecated
随机SVD × × × ×
PCA × × × ×
QR分解 × × × ×

四. 数据挖掘工具MLlib讲解

  • Apache Mahout 主要运作于MapReduce计算模型之上,MapReduce 为大数据挖拥提供了有力的支持,但数据挖掘类业务大多具有复杂的处理逻辑,其挖掘算法往往需要多个MapReduce作业协作完成,而多个作业之间存在的冗余磁盘读/写开销和多次资源申请过程,会使基于MapReduce的算法实现存在严重的性能问题。Spark 得益于其在迭代计算和内存计算上的优势,可自动调度复杂的计算任务,避免中间结果的磁盘读/写和资源申请过程,大幅降低了运行时间和计算成本,非常适用于数据挖掘算法。Spark 中的机器学习库MLlib是专为在集群上并行运行而设计的,只包含了能够在集群上运行良好的并行算法,并不考虑一些虽经典但不能并行执行的机器学习算法,所以,MLlib中的每一个算法都适用于大规模数据集。在Spark 1.6.0 中,现在新版本为3.0.0。MLib实现的机器学习算法如下表所示。相对于Mahout基于MapReduce计算模型所需的序列化和磁盘IO开销,MLlib基于Spark计算模型可以在内存中更快地实现多次迭代。
  • 相对于Mahout 基于Java语言来实现算法,MLlib 基于Scala语言可以更少的代码来实现同样的算法。MLib除了支持Java、Scala、 Python 及R语言之外,训练模型时所需调整的参数更少,接口调用要比Mahout简洁。此外,Mahout 是独立于Hadoop之外的项目,而MLlib是内置在Spark中的,其可与Spark Streming、 Spark SQL及GraphX很好地协作。

五. MLlib 所支持的机器学习算法

离散型 连续型
有监督的机器学习 分类算法:逻辑回归、支持向量机SVM、朴素贝叶斯、决策树、随机森林、梯度提升决策树GBT 回归算法:线性回归、决策树、随机森林、梯度提升决策树GBT、保序回归
无监督的机器学习 聚类:K-means、高斯混合、快速迭代聚类PIC、隐含狄利克雷分布LDA、二分K-means、流K-means 协同过滤、降维:交替最小二乘ALS、奇异值分解SVD、主成分分析PCA

猜你喜欢

转载自blog.csdn.net/qq_38132105/article/details/107102132