我已经计算了距离矩阵,我正在尝试两种方法来对其进行可视化。 这是我的距离矩阵:
delta =
[[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]
[ 0.71370845 0. 0.99583115 1. 0.79563006 0.71370845
0.71370845]
[ 0.80903791 0.99583115 0. 0.90029133 0.81180111 0.80903791
0.80903791]
[ 0.82955157 1. 0.90029133 0. 0.97468433 0.82955157
0.82955157]
[ 0.56964983 0.79563006 0.81180111 0.97468433 0. 0.56964983
0.56964983]
[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]
[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]]
考虑从 1 到 7 的标签, 1 非常接近 6 和 7 < / strong>和更远的形式 4 。
起初我尝试使用tSNE降维:
from sklearn.preprocessing import normalize
from sklearn import manifold
from matplotlib import pyplot as plt
from matplotlib.lines import Line2D
import numpy
model = manifold.TSNE(n_components=2, random_state=0, metric='precomputed')
coords = model.fit_transform(delta)
cmap = plt.get_cmap('Set1')
colors = [cmap(i) for i in numpy.linspace(0, 1, simulations)]
plt.figure(figsize=(7, 7))
plt.scatter(coords[:, 0], coords[:, 1], marker='o', c=colors, s=50, edgecolor='None')
markers = []
labels = [str(n+1) for n in range(simulations)]
for i in range(simulations):
markers.append(Line2D([0], [0], linestyle='None', marker="o", markersize=10, markeredgecolor="none", markerfacecolor=colors[i]))
lgd = plt.legend(markers, labels, numpoints=1, bbox_to_anchor=(1.17, 0.5))
plt.tight_layout()
plt.axis('equal')
plt.show()
这会产生这个情节:
我们可以看到,这不会显示 1 接近 6 和 7 。相反,它最接近 4 。
然后,不确定减少是否在某些局部最小值处停止,我试图绘制图表:
将networkx导入为nx
plt.figure(figsize=(7, 7))
dt = [('len', float)]
A = delta
A = A.view(dt)
G = nx.from_numpy_matrix(A)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_color=colors, node_size=50)
lgd = plt.legend(markers, labels, numpoints=1, bbox_to_anchor=(1.17, 0.5))
plt.tight_layout()
plt.axis('equal')
plt.show()
可以看出,同样的情况也会发生。如果我不断重复这种最新方法,我最终会得到不同类型的图表:
在这里,我更接近我的期望。但是,任何这些行为似乎都是对的。无论图表的初始化有多么不同,都应该遵守距离。
所以,我想知道我缺少什么来实现这个距离矩阵的良好表示。
感谢。