0

我目前正在研究文档主题中的层次结构。作为第一步,我找到了我的文档的向量表示,之后我使用层次聚类来确定文档的主题中是否存在主题。我只想考虑至少包含 2% 原始数据的(嵌套)集群。为了实现这一点,我正在使用 R。

现在,我正在努力从聚类结果中有效地提取聚类层次结构。集群是通过“fastcluster”包完成的,它提供了与原始“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 在集群分配表中多次出现,其中一个集群是其父集群的子集群。这可以在层次结构表中看到。

我目前的方法是使用“Dendextend”包中的 cutree.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 输出中看到。

现在我的目标是获取集群分配和层次结构的完整列表,向下移动树状图。(最好在(子)集群中的观察数量少于一定数量的观察时停止)

直到现在我还没有想出一个合理有效的方法来做到这一点,希望任何人都可以给我一个想法。

4

1 回答 1

2

函数中的k参数cutree可以接收值向量,输出如下所示:

> 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

这回答了你的问题了吗?

于 2017-05-08T21:18:49.380 回答