kmean如何计算来自不同分区的数据?

时间:2015-09-02 17:16:29

标签: apache-spark k-means rdd

当我们使用spark来做Kmeans时,我们应该将数据分成几个分区。然后决定k个中心,并通过计算到中心的距离来制作k个组。然后重复上述步骤,直到找到稳定的组。 现在,我想知道Kmeans MLib如何从不同的分区中获取k个中心,以及它如何计算所有数据点与分区的距离。是否只考虑来自同一分区的数据点并在制作组后重新分区?通过使用示例来解释这将是有帮助的。例如,k = 4,我们有2个分区。或者k = 2,我们有4个分区。 谢谢。

1 个答案:

答案 0 :(得分:0)

值得一读implementation of kmeans in mllib。它很短,也不太难理解。

在任何时候都不需要对kmeans中的数据进行重新分区 - 在整个计算过程中,分区保持不变。

正在进行的简化版本。对于k均值的每次迭代,第一次使用已经选择的质心:

  1. 遍历数据的每个分区,并为每个点找到最接近的质心。对于每个分区,重新计算新的质心。
  2. 将每个分区的结果合并在一起。例如。如果分区1为质心1贡献了4个点,并且有一个新的质心(1.0,2.0),并且分区2对质心1贡献了10个点,并且有一个新的质心(2.0,5.0),那么将它们合并在一起给出:(4 x 1.0 + 10 x 2.0, 4 x 2.0 + 10 x 5.0) / 14 = (1.71, 4.14)。这些是此迭代的更新质心,将反馈到步骤1中。