Skip to content

Commit e3369c1

Browse files
committed
ENH slight improvement to mds speed, modified examples to not run mds that long.
1 parent 3e5f482 commit e3369c1

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

examples/manifold/plot_compare_methods.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@
8181

8282

8383
t0 = time()
84-
Y = manifold.MDS(n_components).fit_transform(euclidean_distances(X))
84+
mds = manifold.MDS(n_components, max_iter=100, n_init=1)
85+
Y = mds.fit_transform(euclidean_distances(X))
8586
t1 = time()
8687
print "MDS: %.2g sec" % (t1 - t0)
8788
ax = fig.add_subplot(247)

examples/manifold/plot_lle_digits.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def plot_embedding(X, title=None):
171171
#----------------------------------------------------------------------
172172
# MDS embedding of the digits dataset
173173
print "Computing MDS embedding"
174-
clf = manifold.MDS(n_components=2, n_init=2)
174+
clf = manifold.MDS(n_components=2, n_init=1, max_iter=100)
175175
t0 = time()
176176
X_mds = clf.fit_transform(euclidean_distances(X))
177177
print "Done. Stress: %f" % clf.stress_

sklearn/manifold/mds.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def _smacof_single(similarities, metric=True, n_components=2, init=None,
142142
if np.any((similarities - similarities.T) > eps):
143143
raise ValueError("similarities must be symmetric")
144144

145-
sim_flat = ((1 - np.tri(n_samples)) * similarities).flatten()
145+
sim_flat = ((1 - np.tri(n_samples)) * similarities).ravel()
146146
sim_flat_w = sim_flat[sim_flat != 0]
147147
if init is None:
148148
# Randomly choose initial configuration
@@ -164,7 +164,7 @@ def _smacof_single(similarities, metric=True, n_components=2, init=None,
164164
if metric:
165165
disparities = similarities
166166
else:
167-
dis_flat = dis.flatten()
167+
dis_flat = dis.ravel()
168168
# similarities with 0 are considered as missing values
169169
dis_flat_w = dis_flat[sim_flat != 0]
170170

@@ -178,12 +178,12 @@ def _smacof_single(similarities, metric=True, n_components=2, init=None,
178178
(disparities ** 2).sum())
179179

180180
# Compute stress
181-
stress = ((dis.flatten() - \
182-
disparities.flatten()) ** 2).sum() / 2
181+
stress = ((dis.ravel() - \
182+
disparities.ravel()) ** 2).sum() / 2
183183

184184
# Update X using the Guttman transform
185+
dis[dis == 0] = 1e-5
185186
ratio = disparities / dis
186-
ratio[np.isinf(ratio) | np.isnan(ratio)] = 0
187187
B = - ratio
188188
B[np.arange(len(B)), np.arange(len(B))] += ratio.sum(axis=1)
189189
X = 1. / n_samples * np.dot(B, X)

0 commit comments

Comments
 (0)