擅长:python、mysql、java
<p>我遇到了同样的问题;结果发现,我的数据是一个<code>np.float32</code>数组,浮点精度降低导致距离矩阵不对称。在运行MDS之前,我将数据转换为<code>np.float64</code>来解决这个问题。</p>
<p>下面是一个使用随机数据来说明问题的示例:</p>
<pre><code>import numpy as np
from sklearn.manifold import MDS
from sklearn.metrics import euclidean_distances
from sklearn.datasets import make_classification
data, labels = make_classification()
mds = MDS(n_components=2)
similarities = euclidean_distances(data.astype(np.float64))
print np.abs(similarities - similarities.T).max()
# Prints 1.7763568394e-15
mds.fit(data.astype(np.float64))
# Succeeds
similarities = euclidean_distances(data.astype(np.float32))
print np.abs(similarities - similarities.T).max()
# Prints 9.53674e-07
mds.fit(data.astype(np.float32))
# Fails with "ValueError: similarities must be symmetric"
</code></pre>