基于mapreduce和hadoop的迭代kmeans

时间:2014-06-14 11:04:19

标签: python hadoop mrjob

我为Hadoop编写了一个简单的k-means聚类代码(两个独立的程序 - mapper和reducer)。代码正在我本地方框上的2d点的小数据集上工作。它是用Python编写的,我打算使用Streaming API。

每次运行mapper和reducer后,都会生成新的中心。这些中心是下一次迭代的输入。

基于这些建议,我使用了适合多步骤的mrjob,job python,

def steps(self):    
 return [self.mr(mapper=self.anything,

                            combiner=self.anything,
                            reducer=self.anything)]

这只是一次迭代,请告诉我在生成新中心后反馈到mapper的任何方法。我的意思是,正如你在最后一步看到的那样(“减速器”),将生成新的中心,现在是时候再次将它反馈到映射器(第一步)以计算新中心的新距离等等,直到满意的收敛。

(请不要告诉我关于Mahout,spark或任何其他实现的信息,我知道它们。)

1 个答案:

答案 0 :(得分:1)

在运行K-Means以停止执行时,我们通常会定义迭代次数或阈值距离。在这里我们可能想要编写一个链图减少迭代次数。将集群质心的输出写入临时文件并将其提供给下一个映射器。它的次数是否等于您的阈值。