apache-spark - kmean如何计算不同分区的数据?

标签 apache-spark k-means rdd

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

最佳答案

值得一读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。

关于apache-spark - kmean如何计算不同分区的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359320/

相关文章:

python - Spark read.csv 错误地解析时间戳

python openCV : kmeans example not working

python - 当混合有分类数据和数值数据时,如何在 k 均值中找到 k?

python - 如何在 pyspark 的 RDD 上访问元组中的单个元素?

java - 如何将RDD的数据提取到Java ArrayList中?

apache-spark - 如何获得 PySpark 中两个 RDD 之间的区别?

apache-spark - Spark magic 输出提交器设置无法识别

python-2.7 - 创建 Spark 数据框

scheduling - 哪些因素决定了独立模式下执行程序的数量?

php - K 均值聚类 : What's wrong? (PHP)