From ee8fe8880464723e74c2f11a958a988284cf17b2 Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Thu, 31 May 2018 00:19:22 +0530 Subject: [PATCH 1/6] adapting tolerance value according to data type in mainfold MDS --- sklearn/manifold/mds.py | 10 +++++++++- sklearn/manifold/tests/test_mds.py | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sklearn/manifold/mds.py b/sklearn/manifold/mds.py index 3890c4e40bffb..07703bbd5657d 100644 --- a/sklearn/manifold/mds.py +++ b/sklearn/manifold/mds.py @@ -67,7 +67,15 @@ def _smacof_single(dissimilarities, metric=True, n_components=2, init=None, n_iter : int The number of iterations corresponding to the best stress. """ - dissimilarities = check_symmetric(dissimilarities, raise_exception=True) + if dissimilarities.dtype == np.float16: + _tol = 1E-2 + elif dissimilarities.dtype == np.float32: + _tol = 1E-4 + else: + _tol = 1E-10 + + dissimilarities = check_symmetric(dissimilarities, tol=_tol, + raise_exception=True) n_samples = dissimilarities.shape[0] random_state = check_random_state(random_state) diff --git a/sklearn/manifold/tests/test_mds.py b/sklearn/manifold/tests/test_mds.py index 7b432dea1370e..7607f95f7f0a3 100644 --- a/sklearn/manifold/tests/test_mds.py +++ b/sklearn/manifold/tests/test_mds.py @@ -59,3 +59,10 @@ def test_MDS(): [4, 2, 1, 0]]) mds_clf = mds.MDS(metric=False, n_jobs=3, dissimilarity="precomputed") mds_clf.fit(sim) + + # Test to check the adaptive tol value + mat = np.random.rand(1000, 2).astype(np.float32) + mds.MDS().fit_transform(mat) + + mat = np.random.rand(1000, 2).astype(np.float16) + mds.MDS().fit_transform(mat) From 3f54c586daabf78f47bf705bfd168976901e6bd8 Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Fri, 1 Jun 2018 20:47:29 +0530 Subject: [PATCH 2/6] Coverage Changes --- sklearn/manifold/tests/test_mds.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/manifold/tests/test_mds.py b/sklearn/manifold/tests/test_mds.py index 7607f95f7f0a3..bdc83196575ae 100644 --- a/sklearn/manifold/tests/test_mds.py +++ b/sklearn/manifold/tests/test_mds.py @@ -64,5 +64,5 @@ def test_MDS(): mat = np.random.rand(1000, 2).astype(np.float32) mds.MDS().fit_transform(mat) - mat = np.random.rand(1000, 2).astype(np.float16) - mds.MDS().fit_transform(mat) + _mat = mat.astype(np.float16) + mds.MDS().fit_transform(_mat) From 69f85709fe3294d0e14f3c9e71c3065ad82df31e Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Sat, 2 Jun 2018 10:29:58 +0530 Subject: [PATCH 3/6] Set tolerance value to the eps of dtype --- sklearn/manifold/mds.py | 7 +------ sklearn/manifold/tests/test_mds.py | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/sklearn/manifold/mds.py b/sklearn/manifold/mds.py index 07703bbd5657d..34c28a244ff64 100644 --- a/sklearn/manifold/mds.py +++ b/sklearn/manifold/mds.py @@ -67,12 +67,7 @@ def _smacof_single(dissimilarities, metric=True, n_components=2, init=None, n_iter : int The number of iterations corresponding to the best stress. """ - if dissimilarities.dtype == np.float16: - _tol = 1E-2 - elif dissimilarities.dtype == np.float32: - _tol = 1E-4 - else: - _tol = 1E-10 + _tol = np.finfo(dissimilarities.dtype).eps dissimilarities = check_symmetric(dissimilarities, tol=_tol, raise_exception=True) diff --git a/sklearn/manifold/tests/test_mds.py b/sklearn/manifold/tests/test_mds.py index bdc83196575ae..5998ecb1e68c4 100644 --- a/sklearn/manifold/tests/test_mds.py +++ b/sklearn/manifold/tests/test_mds.py @@ -64,5 +64,5 @@ def test_MDS(): mat = np.random.rand(1000, 2).astype(np.float32) mds.MDS().fit_transform(mat) - _mat = mat.astype(np.float16) + _mat = np.float16(mat) mds.MDS().fit_transform(_mat) From a8aca7c0f9300adb1918c9fc67527ced3bae6c02 Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Sat, 2 Jun 2018 11:11:08 +0530 Subject: [PATCH 4/6] Set tolerance value to the eps of dtype --- sklearn/manifold/mds.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sklearn/manifold/mds.py b/sklearn/manifold/mds.py index 34c28a244ff64..642928d8c8b14 100644 --- a/sklearn/manifold/mds.py +++ b/sklearn/manifold/mds.py @@ -67,7 +67,10 @@ def _smacof_single(dissimilarities, metric=True, n_components=2, init=None, n_iter : int The number of iterations corresponding to the best stress. """ - _tol = np.finfo(dissimilarities.dtype).eps + if dissimilarities.dtype is np.float16 or np.float32: + _tol = np.finfo(dissimilarities.dtype).eps + else: + _tol = 1E-10 dissimilarities = check_symmetric(dissimilarities, tol=_tol, raise_exception=True) From aeb95a0fa2b2fbf28a36bb348b34ebdc4df9df55 Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Sat, 2 Jun 2018 12:41:12 +0530 Subject: [PATCH 5/6] Set tolerance value to the eps of float dtype --- sklearn/manifold/mds.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/manifold/mds.py b/sklearn/manifold/mds.py index 642928d8c8b14..5b871efac3a68 100644 --- a/sklearn/manifold/mds.py +++ b/sklearn/manifold/mds.py @@ -67,7 +67,8 @@ def _smacof_single(dissimilarities, metric=True, n_components=2, init=None, n_iter : int The number of iterations corresponding to the best stress. """ - if dissimilarities.dtype is np.float16 or np.float32: + if dissimilarities.dtype is np.float16 \ + or dissimilarities.dtype is np.float32: _tol = np.finfo(dissimilarities.dtype).eps else: _tol = 1E-10 From 37965f090ebb014388973f34729c6386ebf064a4 Mon Sep 17 00:00:00 2001 From: Urvang Patel Date: Sat, 2 Jun 2018 17:17:10 +0530 Subject: [PATCH 6/6] Fixes test --- sklearn/manifold/mds.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/manifold/mds.py b/sklearn/manifold/mds.py index 5b871efac3a68..c58cdac9bdf22 100644 --- a/sklearn/manifold/mds.py +++ b/sklearn/manifold/mds.py @@ -67,8 +67,8 @@ def _smacof_single(dissimilarities, metric=True, n_components=2, init=None, n_iter : int The number of iterations corresponding to the best stress. """ - if dissimilarities.dtype is np.float16 \ - or dissimilarities.dtype is np.float32: + if dissimilarities.dtype == np.float16 \ + or dissimilarities.dtype == np.float32: _tol = np.finfo(dissimilarities.dtype).eps else: _tol = 1E-10