【发布时间】:2013-11-13 02:29:11
【问题描述】:
我正在尝试使用分层聚类(特别是 hclust)将数据集聚类为 10 个组,成员人数不超过 100 人,并且没有任何组的总人口超过 40%。我目前知道的唯一方法是重复使用cut() 并不断选择较低水平的 h,直到我对削减的分散感到满意为止。然而,这迫使我返回并重新聚集我修剪的组以将它们聚合为 100 个成员组,这可能非常耗时。
我已经尝试过dynamicTreeCut 包,但不知道如何输入这些(相对简单的)限制。我使用deepSplit 作为指定分组数量的方式,但是按照文档,这将最大数量限制为 4。对于下面的练习,我要做的就是将集群分成 5 个组3 个人或更多人(我可以自己处理最大尺寸限制,但如果您也想尝试解决这个问题,那会很有帮助!)。
这是我的示例,使用 Orange 数据集。
library(dynamicTreeCut)
library(reshape2)
##creating 14 individuals from Orange's original 5
Orange1<-Orange
Orange1$Tree<-as.numeric(as.character(Orange1$Tree))
Orange2<-Orange1
Orange3<-Orange1
Orange2$Tree=Orange2$Tree+6
Orange3$Tree=Orange3$Tree+11
combOr<-rbind(Orange1, Orange2[1:28,], Orange3)
####casting the data to make a correlation matrix, and then running
#### a hierarchical cluster
castOrange<-dcast(combOr, age~Tree, mean, fill=0)
castOrange[,16]<-c(1,34,5,35,34,35,21)
castOrange[,17]<-c(1,34,5,35,34,35,21)
orangeCorr<-cor(castOrange[, -1])
orangeClust<-hclust(dist(orangeCorr))
###running the dynamic tree cut
dynamicCut<-cutreeDynamic(orangeClust, minClusterSize=3, method="tree", deepSplit=4)
dynamicCut
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
如您所见,它只指定了两个集群。对于我的练习,我想避免使用明确的高度项来砍树,因为我想要 k 的树木数量。
【问题讨论】:
-
这是一篇旧帖子,但请注意,0 表示“未集群”而不是“#0 集群”!在此示例中,只有 1 个集群。
标签: r distance hierarchical-clustering