【问题标题】:R: clustering with a similarity or dissimilarity matrix? And visualizing the resultsR:用相似或相异矩阵进行聚类?并将结果可视化
【发布时间】:2017-12-17 02:29:12
【问题描述】:

我有一个使用 Harry 创建的相似度矩阵——一个字符串相似度的工具,我想从中绘制一些树状图,看看我是否可以在数据中找到一些集群/组.我正在使用以下相似性度量:

  • 归一化压缩距离 (NCD)
  • Damerau-Levenshtein 距离
  • Jaro-Winkler 距离
  • Levenshtein 距离
  • 最佳字符串对齐距离 (OSA)

("为了比较,Harry 从输入加载一组字符串,计算指定的相似性度量并将相似性值矩阵写入输出")

一开始好像是第一次用R,没太注意hclust的文档,所以用了一个相似度矩阵。我知道我应该使用 dissimilarity matrix,而且我知道,因为我的 similarity matrix 是标准化的 [0,1],我可以只做 dissimilarity = 1 - 相似度,然后使用hclust

但是,我使用带有相似矩阵hclust得到的组比我使用hclust得到的组要好得多,并且它是对应的不相似矩阵

我也尝试使用proxy 包,但同样的问题发生了,我得到的组不是我所期望的。

使用相似度函数获取树状图:

  1. plot(hclust(as.dist(""similarityMATRIX""), "average"))

使用我尝试的相异矩阵:

  1. plot(hclust(as.dist(""dissimilarityMATRIX""), "average"))

  1. plot(hclust(as.sim(""dissimilarityMATRIX""), "average"))

从 (1) 我得到了我认为非常好的树状图,因此我可以从中得到非常好的组。从(2)和(3)我得到相同的树状图,我可以从中得到的组不如我从(1)中得到的组

我是说这些组是坏/好,因为目前我要分析的数据量很少,所以我可以很容易地检查它们。

我得到的这些有意义吗?有什么可以证明这一点的吗?关于如何使用相似矩阵进行聚类的一些建议。有没有比树状图更好的方法来可视化相似度矩阵?

【问题讨论】:

  • 您提到您使用了三个相似性度量,但它们都被称为Something Distance 暗示不相似性度量。
  • 如果没有一些数据可以处理,就很难提供帮助。写问题时,请牢记“我怎样才能最好地让别人更容易帮助我?”。 10 次中有 9 次的答案是发布一段代码,潜在的回答者可以简单地复制/粘贴到他们自己的编辑器中,运行它,并以相同的方式重现(核心部分)您遇到的问题。
  • @G5W - 从您的评论并再次查看这些“距离”似乎工作的方式,我相信您是正确的,事实上,它们计算了两个字符串之间的差异。因为他们基本上分析了将一个字符串转换为另一个字符串需要什么(删除、插入等)。

标签: r matrix similarity dendrogram


【解决方案1】:

您可以使用热图可视化相似度矩阵(例如,使用heatmaply R 包)。 您可以使用dendextend R 包函数cor_cophenetic(使用github 的最新版本)检查树状图是否适合。

基于距离的聚类可以使用 hclust 完成,也可以使用 cluster::pam (k-medoids)。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2015-12-14
    • 2015-07-17
    • 2012-04-22
    • 2017-07-27
    • 2015-10-17
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多