【发布时间】:2017-05-15 22:49:08
【问题描述】:
我要比较三个矩阵。他们每个人都是5x6。我最初想使用层次聚类来对矩阵进行聚类,以便对最相似的矩阵进行分组,给定相似度阈值。
我在 python 中找不到任何这样的函数,所以我手动实现了距离测量,(p-norm where p=2)。现在我有一个 3x3 距离矩阵(我相信在这种情况下它也是一个相似度矩阵)。
我现在正在尝试生成树状图。这是我的代码,这就是问题所在。我想要生成一个图表(如果可能的话,一个树状图),显示最相似的矩阵簇。矩阵 0,1,2 中,0 和 2 相同,应先聚类在一起,1 不同。
距离矩阵如下所示:
> 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
代码:
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()
linkage(dist_mat, 'single') 是什么意思?我会假设输出图看起来像这样,0 和 1 之间的距离是 2.0(例如)。
有没有更好的方法来表示这些数据?是否有一个函数可以接收多个矩阵而不是点,来比较并形成一个距离矩阵,然后进行聚类?我对如何可视化这些矩阵之间的差异的其他建议持开放态度。
【问题讨论】:
-
这似乎是对的,意思是先把0和2类分组,然后把它们都和1分组。高度就是距离,由于(0,2)的簇有距离约为 3.4 一切正常
-
@JeD - 谢谢。有没有一个函数可以接受几个矩阵而不是点,比较并形成一个距离矩阵,然后聚类?
标签: python matrix scipy cluster-analysis dendrogram