我为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或任何其他实现的信息,我知道它们。)
答案 0 :(得分:1)
在运行K-Means以停止执行时,我们通常会定义迭代次数或阈值距离。在这里我们可能想要编写一个链图减少迭代次数。将集群质心的输出写入临时文件并将其提供给下一个映射器。它的次数是否等于您的阈值。