scipy.cluster.hierarchy:标签的顺序似乎不正确,并且被垂直轴的值弄糊涂了
scipy.cluster.hierarchy: labels seems not in the right order, and confused by the value of the vertical axes
我知道scipy.cluster.hierarchy专注于处理距离矩阵。但是现在我有一个相似矩阵......在我使用树状图绘制它之后,一些奇怪的事情发生了。
这是代码:
similarityMatrix = np.array(([1,0.75,0.75,0,0,0,0],
[0.75,1,1,0.25,0,0,0],
[0.75,1,1,0.25,0,0,0],
[0,0.25,0.25,1,0.25,0.25,0],
[0,0,0,0.25,1,1,0.75],
[0,0,0,0.25,1,1,0.75],
[0,0,0,0,0.75,0.75,1]))
这里是联动方法
Z_sim = sch.linkage(similarityMatrix)
plt.figure(1)
plt.title('similarity')
sch.dendrogram(
Z_sim,
labels=['1','2','3','4','5','6','7']
)
plt.show()
但这是结果:
我的问题是:
- 为什么这个树状图的标签不正确?
- 我给出了链接方法的相似度矩阵,但我无法完全理解垂直轴的含义。比如最大相似度为1,为什么纵轴的最大值几乎是1.6?
非常感谢您的帮助!
linkage
期望 "distances",而不是 "similarities"。要将矩阵转换为距离矩阵之类的东西,可以从 1:
中减去它
dist = 1 - similarityMatrix
linkage
不接受平方距离矩阵。它期望距离数据在 "condensed" form 中。你可以使用 scipy.spatial.distance.squareform
:
from scipy.spatial.distance import squareform
dist = 1 - similarityMatrix
condensed_dist = squareform(dist)
Z_sim = sch.linkage(condensed_dist)
(当你将形状为 (m, n) 的二维数组传递给 linkage
时,它将行视为 n 维 space 中的点,并在内部计算距离。 )
我知道scipy.cluster.hierarchy专注于处理距离矩阵。但是现在我有一个相似矩阵......在我使用树状图绘制它之后,一些奇怪的事情发生了。 这是代码:
similarityMatrix = np.array(([1,0.75,0.75,0,0,0,0],
[0.75,1,1,0.25,0,0,0],
[0.75,1,1,0.25,0,0,0],
[0,0.25,0.25,1,0.25,0.25,0],
[0,0,0,0.25,1,1,0.75],
[0,0,0,0.25,1,1,0.75],
[0,0,0,0,0.75,0.75,1]))
这里是联动方法
Z_sim = sch.linkage(similarityMatrix)
plt.figure(1)
plt.title('similarity')
sch.dendrogram(
Z_sim,
labels=['1','2','3','4','5','6','7']
)
plt.show()
但这是结果:
我的问题是:
- 为什么这个树状图的标签不正确?
- 我给出了链接方法的相似度矩阵,但我无法完全理解垂直轴的含义。比如最大相似度为1,为什么纵轴的最大值几乎是1.6?
非常感谢您的帮助!
中减去它linkage
期望 "distances",而不是 "similarities"。要将矩阵转换为距离矩阵之类的东西,可以从 1:dist = 1 - similarityMatrix
linkage
不接受平方距离矩阵。它期望距离数据在 "condensed" form 中。你可以使用scipy.spatial.distance.squareform
:from scipy.spatial.distance import squareform dist = 1 - similarityMatrix condensed_dist = squareform(dist) Z_sim = sch.linkage(condensed_dist)
(当你将形状为 (m, n) 的二维数组传递给
linkage
时,它将行视为 n 维 space 中的点,并在内部计算距离。 )