我从一系列爱好和人物开始,我想通过他们共同的爱好来聚集那些人。因此,我创建了一个距离矩阵,然后我应用了层次聚类和cutree将聚类分组到特定数量的聚类中。现在我有cutree矩阵,但我不知道如何从中提取簇。你能建议吗?
这是我的意思的一个例子。
距离矩阵:
one three two
one 0 1.0 1.0
three 1 0.0 0.5
two 1 0.5 0.0
然后我使用了hclust和cutree并得到了这个结果:
hc <- hclust(dist, method="ward")
ct <- cutree(hc, k=1:3)
1 2 3
one 1 1 1
three 1 2 2
two 1 2 3
如何获取属于同一群集的人员列表?
感谢您的帮助。
答案 0 :(得分:2)
ct
是一个矩阵,因此您可以索引列以获取大小为1:3的组的成员资格。例如,
cp[, 2]
给出了将3个观察值分配给2组的非平凡解决方案。
要获得每个群集中的观察结果,请使用您的数据:
Dij <- matrix(c(0, 1.0, 1.0,
1, 0.0, 0.5,
1, 0.5, 0.0), ncol = 3, byrow = TRUE)
rownames(Dij) <- colnames(Dij) <- c("one", "two", "three")
hc <- hclust(as.dist(Dij), method="ward")
ct <- cutree(hc, k=1:3)
你可以使用split()
函数来分割ct
的行名(你是距离矩阵中的观察/样本标识符,Dij
),由会员分解从您想要使用的ct
列中选择的向量。 E.g。
> split(rownames(ct), ct[,2])
$`1`
[1] "one"
$`2`
[1] "two" "three"
答案 1 :(得分:1)
您的k=1:3
将为每个$ k = {1,2,3} $提供预测的群集。如果你想根据集群捆绑组,假设WLOG 2是你感兴趣的集群数,你只需要用矩阵列条目连接矩阵列的名称。
示例:
hc <- hclust(dist(USArrests))
memb <- cutree(hc, k = 1:5)
tapply(names(memb[, 3]), memb[, 3], c) ## say we're interested in 3 clusters