为什么不从SciKit学习工作的非度量MDS?

问题描述

我试图用scikit学习的多维尺度再现3D空间中的一个点集从距离图。在这个例子中的情况下,我想恢复一个简单的正弦波。我的代码如下:

import numpy as np
from scipy.spatial import distance_matrix
from sklearn.manifold import mds
import pylab

coords = np.array([[x,np.sin(x),0] for x in range(0,20)])
D = distance_matrix(coords,coords)

pylab.matshow(D,cmap="viridis_r")
pylab.colorbar()
pylab.show()

random_state = np.random.RandomState(seed=1238)
mds = mds(metric=True,n_components=3,max_iter=1000,eps=1e-9,random_state=random_state,dissimilarity="precomputed")
coords_rec = mds.fit(D).embedding_

my_plotting_function(coords,coords_rec)

此产生几乎完美的恢复:

enter image description here

在现实生活中我希望我的距离图件被损坏或丢失,所以我想换成用零这些值和执行非度量mds。这是通过开关实现metric=Falsemds构造。

不幸的是,如果使用这个开关(离开距离矩阵不变现在)此恢复不工作在所有:

enter image description here

为什么不能点来使用这种方法回收的?非度量是mds错误方法完成这个任务或者是有什么毛病sklearn实现/我的设置?

在此先感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)