r 树状图 - groupLabels 与真实标签不匹配(包 dendextend)
r dendrogram - groupLabels not match real labels (package dendextend)
让我们使用 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 =
以匹配真实标签,那就太好了。
查看 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
这 table 表明簇标签 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)
让我们使用 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 =
以匹配真实标签,那就太好了。
查看 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
这 table 表明簇标签 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)