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

Algorithm 在平面上寻找非常接近的点-需要近似聚类算法,algorithm,k-means,approximation,Algorithm,K Means,Approximation,我在一个平面(城市)上有很多点(纬度和经度),我想找到两个集群。簇1是紧密排列的点,簇2是其他所有点 我知道这个问题的定义不准确。唯一定义的是我需要2个集群。在N个点中,有多少点最终位于群集1或群集2中未定义 主要目的是确定彼此非常接近的点,并将它们与其他点(分布更均匀)分开 我能想到的最好的算法是: 1. For each point, Calculate the sum of the square distances to all other points. 2. Run the k-mea

我在一个平面(城市)上有很多点(纬度和经度),我想找到两个集群。簇1是紧密排列的点,簇2是其他所有点

我知道这个问题的定义不准确。唯一定义的是我需要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
距离的平方(甚至更高阶)应该有助于提高维度。然而,该算法将偏向于城市中心附近的点。要在城市边缘找到集群是很困难的


有没有关于如何避免这个问题的建议?还有任何其他改进算法的建议

我建议如下:

关键概念

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

半形式描述

  • 对距离小于给定值的每个点的相邻点的计数
    nc(P)
  • 将所有点
    P_i
    nc(P_i)
    大于阈值的
    thres_计数
    聚为一组
  • 对于簇1中的每个
    P#i
    ,将其近邻,即具有
    d(Q,P#i)Q
    添加到同一簇1
  • 将cluster#2设置为cluster#1的补码
  • 算法角度

  • 构建一个无向图
    G=(V,E)
    ,点是顶点集
    V
    ,每对点之间的边彼此之间的距离小于
    d_截止点
  • 从图中删除所有边
    e=(v,w)
    ,其中
    deg(v)
    deg(w)
  • G
    的孤立顶点形成簇2,补码为簇1
  • 关于如何选择
    d\u截止的启发式方法


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

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

    也许这一个可以帮助您:群集1是否需要连接空间?在sens of streets(不含第2组点)中,或类似的点对齐(不含第2组点)?@Fordprifect哇,我希望它比答案中提供的描述更简单。因为我不是数学家,我需要一些时间来理解所说的内容。@MrK-我不确定我是否理解,这些只是点,这些点之间没有边的概念。但是,如果你愿意,你可以认为整个图是完全连接的。谢谢你的答案。该算法肯定会消除我的算法偏向中心点的问题。该算法看起来是一个很好的近似值。只是麻烦在于选择d_截止值和thres_计数。具体地说,选择d_截止点将是困难的。太低,我们可能无法在群集中获得足够的点数。太高了,我们可能会在第三步(你的半正式描述)中加入太多的要点@arahant:我在答案中添加了一个部分来解决这个问题。