【问题标题】:Clustering function R Hclust Loop and develop a table聚类函数 R Hclust Loop 和开发表
【发布时间】:2014-05-24 03:17:44
【问题描述】:

我正在处理一个文本挖掘/集群项目,并试图创建一个表,其中包含作为行的集群数和代表以下 6 个指标的 6 列: max.diameter, min.separation, average.within,average.between,avg.silwidth,dunn.

我需要为 3 种方法创建表 - kmeans、pam 和 hclust。

我能够为 kmeans 创建一些东西

dtm0.90Dist = dist(dtm0.90)

foreachcluster = function(k) { 
  kmeans.result = kmeans(dtm0.90, k);
  kmeans.stats = cluster.stats(dtm0.90Dist,kmeans.result$cluster); 
                              c(kmeans.stats$min.separation, kmeans.stats$max.diameter,
                               kmeans.stats$average.within, kmeans.stats$avearge.between,
                               kmeans.stats$avg.silwidth, kmeans.stats$dunn) 
}
rbind(foreachcluster(2), foreachcluster(3), foreachcluster(4), foreachcluster(5),
      foreachcluster(6), foreachcluster(7),foreachcluster(8))

我得到以下输出

       [,1]     [,2]     [,3]      [,4]       [,5]
[1,] 3.162278 30.19934 5.831550 0.5403872 0.10471348
[2,] 2.236068 28.37252 5.006058 0.3923446 0.07881104
[3,] 1.000000 28.37252 4.995478 0.2496066 0.03524537
[4,] 1.000000 26.40076 4.387212 0.2633338 0.03787770
[5,] 1.000000 26.40076 4.353248 0.2681947 0.03787770
[6,] 1.000000 26.40076 4.163757 0.1633954 0.03787770
[7,] 1.000000 26.40076 4.128927 0.2676423 0.03787770

对于 hclust 和 pam 方法,我需要类似的输出,但在我的一生中,这两种方法中的任何一种都无法使用相同的功能

好的,所以我能够为 HCLUST 制作函数

forhclust=function(k){dfDist = dist(dtm0.90);
                      hclust.result = hclust(dfDist);
                      hclust.cluster = (cutree(hclust.result, k));
                      cluster.stats(dfDist,hclust.cluster);c(cluster.stats$min.separation)}

但是当我运行这个时我得到一个错误

Error in cluster.stats$min.separation : 
  object of type 'closure' is not subsettable

我需要的是它打印“min.separation”输出。

我非常感谢所有帮助,也许还有一些指导,以帮助我理解我的方法在 hclust 中失败的原因。

另外,有没有好的资源可以一步一步详细解释这些方法的功能和应用?

谢谢

【问题讨论】:

    标签: r cluster-analysis


    【解决方案1】:
    foreachcluster2 = function(k) { 
      hc = hclust(mDist, method = "ave")
      hresult = cutree(hc, k)
      h.stats = cluster.stats(mDist,hresult); 
      c( max.dia=h.stats$max.diameter, 
         min.sep=h.stats$min.separation,
         avg.wi=h.stats$average.within, 
         avg.bw=h.stats$average.between,
         silwidth=h.stats$avg.silwidth, 
         dunn=h.stats$dunn) 
    }
    t2 = rbind(foreachcluster2(2), foreachcluster2(3), foreachcluster2(4),     foreachcluster2(5),foreachcluster2(6),
           foreachcluster2(7), foreachcluster2(8), foreachcluster2(9), foreachcluster2(10), 
           foreachcluster2(11), foreachcluster2(12),foreachcluster2(13),foreachcluster2(14))
    rownames(t2) = 2:14
    t2
    

    这应该可行。对于 pam():

    pamC <- pam(x=m, k=2)
    pamC
    pamC$clustering
    

    用$clustering代替$cluster,其余都一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2021-03-19
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2018-12-03
      • 2013-12-19
      相关资源
      最近更新 更多