我正在使用一个值介于0和1之间的相似性矩阵(1意味着元素相等),并尝试用python和scikit绘制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)
我与XLSTAT(一个excel扩展)做了一个比较,以尝试很多场景,并比较如何做什么
第一:我的输入矩阵是一个“相似性”矩阵,因为我可以把它解释为:“a和a是100%相等的”。 由于MDS将相异矩阵作为输入,因此我必须应用转换
相似到不同-简单.awk
可以使用以下命令调用它:
如果对角线不包含相同的值(我看到了there一个共现矩阵…它应该应用于他的CA),那么这种方法似乎是完全适合的。 在我的例子中,由于对角线总是满1,我将其减少为:
因此,进行此转换的AWK程序(由于我的数据,我实现了简化的程序)是:
相似到不相似性复合体.awk
您可以使用以下命令调用它:
当我使用Kruskal的应力来检查哪个版本更好时…在我的例子中,简单的相似性与不相似性(1-单元格)是最好的(我将应力保持在0,34和0,32之间…这是不好的…其中复合体显示的值大于0,34,这更糟)
相关问题 更多 >
编程相关推荐