gpt4 book ai didi

r - 在R中,有一种算法可以创建大小近似相等的簇

转载 作者:行者123 更新时间:2023-12-03 15:04:05 25 4
gpt4 key购买 nike

关于创建分层聚类或k均值聚类似乎有很多信息。但是我想知道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的信息,请参见 this comprehensive answer)。如果它们的大小一致,那么您将拥有大约相等大小的簇;如果不是,则强制使用统一的群集大小肯定会降低群集解决方案的适用性。
如果您的数据中没有自然漂亮的群集,例如
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和D2之间的区别,它是并非任意)。

关于r - 在R中,有一种算法可以创建大小近似相等的簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com