2015-10-27 59 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的對象)
  • 選擇最佳

哪裏必須定義什麼是「最佳」解決方案。

相關問題