首页 理论教育基于Spark的聚类算法实现

基于Spark的聚类算法实现

【摘要】:Spark MLlib中的K-means算法使用Map分布式读取数据集,并存储在内存里。计算时,用Map键值对表示随机挑选出来的k个聚类中心,Spark的驱动器节点负责把数据发送到各个工作节点,以实现具体的计算任务。Spark MLlib不同于传统的机器学习工具,它提供了简单易用的API,特别是Spark能够高效地处理大数据,并且在迭代计算时具有较强的优势。

机器学习利用自我学习算法对人类的学习行为进行模拟或者实现人类的学习行为,是多领域交叉学科的融合,也是人工智能的核心。机器学习模拟人类学习活动,理解现有知识,通过自我学习算法对原有知识结构重新组织,以获取新的知识和新的技能。Mahout是开源的机器学习算法框架库,实现了机器学习领域的推荐算法(协同过滤)、聚类算法和分类算法等经典算法。Mahout是基于MapReduce计算框架编写的机器学习库,使用HDFS技术在云基础架构上实现对大数据的存储要求,但I/O资源消耗过大造成系统整体性能降低,不适合处理迭代算法[163]

聚类算法把具有相同或者相似特征的无标签的数据对象划分为同一簇,同一簇的数据对象在特征上尽可能相近或相似,不同簇的数据对象在特征上尽可能不同或相异,并且每个数据对象要保证只能划分在同一簇。同一簇的中心点向量的个数和位置以及相似性度量的选取为聚类算法的重点内容,通过聚类算法多次迭代执行找到最优的聚类结果。聚类算法基于聚类算法思想有K-means算法、K-medoids算法、CLARANS算法等;基于层次聚类算法有凝聚的层次聚类算法——AGNES(Agglomerative Nesting)算法、分裂的层次聚类算法——DIANA(Divisive Analysis)算法;基于密度方法有高斯混合算法等。在聚类算法执行过程中,分析识别出整体数据对象分布的稠密和稀疏区域,发现存在孤立点的区域[164]

K-means算法是常用的聚类算法,在该算法执行过程中,首先选取要分析的数据空间中的k个数据对象作为中心点,每个数据对象代表一个聚类中心。其次给出一个初始的分组方法,在分组中选取聚类中心点,再反复迭代改变分组,更改新的聚类中心点,每一次改进之后的分组方案都较前一次的分组方案好。通常使用欧式距离的多次迭代,达到最优解。K-means算法通常包括如下几个步骤:(1)选择需要进行聚类分析的数据;(2)分析不同数据对象间的相似度,对分析结果做量化处理,在相似矩阵中存储;(3)采用聚类算法做聚类分析;(4)把分析结果显示出来[165]。(www.chuimin.cn)

MLlib是Spark生态系统在机器学习领域的重要应用,是Spark的机器学习库,提供了很多常用的机器学习算法的分布式实现方法,如聚类、分类、回归等。Spark MLlib中的K-means算法使用Map分布式读取数据集,并存储在内存里。计算时,用Map键值对表示随机挑选出来的k个聚类中心,Spark的驱动器节点负责把数据发送到各个工作节点,以实现具体的计算任务。Spark MLlib扩展性强、运行速度快,充分利用RDD的迭代优势对大规模数据应用机器学习模型,与Spark Streaming、Spark SQL协作开发应用,让机器学习算法在基于大数据的预测、推荐和模式识别等方面应用更广泛。使用Spark MLlib进行机器学习时,先对原始数据进行数据处理,然后直接调用相应的API实现数据分析。Spark MLlib不同于传统的机器学习工具,它提供了简单易用的API,特别是Spark能够高效地处理大数据,并且在迭代计算时具有较强的优势。因此,熟悉Spark MLlib的API后就可以开始数据分析工作了[166]