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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:01:19