R语言nomclust聚类:添加聚类分配列及解决结果不一致问题
解决nomclust聚类分配与树状图不一致的问题
问题背景
使用nomclust包对内置CA.methods标称数据集做层次聚类后,调用dend.plot(hca, clusters = 3)生成的树状图聚类划分,与直接用cutree(hca$dend, k=3)得到的结果不匹配,需要生成对应树状图的聚类分配数据框,或给原始数据添加聚类列。
核心原因
hca$dend是dendrogram对象,cutree对其的聚类编号逻辑与dend.plot依赖的hca$hclust(标准hclust对象)划分逻辑存在差异,直接操作hca$dend会导致聚类分配错位。
正确实现步骤
1. 基础聚类流程
library(nomclust) data(CA.methods) # 执行标称数据层次聚类 hca <- nomclust(CA.methods)
2. 生成匹配树状图的聚类分配数据框
基于hca$hclust提取聚类,再按树状图节点顺序排序,匹配示例格式:
# 提取3类的聚类分配 cluster_assign <- cutree(hca$hclust, k = 3) # 生成按树状图排序的结果数据框 cluster_df <- data.frame( Label = names(cluster_assign)[hca$dend$order], Cluster_Color = paste0( "Cluster", cluster_assign[hca$dend$order], "/", dplyr::case_when( cluster_assign[hca$dend$order] == 1 ~ "Red", cluster_assign[hca$dend$order] == 2 ~ "Green", cluster_assign[hca$dend$order] == 3 ~ "Blue" ) ) )
3. 给原始数据框添加聚类列
# 给原始数据集添加聚类分配列 CA.methods$Cluster_Color <- paste0( "Cluster", cluster_assign, "/", dplyr::case_when( cluster_assign == 1 ~ "Red", cluster_assign == 2 ~ "Green", cluster_assign == 3 ~ "Blue" ) )
示例输出
Label Cluster_Color AGNES Cluster1/Red k-prototypes Cluster1/Red LCA Cluster1/Red TwoStep Cluster1/Red BIRCH Cluster2/Green CURE Cluster2/Green CACTUS Cluster3/Blue ...
内容的提问来源于stack exchange,提问作者antecessor
相关产品推荐
相关产品推荐

