scipy.spatial.distance.pdist返回压缩距离矩阵.从文档:
返回压缩距离矩阵Y.对于每个和(where),度量dist(u = X [i],v = X [j])被计算并存储在条目ij中.
我以为ij是的意思i*j.但我想我可能错了.考虑
X = array([[1,2], [1,2], [3,4]])
dist_matrix = pdist(X)
Run Code Online (Sandbox Code Playgroud)
然后文档说dist(X[0], X[2])应该是dist_matrix[0*2].但是,dist_matrix[0*2]它应该是0 - 而不是2.8.
我应该使用什么公式来获取两个向量的相似性,给定i和j?
我对这个模块(scipy.cluster.hierarchy)感到困惑......还有一些!
例如,我们有以下树形图:

我的问题是如何以一种漂亮的格式提取彩色子树(每个子树代表一个簇),比如SIF格式?现在获得上述情节的代码是:
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
scipy.randn(100,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
P =sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
T = sch.fcluster(Z, 0.5*d.max(), 'distance')
#array([4, 5, 3, 2, 2, 3, 5, 2, 2, 5, 2, 2, 2, 3, 2, 3, 2, 5, 4, 5, 2, 5, 2,
# 3, 3, 3, 1, 3, 4, 2, 2, 4, 2, 4, 3, 3, 2, 5, 5, 5, 3, 2, 2, 2, 5, 4,
# 2, 4, 2, 2, 5, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法,根据to_tree返回的ClusterNode来获取树状图中集群点的坐标。
使用 scipy 根据以下数据构建树状图:
X = data
Y = pdist(X)
Z = linkage(Y)
dend = dendrogram(Z)
rootnode, nodesList = to_tree(Z, rd=True)
Run Code Online (Sandbox Code Playgroud)
我想做的是构建一个函数,get_coords(somClusterNode)该函数将返回(x, y)指定图中节点位置的元组。
感谢这个答案,我设法弄清楚如何从树状图返回值中获取位置,例如:
i, d = list(zip(dend['icoord'], dend['dcoord']))[-1]
x = 0.5 * sum(i[1:3])
y = d[1]
plt.plot(x, y, 'ro')
Run Code Online (Sandbox Code Playgroud)
但我可以找出nodesList 排序和icoord/dcoord排序之间的关系,以便将一个映射到另一个。
你知道我可以在哪里寻找吗?
感谢您的帮助 !