我得到的另一个问题的提示使我感到困惑。
我参加了一项练习,实际上是一项大型练习的一部分:
根据练习,这应该在很短的时间内完成。
然而,几周之后我很困惑这是否可以完成,因为显然我真正从hclust得到的只是一棵树 - 而不是像我想的那样,有许多集群。
我想我不清楚:
例如,假设我给hclust提供了一个矩阵,该矩阵由15个1x5向量,5次(1 1 1 1 1),5次(2 2 2 2 2)和5次(3 3 3 3 3)组成。这应该给我三个截然不同的大小为5的簇,任何人都可以轻易地手工完成。是否有一个命令可以使用,以便我可以从程序中找到我的hclust-object中有3个这样的集群以及它们包含的内容?答案 0 :(得分:1)
您必须考虑正确的指标来定义与群集的紧密程度。在hclust doc中的示例的基础上,这里有一种方法来计算每个集群的均值,然后测量新数据点和均值集之间的距离。
# Leave out one state
A <-USArrests
B <-A[rownames(A)!="Kentucky",]
KY <- A[rownames(A)=="Kentucky",]
# Put the B data into 10 clusters
hc <- hclust(dist(B), "ave")
memb <- cutree(hc, k = 10)
B$cluster = memb[rownames(B)==names(memb)]
# Compute the averages over the clusters
M <-aggregate( .~cluster, data=B, FUN=mean)
M$cluster=NULL
# Now add the hold out state to the set of averages
M <-rbind(M,KY)
# Compute the distance between the clusters and the hold out state.
# This is a pretty silly way to do this but it works.
D <- as.matrix(dist(as.matrix(M),diag=TRUE,upper=TRUE))["Kentucky",]
names(D) = rownames(M)
KYclust = which.min(D[-length(D)])
memb[memb==KYclust]
# Now cluster the full set of states and compare the results.
hc <- hclust(dist(A), "ave")
memb <- cutree(hc, k = 10)
a=memb[which(names(memb)=="Kentucky")]
memb[memb==a]
答案 1 :(得分:1)
与k-means相比,hclust发现的聚类可以是任意形状。
因此,到最近的集群中心的距离并不总是有意义的。
做一个最近邻居风格分配可能更好。