聚类问题

时间:2010-10-08 14:40:16

标签: python algorithm cluster-analysis classification nearest-neighbor

我的任务是找到N个簇,其中包含特定数据集的最多点,因为簇的大小是一定的。目前,我试图通过将我的数据插入到kd树中,迭代数据并找到它的最近邻居,然后在他们制作的集群没有超过限制时合并这些点来尝试这样做。我不确定这种方法会给我一个全局解决方案,所以我正在寻找方法来调整它。如果你能告诉我这会遇到什么类型的问题,那也很棒。

3 个答案:

答案 0 :(得分:7)

查看scipy.clustering作为开始。关键词搜索可以提供有关在那里使用的不同算法的大量信息。聚类是一个很大的领域,有大量的研究和实际应用,并且已经发现许多简单的方法可以很好地工作,所以你可能不想从自己开始。

这就是说,聚类算法通常很容易编程,如果你想编写自己的编程算法,那么k-means和凝聚聚类是一些很容易做到的最爱。

最后,我不确定你对确切N个群集的想法是否是一致的,但它取决于你的“大小”和“群集”的确切含义(是单点a集群?)。

<强>更新

根据下面的OP评论,我认为标准聚类方法不会给出这个问题的最佳解决方案,因为没有连续的度量标准可以优化点之间的“距离”。虽然在某些情况下它们可能会提供一个好的解决方案或近似值。对于聚类方法,我会尝试使用k-means,因为这种方法的前提是有一个固定的N.

但不是聚类,这似乎更像是covering problem,你有N个固定大小的矩形,你试图用它们覆盖所有的点),但是我对这些不太了解,所以我会留给别人。

答案 1 :(得分:0)

如果您的群集数量是固定的,并且您只想最大化这些群集中的点数,那么我认为贪婪的解决方案会很好:

  • 找到可包含最大点数的矩形
  • 删除这些要点,
  • 找到下一个矩形
  • ...

那么如何找到包含最大点数的最大区域A的矩形(实际上每个矩形都有这个区域)?

对于欧几里德距离来说,矩形并不常见,在尝试解决这个问题之前,如果你真的需要矩形或只是群集大小的限制王,你能精确吗?圆/椭圆会起作用吗?

编辑: 贪婪是行不通的(见下面的评论),它确实需要是矩形......

答案 2 :(得分:0)

link text实际上,我认为这有两个关键的假设非常简单。

1)假设“一定大小”我们可以说“任何簇必须完全包含在半径为r的圆内”。

2)所有积分都是群集中心的候选“种子”点。

首先计算所有点中小于r的所有距离。现在仅使用小于r的可行边来解决集合覆盖问题。如果任何一个点的最近邻居大于r距离,它就形成了自己的集群。

相关问题