【问题标题】:Is there an R function to statistically compare different cluster solutions? (e.g. k-means solution with pam/clara solution)是否有 R 函数来统计比较不同的集群解决方案? (例如,带有 pam/clara 解决方案的 k-means 解决方案)
【发布时间】:2019-09-21 00:14:46
【问题描述】:

我在同一数据集上比较了不同聚类算法的轮廓宽度:k-means、clara 和 pam。我可以看到哪一个在轮廓宽度上得分最高。但是我现在可以像我们通常对 ANOVA 所做的那样,在统计上测试解决方案是否彼此不同吗?

我为我的论文提出了一个假设,即 clara 和 pam 会给出比 k-means 更有效的结果。我知道他们两个的轮廓宽度都更高,但我不知道如何在统计上证实/否定我的假设。

 #######4: Behavioral Clustering
 ##4.1 Kmeans
 kmeans.res.4.1 <- kmeans(ClusterDFSBeha, 2)
 print(kmeans.res.4.1)
 #Calculate SW
 library(clValid)
 intern4.1 <- clValid(ClusterDFSBeha, 2, clMethods="kmeans",validation="internal", maxitems = 9800)
 summary(intern4.1)
 #Silhouette width = 0.7861

##4.2 PAM
pam.res.4.2 <- pam(ClusterDFSBeha, 2)
print(pam.res.4.2)
intern4.2 <- clValid(ClusterDFSBeha, 2, clMethods="pam", validation="internal", maxitems = 9800)
summary(intern4.2)
#Silhouette width = 0.6702

##4.3 Clara
clara.res.4.3 <- clara(ClusterDFSBeha,2)
print(clara.res.4.3)
intern4.3 <- clValid(ClusterDFSBeha, 2, clMethods="clara", validation="internal", maxitems = 9800)
summary(intern4.3)
#Silhouette width = 0.8756

现在我想从统计学上评估这些方法是否在统计学上“不同”,以便能够在某个 p 水平上拒绝或批准我的假设。

【问题讨论】:

    标签: r compare cluster-analysis


    【解决方案1】:

    这不是一个完美的答案。

    如果要测试一个聚类方法的“质量”,最好看算法给出的划分。

    对于检查,您可以通过 ARI(调整排名指数)等度量来比较分区,我们称之为相对性能。另一个想法是在你知道真实标签的地方使用模拟数据,并且由于它们,你可以比较你的结果,你离真相有多远。我知道的最后一个是评估您的聚类方法对数据的小扰动的稳定性:Rob Tibshirani 的间隙算法。

    但实际上在聚类理论(无监督分类)中,很难评估一个聚类的相关性。与监督学习任务相比,我们的选择模型标准更少。

    我真的建议你去网上看看,例如这个包装描述似乎是一个很好的介绍:

    https://cran.r-project.org/web/packages/clValid/vignettes/clValid.pdf

    直接回答,我认为您要寻找的东西不存在。如果是的话,我会很高兴知道更多。

    【讨论】:

      【解决方案2】:

      这样的比较永远不会公平。

      任何此类测试都会做出一些假设,并且基于类似假设的聚类方法预计会获得更好的分数。

      例如,如果您使用带有欧几里德距离的 Silhouette、带有欧几里德距离的 PAM 和 k-means,则必须预期 PAM 具有优势。如果您使用具有 squared 欧几里得距离的 Silhouette,k-means 几乎肯定会表现最好(而且几乎可以肯定,它的性能优于具有平方欧几里得的 PAM)。

      因此,您不是在判断哪种方法“更好”,而是与您的评估方法更相关。

      【讨论】:

      • 非常感谢。我明白..你知道我如何在不公平的情况下比较它们的内部有效性吗?我是否应该使用曼哈顿距离以使 kmeans、pam 或 clara 没有优势?如果是这样,我应该如何在 clValid 包中更改此设置?这是我用来计算轮廓宽度的那个。
      • 或者我应该把这作为我研究的限制吗?因为在 clValid 包文章中,他们还比较了 kmeans、pam 和层次聚类 (sthda.com/english/wiki/print.php?id=243)。他们也没有具体说明算法和度量之间的相关风险。不知道现在该怎么办,但是我确实理解这个问题。到目前为止,感谢您的帮助!
      • 曼哈顿不是独立于欧几里得的,这不是你真正想要的。 K-median 很可能会在曼哈顿赢得对方。因此,您需要衡量哪种方法最像 kmedians...您需要接受的是,没有 一个 最佳答案。每种措施和每种方法都有不同的偏好。将它们视为颜色,黄色比绿色更好,因为它更红?
      • 嗯,没错,谢谢。我只需要仔细解释一下。没有一种最好的衡量标准来比较它们以及我为什么选择这个衡量标准。感谢您的帮助,我真的很感激!
      【解决方案3】:

      有一种使用列联表的简单方法。假设您获得了一组集群分配ll 和另一组cc,在理想情况下,您可以使这些标签完美对齐,并且从该表中您可以使用chi squared test 和pvalue 生成一个statistic分配差异;

      ll1 = rep(c(4,3,2,1),100)
      cc1 = rep(c(1:4),length(ll1)/4)
      table(cc1, ll1)
      print(paste("chi statistic=",chisq.test(cc1, ll1)$statistic ))
      print(paste("chi pvalue=",chisq.test(cc1, ll1)$p.value ))
      

      生产;

       ll1
      cc1   1   2   3   4
        1   0   0   0 100
        2   0   0 100   0
        3   0 100   0   0
        4 100   0   0   0
      [1] "chi statistic= 1200"
      [1] "chi pvalue= 1.21264177763119e-252"
      

      意味着细胞计数不是随机(统一)分配以支持关联。对于随机分配;

      ll2 = sample(c(4,3,2,1),100,replace=TRUE)
      cc2 = sample(c(1:4),length(ll2),replace=TRUE)
      table(cc2, ll2)
      print(paste("chi statistic=",chisq.test(cc2, ll2)$statistic ))
      print(paste("chi pvalue=",chisq.test(cc2, ll2)$p.value ))
      

      有输出

         ll2
      cc2  1  2  3  4
        1  6  7  6 10
        2  5  5  7  9
        3  6  7  7  4
        4  4  8  5  4
      [1] "chi statistic= 4.96291083483202"
      [1] "chi pvalue= 0.837529350518186"
      

      支持没有关联。

      您可以将其用于来自不同算法的集群分配,以查看它们是否随机关联。

      你也可以使用; ** 聚类信息距离的变化** 以获得分配之间的距离。对于 ll1 和 cc1('mcclust' R 包)

       vi.dist(bb1,cc1)
       vi.dist(bb1,cc1, parts=TRUE)
      

      你得到

      0
      vi0H(1|2)0H(2|1)0
      

      对于采样的 ll2 和 cc2

      vi.dist(aa2,cc2)
      vi.dist(aa2,cc2, parts=TRUE)
      3.68438190593985
      vi3.68438190593985H(1|2)1.84631473075115H(2|1)1.83806717518869
      

      您还可以应用 V 度量

      【讨论】:

        猜你喜欢
        • 2011-12-24
        • 2022-12-16
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        相关资源
        最近更新 更多