首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >距离矩阵的Dendrogram或其他绘图

距离矩阵的Dendrogram或其他绘图
EN

Stack Overflow用户
提问于 2017-01-01 15:19:38
回答 1查看 15.9K关注 0票数 9

我有三个矩阵要比较。每个都是5x6。我最初想使用层次聚类来对矩阵进行聚类,以便在给定相似性阈值的情况下,对最相似的矩阵进行分组。

我在python中找不到任何这样的函数,所以我手工实现了距离度量,(p-norm where p=2)。现在我有一个3x3距离矩阵(我相信在这个例子中它也是一个相似矩阵)。

我现在正试着制作一个树状图。这是我的代码,这就是问题所在。我想要生成一个图表(如果可能的话,一个树状图)来显示最相似的矩阵簇。矩阵0,1,2,0和2是相同的,应该先聚在一起,1是不同的。

距离矩阵如下所示:

代码语言:javascript
复制
>   0     1    2 
0   0.0    2.0  3.85e-16
1   2.0    0.0  2.0
2 3.85e-16 2.0  0.0

代码:

代码语言:javascript
复制
from scipy.cluster.hierarchy import dendrogram
import matplotlib.pyplot as plt
import numpy as np
from scipy.cluster.hierarchy import linkage
mat = np.array([[0.0, 2.0, 3.8459253727671276e-16], [2.0, 0.0, 2.0], [3.8459253727671276e-16, 2.0, 0.0]])
dist_mat = mat
linkage_matrix = linkage(dist_mat, "single")
dendrogram(linkage_matrix, color_threshold=1, labels=["0", "1", "2"],show_leaf_counts=True)
plt.title=("test")
plt.show()

这是输出:

链接的含义是什么(dist_mat,'single')?我会假设输出图如下所示,其中0到1之间的距离为2.0 (例如)。

是否有更好的方法来表示这些数据?是否有一个函数可以接受几个矩阵而不是点,来比较和形成一个距离矩阵,然后进行聚类?对于如何可视化这些矩阵之间的差异,我愿意听取其他建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-01 19:17:47

linkage的第一个参数不应该是平方距离矩阵。一定是 distance matrix。在您的例子中,这将是np.array([2.0, 3.8459253727671276e-16, 2])。您可以使用scipy.spatial.distance.squareform从平方距离矩阵转换为浓缩形式。

如果将一个二维数组传递给形状为linkage(m, n),它将其视为n-dimensional空间中的m点数组,并计算这些点本身的距离。这就是为什么当你传递方距矩阵时没有得到一个错误--但是你得到了一个不正确的图。(这是linkage的一个无文档的“特性”。)

还要注意的是,由于距离3.8e-16是如此之小,与点0和点2之间的连接相关的水平线可能在图中不可见--它位于x轴上。

下面是修改后的脚本版本。在这个例子中,我将这个很小的距离更改为0.1,所以关联的集群不会被x轴模糊。

代码语言:javascript
复制
import numpy as np

from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import squareform

import matplotlib.pyplot as plt


mat = np.array([[0.0, 2.0, 0.1], [2.0, 0.0, 2.0], [0.1, 2.0, 0.0]])
dists = squareform(mat)
linkage_matrix = linkage(dists, "single")
dendrogram(linkage_matrix, labels=["0", "1", "2"])
plt.title("test")
plt.show()

下面是脚本创建的情节:

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41416498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档