如何在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

posted on 2018-11-25 19:09  知识的容量瓶  阅读(1202)  评论(0编辑  收藏  举报