使用层次聚类和距离矩阵找到簇的数量

3

在使用层次聚类时,如何确定最佳群集数量。如果我只有距离矩阵,因为我仅测量成对距离(levenshtein距离),那么我怎样才能找到最佳的群集数量?我参考了其他帖子,它们都使用k-means、层次聚类,但不适用于字符串类型的数据,如下所示。有关如何使用R查找群集数量的任何建议吗?

 set.seed(1)
 rstr <- function(n,k){   # vector of n random char(k) strings
 sapply(1:n,function(i) {do.call(paste0,as.list(sample(letters,k,replace=T)))})
 }

str<- c(paste0("aa",rstr(10,3)),paste0("bb",rstr(10,3)),paste0("cc",rstr(10,3)))
# Levenshtein Distance
 d  <- adist(str)
 rownames(d) <- str
hc <- hclust(as.dist(d))

有没有任何统计数据可以用来支持这个逻辑? - user3570187
1个回答

2

可以使用多种统计方法。

例如,可以查看WeightedCluster软件包,该软件包可以计算和绘制一系列此类统计数据。

举个例子,您可以按照以下方式获取每个可用统计数据的最佳分组数:

Original Answer翻译成:"最初的回答"

library("WeightedCluster")
hcRange <- as.clustrange(hc, diss=as.dist(d), ncluster=6) 
summary(hcRange)
##      1. N groups   1.  stat
## PBC            3  0.8799136
## HG             3  1.0000000
## HGSD           3  0.9987651
## ASW            3  0.4136550
## ASWw           3  0.4722895
## CH             3  8.3605263
## R2             6  0.4734561
## CHsq           3 20.6538462
## R2sq           6  0.6735039
## HC             3  0.0000000

你可以将所有计算出的解决方案的统计数据绘制出来(这里我们展示了平均轮廓宽度ASWw、Huber's Gamma HG和点双序列相关性)
plot(hcRange, stat = c("ASWw", "HG", "PBC"), lwd = 2)

enter image description here

最好的解决方案似乎是三组解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接