如何从不相似戴安娜,群集R包输出中获得最佳群集数?

问题描述

我正在尝试通过以下方法从聚类包和戴安娜方法(使用的欧氏不相似性)获得的树状图中获得最佳聚类数:

mydatad <- diana(mydata,stand = FALSE)
mydata_dend <- fviz_dend(mydatad,cex = 0.5,k = 2,palette = "jco") 
## use factoextra and ggplot2 for visualization

然后我尝试将相异矩阵与NbClust结合使用:

NC <- NbClust(data = NULL,diss = mydatadd,distance = NULL,min.nc = 2,max.nc = 50,method= "single",index = "silhouette")

我收到此错误消息”:

Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") : 
  missing value where TRUE/FALSE needed

无论我的数据没有缺失值,对于相同的元素,dissim矩阵中的最小值应为0(mydata是〜2000个元素,具有11个变量)。

然后,我试图估计一下损失。距离是使用原始数据并估算欧几里得距离,因此不使用相异矩阵

NC <- NbClust(T2141d,diss = NULL,distance = "euclidean",index = "silhouette")

,我收到以下错误消息:

Error in t(jeu) %*% jeu : 
  requires numeric/complex matrix/vector arguments

欢迎任何建议,甚至建议采用不同的方法以获得最佳聚类数。 thnx。

解决方法

NbClust函数需要一个相异矩阵。运行diana时,返回的对象不是相异矩阵,尽管它是经过计算的。您需要设置keep.diss=TRUE。在展示如何使用示例数据集返回不相似矩阵之前:

library(factoextra)
library(cluster)
mydata=data.frame(matrix(runif(2000*11),ncol=11))
mydatad <- diana(mydata,stand = FALSE,keep.diss=TRUE)
# check the dissimilarity matrix stored
class(mydatad$diss)
[1] "dissimilarity" "dist"

NC <- NbClust(data = NULL,diss = mydatad$diss,distance = NULL,min.nc = 2,max.nc = 50,method= "single",index = "silhouette")

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...