kmean如何计算来自不同分区的数据?
How does kmean calculate data from different partitions?
我们在用spark做Kmeans的时候,应该把数据分成几个partition。然后确定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。
我们在用spark做Kmeans的时候,应该把数据分成几个partition。然后确定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。