在平面上找到非常接近的点 - 需要近似聚类算法

时间:2013-07-10 11:41:50

标签: algorithm k-means approximation

我在飞机(城市)上有很多点(纬度和经度),我想找到两个星团。群集1是紧密混合的点,群集2是其他所有东西。

我知道问题的定义并不准确。唯一定义的是我需要两个集群。在N个点中,未定义群集1或群集2中的最终数量。

主要目的是识别彼此非常接近的点并将它们与其余点分开(更均匀地展开)

我能想到的最好的是以下算法:

1. For each point, Calculate the sum of the square distances to all other points.
2. Run the k-means with k=2 on these square distances

距离的平方(或甚至更高阶)应该有助于提高维数。然而,该算法将偏向于靠近城市中心的点。在城市的边缘很难找到集群。

有关如何避免此问题的任何建议?以及改进此算法的任何其他建议

2 个答案:

答案 0 :(得分:1)

我建议的内容如下:

关键概念

计算距离小于给定值的相邻点数。

半正式描述

  1. 为每个点nc(P)计算距离小于给定值d_cutoff的相邻点的数量P
  2. P_inc(P_i)的所有点thres_count群集到群集#1中。
  3. 为群集#1中的每个P_i添加其近邻,即将Qd(Q, P_i) < d_cutoff添加到同一群集#1。
  4. 将群集#2设置为群集#1的补充。
  5. 算法角度

    1. 构建一个无向图G=(V, E),其中您的点是顶点集V,并且每对点之间的边距彼此之间的距离小于d_cutoff
    2. e=(v,w)deg(v) < thres_count的图表中删除所有边deg(w) < thres_count
    3. G的孤立顶点形成簇#2,补码是簇#1。
    4. 关于如何选择d_cutoff

      的启发式方法

      构建点集的最小生成树(mst)。边长的频率分布应暗示适当的截止值。短的成对距离将首先纳入mst。因此,对于具有自然聚类的点集,在有序的边长度序列中应该存在至少一个明显的间隙。因此,将mst边长的集合划分为少量的相邻间隔,以自然的方式排序这些间隔。计算每个间隔中落入多少实际距离值。考虑区间的序数与距离值的计数之间的关系。连续参数的函数值之间的大增量建议将较低区间中距离的上限设为d_cutoff

答案 1 :(得分:1)

由于集群1中的点彼此接近,我认为基于密度的聚类算法可能会有所帮助。您可以尝试OPTICS algorithm,它类似于DBSCAN,但知道密度不同,用户可以指定群集的数量。