【问题标题】:Using different metric for hclust linkage?使用不同的指标进行 hclust 链接?
【发布时间】:2012-08-30 13:33:42
【问题描述】:

在 R 中,您可以使用各种指标在聚类之前构建距离矩阵,例如二进制距离,曼哈顿距离等... 但是,在选择联动方式(完全、平均、单一等)时,这些联动都使用欧式距离。如果您依赖差异度量来构建距离矩阵,这似乎并不特别合适。

在构建聚类树时,有没有办法(或库...)将其他距离应用于链接方法?

谢谢!

【问题讨论】:

  • 我是否理解正确:您使用非标准距离计算距离矩阵(我经常这样做,例如使用 $\frac{1}{2}(1 - COR (X)$) .在层次聚类距离计算:融合对象(簇)到所有其他对象/簇的距离。问题是:如何使hclust也使用非标准距离这些计算?
  • 这意味着这里有(至少)2个问题:a)编程问题。 b) 统计部分:是否有必要/好/有意义/在hclust 内使用非标准距离的含义是什么,因为它在 distance matrix 上而不是在数据矩阵?
  • 的确,这正是我的问题:如何在迭代聚类中使用非标准度量,即在链接方法中。
  • 我认为在stackoverflow上可以回答问题的编程部分。由于我对问题的统计/数学部分更感兴趣,我刚刚在交叉验证上发布了该部分:stats.stackexchange.com/questions/35395/…

标签: r cluster-analysis


【解决方案1】:

我真的不明白你的问题。例如,假设我有以下数据:

x <- matrix(rnorm(100), nrow=5)

然后我可以使用dist构建一个距离矩阵

##Changing the distance measure
d_e = dist(x, method="euclidean")
d_m = dist(x, method="maximum")

然后我可以随心所欲地聚集:

##Changing the clustering method
hclust(d_m, method="median")

【讨论】:

  • 好的,我想我的问题与用于构造距离矩阵的度量和选择的链接方法之间的关系有关:是否有任何组合可能,或者某些链接方法更适合某些度量? hclust 手册页指出 "[...] 仅对于有限数量的距离/链接组合,可以有效地计算集群之间的差异(即,没有 'hclust' 本身),最简单的是平方欧几里得距离和质心链接。”
  • 如果这是你真正的问题(这是一个好问题!),它比计算更多的是统计数据。也许关闭(或接受答案)并尝试 stats.sx
【解决方案2】:

如果您已经构建了一个已经表示成对距离的矩阵,请使用例如

hclust(as.dist(mx), method="single")

【讨论】:

    【解决方案3】:

    您可能想尝试使用agnes,而不是hclust,并给它一个距离矩阵。这里有一个很好的教程: http://strata.uga.edu/software/pdf/clusterTutorial.pdf

    从本教程中,您可以通过以下方式生成和使用距离矩阵进行聚类:

    > library(vegan)
    # load library for distance functions
    > mydata.bray <- vegdist(mydata, method="bray")
    # calculates bray (=Sørenson) distances among samples
    > mydata.bray.agnes <- agnes(mydata.bray)
    # run the cluster analysis
    

    我自己使用 Daniel Müllner 教授的 fastcluster library,它的 API 与 agnes 完全相同,但对于大型数据集来说速度要快几个数量级。

    【讨论】:

    • 谢谢,但我看不出这里与 hclust 函数的区别:hclust 还将计算的距离矩阵作为输入,例如使用 dist 或 Dist 函数,用户可以指定特定的链接方式。
    • 你能澄清你原来的问题吗?我对你在问什么感到困惑。无论如何,您也可以为agnes 指定度量,它会为您计算距离矩阵,尽管它仅限于曼哈顿距离和欧几里得距离。一般来说,我建议您只使用 Müllner 教授的代码,该代码没有针对任何特定指标进行任何优化,但无论如何都应该优于 hclustagnes
    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多