我正在使用值在 0 和 1 之间的相似度矩阵(1 表示元素相等),并且我正在尝试使用 python 和 scikit-learn 绘制 MDS。
我找到了多个示例,但我不确定将什么作为 mds.fit() 的输入。
现在,我的数据看起来像这样(file.csv):
; A ; B ; C ; D ; E
A ; 1 ; 0.1 ; 0.2 ; 0.5 ; 0.2
B ; 0.1 ; 1 ; 0.3 ; 1 ; 0
C ; 0.2 ; 0.3 ; 1 ; 0.8 ; 0.6
D ; 0.5 ; 1 ; 0.8 ; 1 ; 0.2
E ; 0.2 ; 0 ; 0.6 ; 0.2 ; 1
我目前正在使用此代码:
import pandas
from sklearn import manifold
import matplotlib.pyplot as plt
data = pandas.read_table("file.csv", ";", header=0, index_col=0)
mds = manifold.MDS(n_components=2, random_state=1, dissimilarity="precomputed")
mds.fit(data)
points = mds.embedding_
# Prepare axes
ax = plt.axes([0,0,2,2])
ax.set_aspect(aspect='equal')
# Plot points
plt.scatter(points[:,0], points[:,1], color='silver', s=150)
# Add labels
for i in range(data.shape[0]):
ax.annotate(data.index[i], (points[i,0], points[i,1]), color='blue')
#plt.show() # Open display and show at screen
plt.savefig('out.png', format='png', bbox_inches='tight') # PNG
#plt.savefig('out.jpg', format='jpg', bbox_inches='tight') # JPG
我不确定 sklearn 在做什么。我阅读了很多示例,其中人们使用中间为 0(而不是 1)的“相异矩阵”。