2

我为 Hadoop 编写了一个简单的 k-means 聚类代码(两个独立的程序 - 映射器和化简器)。该代码正在处理我本地盒子上的一个二维点的小数据集。它是用 Python 编写的,我打算使用 Streaming API。

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

根据建议,我使用了适合多步骤的mrjob,job python,

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

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

这只是一次迭代,请告诉我在生成新中心后如何反馈给映射器。我的意思是,正如您在最后一步(“reducer”)中看到的那样,将生成新的中心,现在是时候再次将其反馈给映射器(第一步)以计算新中心的新距离,依此类推,直到满意的收敛。

(请不要告诉我 Mahout、spark 或任何其他实现,我知道它们。)

4

1 回答 1

1

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

于 2014-06-16T11:52:58.933 回答