2015-10-27 56 views
1

我有大约50个位置,我想在空间上聚簇它们,固定大小的簇。说下面几个地点是。如何在R中给定经纬度给定的固定簇大小?

lat<-c(17.48693,17.49222,17.51965,17.49359,17.49284,17.47077) 
long<-c(78.38945,78.39643,78.37835,78.40079,78.40686,78.35874) 

说我要群集他们的簇大小〜3

能否请你帮忙吗?

+0

您可以从K-means或层次聚类等标准算法开始,然后添加一些后处理来调整聚类大小。 有关于[这里]的一些讨论(http://stats.stackexchange.com/questions/74495/use-hierarchical-clustering-in-r-to-cluster-items-into-fixed-size-clusters)和[这里](http://stackoverflow.com/questions/5452576/k-means-algorithm-variation-with-equal-cluster-size)。 – Duf59

+0

如果空间坐标是唯一的功能,您不能手动定义群集吗? 50个位置/ 3个位置/群集= 17个群集或群组。易于执行,比编码要快得多,但却是最简单的程序。 – knb

回答

0

你可以尝试使用kmeans,这是baseR的一部分。下面是一个简单的代码,将针对3个中心:

result <- kmeans(df, 3) 
> result 
K-means clustering with 3 clusters of sizes 4, 1, 1 

Cluster means: 
     lat  lng 
1 17.49140 78.39838 
2 17.47077 78.35874 
3 17.51965 78.37835 

Clustering vector: 
[1] 1 1 3 1 1 2 

enter image description here

请记住,也不能保证您的数据可能与k均值和3个中心吻合。这种kmeans运行导致4个观测结果在一个簇内,其他2个簇只有1个观测结果。如果你对这个运行不满意,你可以玩一会儿,直到你能够收敛到适合的东西。

这是一个link to a tutorial这可能会有所帮助。

+0

谢谢先生,寻求帮助。我的问题是我想要固定大小的群集。说每个群集大约应该包含相同数量的点。 – areddy

+0

我不知道'kmeans'是否允许这样做。你为什么有这个要求? –

+0

通常我使用包'代码'(leaderCluster)来聚集位置,但它给了不同大小的聚类。与上面相同 – areddy

0

对于这样微小的数据,

  • 枚举所有受理的选择(例如,所有有3级+ 3的对象)
  • 选择最佳

哪里必须定义什么是“最佳”解决方案。

相关问题