基于Hadoop的K-means聚类算法的实现
来源:互联网 发布:邮箱的域名是什么 编辑:程序博客网 时间:2024/06/06 05:55
K-means算法的MapReduce并行化实现
1.K-means聚类算法的基本思路
假设把样本集分为K类,算法描述如下:
(1).首先在数据集合中随机选取k个点作为k个星团的质心
(2)然后计算每个点到k个质心的距离,将其归类为距离最近的那个质心所在的类,这样每个点都有了所属的类别
(3)对每个聚类中所有的点的坐标取平均值,将其设为新的质心
(4)重复迭代第二步和第三步,直到质心不变或者变化很小
下图展示了对n个样本点进行K-means聚类的效果,这里k取2。
2.K-means算法的MapReduce并行化实现
用MapReduce处理的数据集应该具备这样的特点:它可以被分解成许多小的数据集,且每一个小的数据集可以完全并行的进行处理。在K-means算法中,每个元素到质心距离的计算都是独立被操作的,元素在运算过程中相互没有联系,因此,可以使用MapReduce模型来实现并行化。基本思路是:每一次迭代启动一个MapReduce过程,具体过程如下图。根据MapReduce计算的需求,将数据按行分片,片间数据无相关性。
Map函数的设计:
Map函数的任务是从HDFS的文件中逐行读取数据,针对每一条记录,计算它到各个质心的距离,并将该记录做类别标记。
Map函数的输入是原始文件和聚类质心,输入数据记录的<key,value>为<行号,记录>;输出中间结果<key,value>为<记录所属类别,记录>。
Map函数具体描述如下:
public void map(Object key, Text value, Context content){
计算记录到每个质心的距离;
比较上述距离;
将此记录归结到距离最近的哪个质心所属的类;
将<记录所属类别,记录>写入中间文件;
}
Reduce函数的设计:
Reduce函数的任务是根据Map函数的输出,更新聚类中心,供下一轮Map函数使用。同时,计算标准测度函数的值,以供主函数判断迭代是否结束。
在执行Reduce函数之前,MapReduce会先对Map函数输出的中间结果进行合并(combine),将中间结果中有相同key值的多组<key,value>对合并成一堆。Reduce函数的输入<key,value>为<记录所属类别,{记录集合}>。输出结果<key,value>为<类别号,均值向量+该类的平方误差和>。
Reduce函数的具体实现如下:
public void reduce (Text key, Iterable<Text> values, Context content){
for(对于key相同的所有记录){
求每个属性的均值;
计算记录到其质心的距离;
对上述距离求和(e);
}
将<记录所属类别,均值向量+每个类的平方误差和e>写入结果文件;
}
在主函数调用上述MapReduce过程,每次迭代申请一个新的job,直到两次得到的平方误差和的差值小于给定的阈值,迭代结束。Map函数最后一次的中间结果就是分类的最后结果。
- 基于Hadoop的K-means聚类算法的实现
- K-Means 算法的 Hadoop 实现
- K-Means算法的Hadoop实现
- K-Means聚类算法的实现
- 基于K-Means的文本聚类算法
- 基于K-means算法的文本聚类
- 基于K-Means的文本聚类算法
- 基于模糊K-Means算法的新闻聚类
- 基于K-Means的文本聚类算法
- 基于 K-Means 算法的文本聚类
- 基于RHadoop的k-means聚类算法
- 基于Python的K-means聚类算法
- 基于PCL库对三维空间点的K-Means聚类算法的实现
- K-means算法的实现
- 基于MapReduce框架的K-means算法实现
- k-means聚类算法hadoop实现源码
- Hadoop k-means 算法实现
- C#实现简单的K-means聚类算法
- 四则运算之加减法
- Hbase LSM树
- 【辅助算法】整体二分
- Windows驱动开发(6) - DRIVER_OBJECT结构体
- 同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
- 基于Hadoop的K-means聚类算法的实现
- tarjan模板(缩点,求有向图强连通分量)
- http://www.ezlippi.com/blog/2014/12/c-open-project.html
- 网址的正则表达式
- MAC系统下命令获取IP地址
- javaweb学习总结(三十)——EL函数库
- KMP 算法实现
- TIKA元数据提取
- java从头到位实现区域三级下拉框(升级版)