2

让我们使用FactoMineR包对iris 数据集进行快速的 3 类分类:

library(FactoMineR)
model <- HCPC(iris[,1:4], nb.clust = 3)
summary(model$data.clust$clust)

 1  2  3
50 62 38

我们看到集群 1 中有 50 个观测值,集群 2 中有 62 个观测值,集群 3 中有 38 个观测值。

现在,我们想在树状图中可视化这 3 个集群,使用包dendextend可以制作漂亮的集群:

library(dendextend)
library(dplyr)
model$call$t$tree %>% 
    as.dendrogram() %>% 
    color_branches(k = 3, groupLabels = unique(model$data.clust$clust)) %>% 
    plot()

在此处输入图像描述

问题是树状图上的标签不符合分类的真实标签。簇 2 应该是最大的一个(根据数据有 62 个观测值),但在树状图上,我们清楚地看到它是最小的一个。

我尝试了不同的想法,但现在没有任何效果,所以如果你知道输入哪个输入groupLabels = 来匹配真实标签,那就太好了。

4

1 回答 1

2

往里dendextend::color_branches看,我们可以看到组标签是使用命令分配的g <- dendextend::cutree(dend, k = k, h = h, order_clusters_as_data = FALSE)
这一事实可用于在分配的集群标签和分配的HCPC组标签之间建立映射dendextend::color_branches

library(FactoMineR)
library(dendextend)
library(dplyr)
model <- HCPC(iris[,1:4], nb.clust = 3)  

clust.hcpc <- as.numeric(model$data.clust$clust)
clust.cutree <- dendextend:::cutree(model$call$t$tree, k=3, order_clusters_as_data = FALSE)
idx <- order(as.numeric(names(clust.cutree)))
clust.cutree <- clust.cutree[idx]
( tbl <- table(clust.hcpc, clust.cutree) )

###########
          clust.cutree
clust.hcpc  1  2  3
         1 50  0  0
         2  0  0 62
         3  0 36  2

此表显示集群标签 2 和 3 分别与组标签 3 和 2 匹配。(令人惊讶的是,对于两个样本单元,此规则不正确。)

需要传递到的组级别dendextend::color_branches可以找到如下:

( lbls <- apply(tbl,2,which.max) )

##############
1 2 3 
1 3 2

这是树状图:

model$call$t$tree %>% 
    color_branches(k=3, groupLabels =lbls) %>% 
    set("labels_cex", .5) %>% 
    plot(horiz=T) 

在此处输入图像描述

于 2017-05-25T23:09:49.823 回答