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

基于TramineR的Ward层次聚类最优聚类数确定方法咨询

Ward层次聚类最优聚类数判定方法

以下方法均适配你当前的序列距离+Ward层次聚类的场景,可按需选择:

1. 肘法

原理:Ward法的聚类合并高度直接对应组内离均差平方和的增量,随着聚类数减少、簇不断合并,组内平方和会逐步上升,上升速率突然变缓的拐点对应的就是最优聚类数。
你可以直接用聚类结果的height属性快速绘制肘图:

# 简化版肘图,无需额外计算指标
# 反转合并高度对应k从大到小的变化
plot(rev(clusterward$height), type = "b", pch = 16, xlab = "聚类数k", ylab = "合并高度", xaxt = "n")
axis(1, at = 1:length(clusterward$height), labels = rev(2:(length(clusterward$height)+1)))

找到折线的拐点对应的k值即可。

2. 轮廓系数法

原理:轮廓系数衡量每个样本和自身所在簇的相似度、与其他簇的相似度差值,取值范围为[-1,1],整体平均轮廓系数越高说明聚类区分度越好,取平均系数最高的k为最优值。
使用前如果未安装cluster包,先运行install.packages("cluster"):

library(cluster)
# 自定义测试的聚类数范围,可根据数据量调整
k_range <- 2:15
sil_scores <- sapply(k_range, function(k){
  cl <- cutree(clusterward, k = k)
  mean(silhouette(cl, df_new.seq.om)[, "sil_width"])
})
# 绘制系数变化曲线
plot(k_range, sil_scores, type = "b", pch = 16, xlab = "聚类数k", ylab = "平均轮廓系数", main = "轮廓系数选最优k")
# 直接提取最优k值
best_k <- k_range[which.max(sil_scores)]

3. 聚类树直观判定

你已经生成的层次聚类树也可以直接辅助判断:观察不同层级合并的高度差,合并高度跳变最大的位置切分,对应的就是最优聚类数。也可以用factoextra包可视化切分效果验证合理性:

# 未安装先运行install.packages("factoextra")
library(factoextra)
fviz_dend(clusterward, k = best_k, # 替换为前面得到的最优k值
          cex = 0.6, palette = "jco", 
          rect = TRUE, rect_border = "jco", rect_fill = TRUE)

补充业务适配建议

如果是业务场景使用,除了上述统计指标,还需要结合聚类结果的业务可解释性调整k值,比如确认不同簇的特征是否有明确的业务区分度,避免出现无实际意义的过小簇。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:09:01