簡體   English   中英

在R中,是否存在用於創建大致相等大小的簇的算法

[英]In R, is there an algorithm to create approximately equal sized clusters

似乎有很多關於創建分層或k-means集群的信息。 但我想知道在R中是否存在可以創建大小相等的K簇的解決方案。 有一些關於在其他語言中這樣做的東西,但我無法找到任何在互聯網上搜索建議如何在R中實現結果的東西。

一個例子是

set.seed(123)
df <- matrix(rnorm(100*5), nrow=100)
km <- kmeans(df, 10)
print(sapply(1:10, function(n) sum(km$cluster==n)))

結果

[1] 14 12  4 13 16  6  8  7 13  7

我理想的是希望看到

[1] 10 10 10 10 10 10 10 10 10 10 

我認為你不應該,首先。 為什么? 當您的數據中存在天然結構良好的聚類時,例如,

plot(matrix(c(sample(1:10,10),sample(30:40, 7), sample(80:90,9)), ncol=2, byrow = F))

然后這些將聚集在一起(假設k等於簇的自然n;參見關於如何選擇好k的綜合答案 )。 如果它們的大小一致,那么你將擁有大小相等的簇; 如果它們不是,那么強制統一的簇大小肯定會降低聚類解決方案的適應性。 如果您的數據中沒有自然漂亮的聚類,例如,

plot(matrix(c(sample(1:100, 100), ncol=2)))

然后強制一個簇大小將是多余的(如果數據是完全隨機的,簇大小將是〜相等 - 但無論如何聚類沒有多少點),或者,如果那里有一些很好的簇,例如,

plot(matrix(c(sample(1:15,15),sample(20:100, 11)), ncol=2, byrow = T))

那么強制尺寸幾乎肯定會打破它們。

然而,與單鏈接相比,JasonAizkalns評論中提到的Ward方法將為您提供更多“圓形”形狀的簇,因此這可能是一種方法(參見help(hclust)以獲得D和D之間的差異help(hclust) D2,這不是任意的)。

它不是很清楚你在問什么,但在R中生成隨機數據非常容易。如果你的數據集有兩個維度,你可以這樣做 -

cluster1 = data.frame(x = rnorm(100, mean=5,sd=1), y  = rnorm(100, mean=5,sd=1))
cluster2 = data.frame(x = rnorm(100, mean=15,sd=1), y  = rnorm(100, mean=15,sd=1))

這會在x和y上為每個群集中的100個數據點生成正態分布的隨機數據。

然后查看 -

plot(cluster1, xlim = c(0,25), ylim = c(0,25))
lines(cluster2, type = "p")!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM