如何在Hadoop上实现K-Means算法?
一、K-Means算法原理
二、Hadoop实现K-Means的做法
1、伪代码
(1)主要参数
输入: 参数0--存储样本数据的文本文件inputfile;
参数1--存储样本数据的SequenceFile文件inputPath;
参数2--存储质心数据的SequenceFile文件centerPath;
参数3--存储聚类结果文件(SequenceFile文件)所处的路径clusterPath;
参数4--类的数量k;
输出:K个类的划分结果
(2)计算流程
Begin:
读取inputPath,可采用蓄水池采样法从中选取前k个点作为初始质心,将质心数据写入centerPath;
While 聚类终止条件不满足:
在Mapper阶段,读取inputPath,对于所有数据,遍历所有的质心,并选择最近的质心,将该质心的编号作为键传递给Reducer;
在Reducer阶段,将Mapper阶段传递过来的值根据键归并输出,结果写入clusterPath;
读取clusterPath,重新计算质心,对比reduce求出的平均值与原来或者上一次的质心,若不相同,这将清空原中心的数据文件将结果写入centerPath;若相同,则删掉reduce的输出目录,运行一个没有reduce的任务将中心ID与值对应输出。
EndWhile
End
注意:需预先确定判断判断聚类效果好坏的指标,即确定聚类停止的条件。
ps:空闲时间自己动手尝试用hadoop实际实现K-Means。
参考资料:
https://blog.csdn.net/LJBlog2014/article/details/41553955