मैं sklearn, पांडा और numpy के साथ बहुआयामी स्केलिंग की कोशिश कर रहा हूँ। उपयोग की जाने वाली डेटा फ़ाइल में 10 संख्यात्मक कॉलम हैं और कोई गुम मूल्य नहीं है। मैं sklearn.manifold के बहुआयामी स्केलिंग के साथ 2 आयामों में यह दस आयामी डेटा लेने के लिए और यह कल्पना करने के लिए इस प्रकार है कोशिश कर रहा हूँ:नकली, पांडो और स्केलेर्न (ValueError) में बहुआयामी स्केलिंग फिटिंग
import numpy as np
import pandas as pd
from sklearn import manifold
from sklearn.metrics import euclidean_distances
seed = np.random.RandomState(seed=3)
data = pd.read_csv('data/big-file.csv')
# start small dont take all the data,
# its about 200k records
subset = data[:10000]
similarities = euclidean_distances(subset)
mds = manifold.MDS(n_components=2, max_iter=3000, eps=1e-9,
random_state=seed, dissimilarity="precomputed", n_jobs=1)
pos = mds.fit(similarities).embedding_
लेकिन मैं यह मान त्रुटि मिलती है:
Traceback (most recent call last):
File "demo/mds-demo.py", line 18, in <module>
pos = mds.fit(similarities).embedding_
File "/Users/dwilliams/Desktop/Anaconda/lib/python2.7/site-packages/sklearn/manifold/mds.py", line 360, in fit
self.fit_transform(X, init=init)
File "/Users/dwilliams/Desktop/Anaconda/lib/python2.7/site-packages/sklearn/manifold/mds.py", line 395, in fit_transform
eps=self.eps, random_state=self.random_state)
File "/Users/dwilliams/Desktop/Anaconda/lib/python2.7/site-packages/sklearn/manifold/mds.py", line 242, in smacof
eps=eps, random_state=random_state)
File "/Users/dwilliams/Desktop/Anaconda/lib/python2.7/site-packages/sklearn/manifold/mds.py", line 73, in _smacof_single
raise ValueError("similarities must be symmetric")
ValueError: similarities must be symmetric
मैंने सोचा था कि euclidean_distances लौटे एक सममित मैट्रिक्स। मैं गलत क्या कर रहा हूं और मैं इसे कैसे ठीक करूं?
सबसे पहले देखें कि 'np.allclose (समानताएं हैं, similarites.T)' TRUE' है '। जब मैं इसे यादृच्छिक इनपुट के साथ कोशिश करता हूं तो यह काम करता है। क्या आप यादृच्छिक इनपुट के साथ कोशिश कर सकते हैं? –
'scipy.spatial.distance_matrix' का उपयोग करने का प्रयास करें? या यदि आप किसी भी तरह से यूक्लिडियन दूरी का उपयोग कर रहे हैं, तो आप sklearn को विषमता = "euclidean" का उपयोग करके गणना कर सकते हैं। –
मैं एक समान मुद्दे में भाग गया और मुझे 20 ('np.abs (समानताएं - समानताएं)।) ('Np.abs (समानताएं - समानताएं)। सैकड़ों द्वारा सहिष्णुता को गुणा करके sklearn/manifold/mds.py में L71 को पैच करना पड़ा। मेरे लिए <1e-13 की बजाय, इसलिए चेक बहुत कठोर था और यह असफल रहा। – jorgeca