群集 - 如何查找离群集最近的群集

时间:2013-09-06 17:09:45

标签: r cluster-analysis hierarchical-clustering

我得到的另一个问题的提示使我感到困惑。

我参加了一项练习,实际上是一项大型练习的一部分:

  1. 使用hclust(已完成)
  2. 对一些数据进行聚类
  3. 给出一个全新的向量,找出你在1中最接近的群集。
  4. 根据练习,这应该在很短的时间内完成。

    然而,几周之后我很困惑这是否可以完成,因为显然我真正从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个这样的集群以及它们包含的内容?

2 个答案:

答案 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发现的聚类可以是任意形状。

因此,到最近的集群中心的距离并不总是有意义的。

做一个最近邻居风格分配可能更好。