当我们使用spark做Kmeans时,我们应该将数据分成几个分区。然后确定k个中心,通过计算到中心的距离来组成k组。然后重复上述步骤,直到找到稳定的群体。 现在,我想知道 Kmeans MLib 如何从不同的分区中选取 k 个中心,以及如何计算所有数据点与分区的距离。它是否只考虑来自同一分区的数据点并在分组后重新分区?通过示例来解释这一点将很有帮助。例如,k = 4,我们有 2 个分区。或者 k = 2,我们有 4 个分区。 谢谢。
最佳答案
值得一读implementation of kmeans in mllib 。它很短并且不太难理解。
在任何时候都不需要对 kmeans 中的数据进行重新分区 - 分区在整个计算过程中保持不变。
正在发生的事情的简化版本。对于 k 均值的每次迭代,第一个迭代具有已选择的质心:
- 迭代数据的每个分区,并为每个点找到最近的质心。对于每个分区,重新计算新的质心。
- 将每个分区的结果重新合并在一起。例如。如果分区 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。
关于apache-spark - kmean如何计算不同分区的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359320/