如何在知道簇数的情况下在 cutree() 中获取树的高度

问题描述 投票:0回答:2

我正在使用层次聚类对我的数据进行分类。

我想定义最佳的簇数。为此,我们的想法是可视化一个图表,其中 x 轴是簇的数量,y 轴是树状图中树的高度。

为此,我需要知道指定簇数 K 时树的高度,例如如果 K=4,我需要在命令之后知道树的高度

cutree(hclust(dist(data), method = "ward.D"), k = 4) 

有人可以帮忙吗?

r hierarchical-clustering
2个回答
2
投票

高度存储在

hclust
对象中。 由于您没有提供任何数据,我将用内置的虹膜数据来说明。

HC = hclust(dist(iris[,1:4]), method="ward.D")
sort(HC$height)
<reduced output>
[133]   1.8215623   1.8787489   1.9240172   1.9508686   2.5143038   2.7244855
[139]   2.9123706   3.1111893   3.2054610   3.9028695   4.9516315   6.1980126
[145]   9.0114060  10.7530460  18.2425079  44.1751473 199.6204659

最大的值是第一个分割的高度。第二大的是第二次分割,等等。 您可以看到,这通过绘图给出了您需要的高度。

plot(HC)
abline(h=10.75,col="red")

Dendrogram

您可以看到第四个最大的高度与第四个分割的高度相匹配。


0
投票
  cutree_k_to_h <- function(tree, k) {
    if (is.null(n1 <- nrow(tree$merge)) || n1 < 1) {
      cli::cli_abort("invalid {.arg tree} ({.field merge} component)")
    }
    n <- n1 + 1
    if (is.unsorted(tree$height)) {
      cli::cli_abort(
        "the 'height' component of 'tree' is not sorted (increasingly)"
      )
    }
    mean(tree$height[c(n - k, n - k + 1L)])
  }
  tree <- hclust(dist(iris[, 1:4]), method = "ward.D")
  plot(tree)
  abline(h = cutree_k_to_h(tree, 3), col = "red")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.