I took the data from [here][1] and wanted to play around with multidimensional scaling with this data. The data looks like this: [![enter image description here][2]][2] In particular, I want to plot the cities in a 2D space, and see how much it matches their real locations in a geographic map from just the information about how far they are from each other, without any explicit latitude and longitude information. This is my code: import pandas as pd import numpy as np from sklearn import manifold import matplotlib.pyplot as plt data = pd.read_csv("european_city_distances.csv", index_col='Cities') mds = manifold.MDS(n_components=2, dissimilarity="precomputed", random_state=6) results = mds.fit(data.values) cities = data.columns coords = results.embedding_ fig = plt.figure(figsize=(12,10)) plt.subplots_adjust(bottom = 0.1) plt.scatter(coords[:, 0], coords[:, 1]) for label, x, y in zip(cities, coords[:, 0], coords[:, 1]): plt.annotate( label, xy = (x, y), xytext = (-20, 20), textcoords = 'offset points' ) plt.show() [![enter image description here][3]][3] Most of the cities seem to be around the correct general location relative to each other, except a few infractions - Dublin is too far away from London, Istanbul is in the wrong location, etc. However, **if I give a different `random_state` value, it produces a different "map"**. For example, `random_state=1` produces the following map, where many of the cities do not seem to be around the correct general location relative to other cities: [![enter image description here][4]][4] What I don't understand is, dimensionality reduction methods are not supposed to have randomness associated with them, and thus should not give different results for different seeds. But it does here; so what does it mean? The documentation of the `sklearn.manifold.MDS` function states that `random_state` is "the generator used to initialize the centers". So, in particular, I guess what I'm asking is, whatever initialization of the centres we choose, shouldn't all of them lead to one unique result? ---------- I get a much more "accurate" map (to my eyes at least) by giving the following hyperparameter values: mds = manifold.MDS(n_components=2, dissimilarity="euclidean", n_init=100, max_iter=1000, random_state=1) [![enter image description here][5]][5] [1]: https://github.com/cheind/rmds/blob/master/examples/european_city_distances.csv [2]: https://i.sstatic.net/4RLgX.png [3]: https://i.sstatic.net/oAf0N.png [4]: https://i.sstatic.net/q0Efc.png [5]: https://i.sstatic.net/ca2Dx.png