我正在尝试使用层次聚类(具体来说是
我已经尝试了
以下是我的示例,使用
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
束树。