【问题标题】:how to get the optimal number of cluster from dissimilarity (diana, cluster R package) output?如何从相异度(戴安娜,集群 R 包)输出中获得最佳集群数量?
【发布时间】:2020-12-05 22:27:30
【问题描述】:

我正在尝试从使用 cluster 包和 diana 方法(使用欧几里得相异度)获得的树状图中获得最佳数量的簇:

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 个变量)。

然后我尝试估计 dissim 。距离使用原始数据并估计欧几里得距离,因此不使用相异矩阵

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

我收到以下错误消息:

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

欢迎提出任何建议,甚至建议使用不同的方法来获得最佳集群数。谢谢。

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:

    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-13
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      相关资源
      最近更新 更多