在使用分层群集时,如何确定最佳群集数量。如果仅在测量成对距离(左手汀距离)时才有距离矩阵,如何找到最佳聚类数?我提到了其他文章,它们都使用k均值,是分层的,但不适用于字符串类型的数据,如下所示。关于如何使用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))
答案 0 :(得分:0)
可以使用几个统计信息。
例如查看WeightedCluster软件包,它可以计算和绘制一系列此类统计数据。
为说明起见,您将获得每个可用统计信息的最佳组数,如下所示:
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的Gamma,HG和Point双向相关性)
plot(hcRange, stat = c("ASWw", "HG", "PBC"), lwd = 2)
更好的解决方案似乎是三组解决方案。