聚集成三个最近的邻居

时间:2018-08-29 02:26:31

标签: python cluster-analysis partitioning data-science

我有73个GPS坐标,我想分成2-3个30组。实现此目的的最佳算法是什么?

2 个答案:

答案 0 :(得分:0)

首先,我认为scikit-learn comparing different clustering algorithms的这篇帖子会有所帮助。频谱聚类,DBSCAN,高斯混合模型等在所有情况下都适用,并且对它们的概述实际上不在StackOverflow的范围内。

总而言之,没有用于群集的“最佳”算法。这在很大程度上取决于您希望集群具有的属性。例如

  • 算法是否需要选择簇大小,还是您手动指定2(或3)?
  • 集群是否沿着高斯分布?
  • 您是否关心使用纬度/经度而不是计算测地线时的失真?
  • 集群是否需要平衡?
  • 如果少量点严重放错位置,算法在表现良好方面应该有多“模糊”?
  • 等...

这是大多数涉及数据的常见主题。集群本身并不是一个目标(如果确实如此,则可以将数据分成2-3个组并完成)。您正在尝试通过集群解决其他问题。其他问题。一旦缩小了其他问题的范围,就可以根据所需的性能特征轻松选择聚类算法。

即使该选择超出了您当前的经验,明确的规范也将使您的问题对将来的用户更有价值,并使我们能够提供实际上可以帮助您的答案。

答案 1 :(得分:0)

要找到确切的最佳解决方案可能很困难,因为它与背包问题相似。幸运的是,您只有很少的积分,因此您可以负担得起昂贵的搜索费用。

为什么不为此使用通用约束求解器?指定您的约束(每个点都是一个分区的成员,每个分区是2-3个对象)和质量(最小距离)。然后让优化器执行它的魔力吗?

在这里聚类对您无济于事,因为聚类算法通常将空间结构放在首位,并且不允许对聚类大小进行约束。因此,如果您运行例如k均值,它将产生更大或更小的簇。 如果您有四个零距离的点怎么办?任何群集都会将这四个群集放在同一个群集中!