我在飞机(城市)上有很多点(纬度和经度),我想找到两个星团。群集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
距离的平方(或甚至更高阶)应该有助于提高维数。然而,该算法将偏向于靠近城市中心的点。在城市的边缘很难找到集群。
有关如何避免此问题的任何建议?以及改进此算法的任何其他建议
答案 0 :(得分:1)
我建议的内容如下:
关键概念
计算距离小于给定值的相邻点数。
半正式描述
nc(P)
计算距离小于给定值d_cutoff
的相邻点的数量P
。P_i
点nc(P_i)
的所有点thres_count
群集到群集#1中。P_i
添加其近邻,即将Q
点d(Q, P_i) < d_cutoff
添加到同一群集#1。算法角度
G=(V, E)
,其中您的点是顶点集V
,并且每对点之间的边距彼此之间的距离小于d_cutoff
。e=(v,w)
和deg(v) < thres_count
的图表中删除所有边deg(w) < thres_count
。G
的孤立顶点形成簇#2,补码是簇#1。 关于如何选择d_cutoff
构建点集的最小生成树(mst)。边长的频率分布应暗示适当的截止值。短的成对距离将首先纳入mst。因此,对于具有自然聚类的点集,在有序的边长度序列中应该存在至少一个明显的间隙。因此,将mst边长的集合划分为少量的相邻间隔,以自然的方式排序这些间隔。计算每个间隔中落入多少实际距离值。考虑区间的序数与距离值的计数之间的关系。连续参数的函数值之间的大增量建议将较低区间中距离的上限设为d_cutoff
。
答案 1 :(得分:1)
由于集群1中的点彼此接近,我认为基于密度的聚类算法可能会有所帮助。您可以尝试OPTICS algorithm,它类似于DBSCAN,但知道密度不同,用户可以指定群集的数量。