You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中使用cutree函数后,如何获取新的hclust对象?

如何从cutree结果生成新的hclust对象?

你已经知道cutree会输出每个样本的聚类标签向量,但如果需要获取切割后的聚合树结构(新的hclust对象),可以通过以下两种方式实现:

方式1:获取单个聚类的子树hclust对象

利用dendextend包的cut()函数切割 dendrogram 对象,提取每个聚类对应的子树,再转换为hclust格式:

library(gplots)
library(dendextend)

# 你的原始代码
data <- iris[,1:4]
distance <- dist(data, method = "euclidean", diag = FALSE, upper = FALSE)
hc <- hclust(distance, method = 'ward.D')
dnd <- as.dendrogram(hc)
plot(dnd) 
abline(h=hc$height[140],col="red")

# 按指定高度切割树
cut_result <- cut(dnd, h = hc$height[140])

# 提取每个聚类对应的子树(dendrogram格式)
sub_dend_list <- cut_result$lower

# 将任意子树转换为hclust对象并可视化
sub_hc <- as.hclust(sub_dend_list[[1]])
plot(sub_hc, main = "第一个聚类的子树")

方式2:生成简化的整体hclust对象(聚类作为叶节点)

如果需要得到一个简化的层次聚类树,把每个切割后的聚类当作一个叶节点,保留上层聚合关系,可以通过计算聚类中心后重新聚类实现:

# 获取cutree的聚类标签
cluster_labels <- cutree(hc, h = hc$height[140])

# 计算每个聚类的特征均值(作为聚类中心)
cluster_centers <- aggregate(data, by = list(cluster = cluster_labels), FUN = mean)

# 计算聚类中心之间的距离
center_dist <- dist(cluster_centers[, -1], method = "euclidean")

# 对聚类中心执行层次聚类,得到简化的hclust对象
simplified_hc <- hclust(center_dist, method = "ward.D")

# 可视化简化后的树
plot(simplified_hc, main = "切割后的简化层次聚类树", labels = paste("Cluster", cluster_centers$cluster))

说明

  • cut()函数针对dendrogram对象操作,能精准提取切割点以下的子树结构
  • 简化树的构建需要基于聚类中心重新计算,因为原hclust的合并记录是针对原始样本的,无法直接生成以聚类为节点的上层结构

内容的提问来源于stack exchange,提问作者Jiadong Fang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:25:47