我当前正在研究文档主题中的层次结构。作为第一步,我找到了文档的向量表示,然后使用层次结构聚类来确定文档主题中是否有主题。我只想考虑至少包含2%原始数据的(嵌套(簇。为了实现这一目标,我正在使用R。
现在,我正在努力从聚类结果中有效提取群集层次结构。聚类是使用"快速策略"软件包完成的,该软件包提供了与原始" Hclust"函数相似的结果。
对于我的最终输出应该看起来像这样;将有两个表
集群分配:
docID , ClusterLabel
1, A
2, A
3, B
4, B
5, B
3, C
4, D
5, C
...
集群层次结构:
Parent, Child
B, C
B, D
...
您可以看到,观测值3,4和5在群集分配表中多次出现,其中一个群集是其父群集的子集群。这可以在层次表中看到。
我当前的方法是我使用Cutree。从" Dendextend"软件包中的DENDOGRAM函数来找到k值的网格的群集分配,然后推断出群集层次结构和输出分配。但是,这种方法非常幼稚,对于大量观察和簇而变得非常慢。
有关如何有效解决此问题的建议,最好使用一些随时可用的软件包。
编辑:考虑以下示例,与样本输出数据相对应:
data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2)
plot(data)
hc<- hclust(dist(data))
plot(hc)
如果我们将树在高度6上切割,我们将在输出中获得2个簇,称为A和B。但是,如果我们在高度4上切树,我们将在输出中有3个簇,称为A,C和D。现在,例如,使用DOCID 3的观察在任何一个群集B中,如群集C中(取决于高度我们切开树(,这对应于样本输出群集分配中的两个条目。群集B分为两个群集C和D,可以在群集Hierachy输出中看到。
现在,我的目标是获取群集分配和层次结构的完整列表,从而向下移动树状图。(最好是在(子(群集中的观察量少于一定量的观测值时停止(
现在,我没有想出一种合理的有效方法来做到这一点,希望任何人都可以为我提供一个想法。
cutree
函数中的k
参数可以接收值的向量,输出看起来像这样:
> data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2)
> hc<- hclust(dist(data))
> cutree(hc, k = 1:5)
1 2 3 4 5
[1,] 1 1 1 1 1
[2,] 1 1 1 2 2
[3,] 1 1 2 3 3
[4,] 1 2 3 4 4
[5,] 1 2 3 4 5
这是否可以回答您的问题?