我知道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()
但结果如下:
我的问题是:
非常感谢你的帮助!
答案 0 :(得分:0)
linkage
期望"距离"而不是"相似性"。要将矩阵转换为距离矩阵,可以从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维空间中的点,并在内部计算距离。)