【问题标题】:Pass distance matrix to seaborn clustermap将距离矩阵传递给 seaborn clustermap
【发布时间】:2019-12-10 00:48:25
【问题描述】:

我想将自己的距离矩阵(行链接)传递给 seaborn clustermap。

已经有一些类似的帖子

Use Distance Matrix in scipy.cluster.hierarchy.linkage()?

但他们都指向

scipy hierarchy linkage

将聚类指标和方法作为参数。

scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean', optimization_ordering=False)

输入 y 可以是一维压缩距离矩阵或二维数组 观察向量的个数

我不明白的是:

我的距离矩阵已经基于某个度量和方法, 为什么我要在scipy hierarchy linkage 中重新计算?

是否有一个选项可以完全使用我的距离并创建链接?

【问题讨论】:

  • 你说linkage“将聚类指标和方法作为参数”。再看一下文档字符串;链接也接受预先计算的距离,但它们必须表示为“压缩”距离矩阵(它只是一个包含距离矩阵的非冗余数据的一维数组)。如果将压缩距离矩阵传递给链接,则忽略 metric 参数。然后再次查看您链接的第一个问题,它回答了您的问题。

标签: python scipy seaborn hierarchical-clustering


【解决方案1】:

对于后代,这是一个完整的方法,因为 cmets 中的 @WarrenWeckesser 和链接答案中的 @SibbsGambling 省略了一些细节。

假设distMatrix 是您的距离矩阵(不必是欧几里得),i 行和j 列中的条目表示ith 和jth 对象之间的距离。那么:

# import packages
from scipy.cluster import hierarchy
import scipy.spatial.distance as ssd
import seaborn as sns

# define distance array as in linked answer
distArray = ssd.squareform(distMatrix) 

# define linkage object
distLinkage = hierarchy.linkage(distArray)

# make clustermap
sns.clustermap(distMatrix, row_linkage=distLinkage, col_linkage=distLinkage)

请注意,在创建clustermap 时,您仍然必须引用原始矩阵。如果您想使用不同的聚类方法,例如method='ward',请在定义distLinkage 时包含该选项。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2017-09-16
    • 2017-08-21
    • 1970-01-01
    • 2016-12-06
    • 2011-08-08
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多