【问题标题】:Clustering into Three Nearest Neighbors聚类成三个最近的邻居
【发布时间】:2018-08-29 02:26:31
【问题描述】:

我有 73 个 GPS 坐标,然后我想分成 30 组,每组 2-3 个。完成此任务的最佳算法是什么?

【问题讨论】:

  • 你能举一些例子吗?到目前为止,您尝试过什么?
  • 这取决于您如何定义“最佳”。您要优化的功能是什么?
  • 我使用 Google Distance Matrix API 创建了一个 73x73 的矩阵。我只是不确定现在是如何对位置进行分组的。
  • 位置之间的行驶距离。我创建了一个 73x73 的距离矩阵。

标签: python cluster-analysis partitioning data-science


【解决方案1】:

首先,我认为来自 scikit-learn comparing different clustering algorithms 的这篇文章会有所帮助。光谱聚类、DBSCAN、高斯混合模型等都有适合的情况,所有这些的概述确实超出了 StackOverflow 的范围。

综上所述,没有“最佳”聚类算法。这在很大程度上取决于您希望集群具有哪些属性。例如

  • 算法是否需要选择集群大小,还是您手动指定 2(或 3)?
  • 集群是否沿高斯分布?
  • 您是否关心使用 lat/long 作为欧几里得距离而不是计算测地线时的失真?
  • 集群是否需要平衡?
  • 如果少量点严重错位,算法应该有多“模糊”才能表现良好?
  • 等等……

这是大多数涉及数据的事情的共同主题。聚类本身并不是目标(如果是,您只需将数据分成 2-3 组并完成)。您有一些其他问题正在尝试通过集群解决。一旦你缩小了其他问题的范围,根据所需的性能特征选择聚类算法就很容易了。

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

【讨论】:

    【解决方案2】:

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

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

    聚类在这里对您没有多大帮助,因为聚类算法通常将空间结构放在首位,并且不允许对聚类大小进行限制。因此,如果您运行例如 k-means,它生成更大或更小的集群。 如果你有四个距离为零的点怎么办?任何聚类都会将这四个放在同一个聚类中!

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 2016-09-19
      • 2018-09-06
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多