From e009847c3c72afe9d545660e46859df7b7e38b81 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Fri, 13 Jan 2017 17:58:25 -0600 Subject: [PATCH 1/8] Fixes #8198 - error in datasets.make_moons --- sklearn/datasets/samples_generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/samples_generator.py b/sklearn/datasets/samples_generator.py index 8321159c35ed1..e7f61b3227331 100644 --- a/sklearn/datasets/samples_generator.py +++ b/sklearn/datasets/samples_generator.py @@ -665,8 +665,8 @@ def make_moons(n_samples=100, shuffle=True, noise=None, random_state=None): X = np.vstack((np.append(outer_circ_x, inner_circ_x), np.append(outer_circ_y, inner_circ_y))).T - y = np.hstack([np.zeros(n_samples_in, dtype=np.intp), - np.ones(n_samples_out, dtype=np.intp)]) + y = np.hstack([np.zeros(n_samples_out, dtype=np.intp), + np.ones(n_samples_in, dtype=np.intp)]) if shuffle: X, y = util_shuffle(X, y, random_state=generator) From d4efdb1d0d2ee6fc25fe7b19646e33e133b86a4e Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sat, 14 Jan 2017 10:26:19 -0600 Subject: [PATCH 2/8] Adding test for issue #8198 --- sklearn/datasets/tests/test_samples_generator.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index 324df959bd074..ce9cbb4ff9995 100644 --- a/sklearn/datasets/tests/test_samples_generator.py +++ b/sklearn/datasets/tests/test_samples_generator.py @@ -24,6 +24,7 @@ from sklearn.datasets import make_friedman2 from sklearn.datasets import make_friedman3 from sklearn.datasets import make_low_rank_matrix +from sklearn.datasets import make_moons from sklearn.datasets import make_sparse_coded_signal from sklearn.datasets import make_sparse_uncorrelated from sklearn.datasets import make_spd_matrix @@ -360,3 +361,11 @@ def test_make_checkerboard(): X2, _, _ = make_checkerboard(shape=(100, 100), n_clusters=2, shuffle=True, random_state=0) assert_array_equal(X1, X2) + +def test_make_moons(): + X, y = make_moons(3, shuffle=False) + for x, label in zip(X, y): + if label == 0: + assert_almost_equal((x ** 2).sum(), 1.0, err_msg="Point is labeled outside but isn't on unit circle centered at (0,0)") + else: + assert_almost_equal(((x - [1, 0.5]) ** 2).sum(), 1.0, err_msg="Point is labeled inside but isn't on unit circle centered at (1,0.5)") From a4ef2b7cd131915e536eebc3179d2ae1b4a7e2e8 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sat, 14 Jan 2017 12:13:10 -0600 Subject: [PATCH 3/8] fixing line too long errors in test_make_moons --- sklearn/datasets/tests/test_samples_generator.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index ce9cbb4ff9995..6d1b0561a7497 100644 --- a/sklearn/datasets/tests/test_samples_generator.py +++ b/sklearn/datasets/tests/test_samples_generator.py @@ -365,7 +365,7 @@ def test_make_checkerboard(): def test_make_moons(): X, y = make_moons(3, shuffle=False) for x, label in zip(X, y): - if label == 0: - assert_almost_equal((x ** 2).sum(), 1.0, err_msg="Point is labeled outside but isn't on unit circle centered at (0,0)") - else: - assert_almost_equal(((x - [1, 0.5]) ** 2).sum(), 1.0, err_msg="Point is labeled inside but isn't on unit circle centered at (1,0.5)") + center = [0.0, 0.0] if label == 0 else [1.0, 0.5] + dist_sqr = ((x - center) ** 2).sum() + assert_almost_equal(dist_sqr, 1.0, + err_msg="Point is not on expected unit circle") From 15616751b37f605aec3dc2a84b3e1116be59b607 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sat, 14 Jan 2017 13:29:03 -0600 Subject: [PATCH 4/8] fixing whitespace in test_make_moons --- sklearn/datasets/tests/test_samples_generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index 6d1b0561a7497..0a1e979f25e52 100644 --- a/sklearn/datasets/tests/test_samples_generator.py +++ b/sklearn/datasets/tests/test_samples_generator.py @@ -367,5 +367,5 @@ def test_make_moons(): for x, label in zip(X, y): center = [0.0, 0.0] if label == 0 else [1.0, 0.5] dist_sqr = ((x - center) ** 2).sum() - assert_almost_equal(dist_sqr, 1.0, - err_msg="Point is not on expected unit circle") + assert_almost_equal(dist_sqr, 1.0, + err_msg="Point is not on expected unit circle") From e46f2d8bf10cb8ab86b7993d50c54468790db80a Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sat, 14 Jan 2017 13:53:37 -0600 Subject: [PATCH 5/8] fixing indentation. now passes flake8 on my laptop --- sklearn/datasets/tests/test_samples_generator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index 0a1e979f25e52..00e97571db428 100644 --- a/sklearn/datasets/tests/test_samples_generator.py +++ b/sklearn/datasets/tests/test_samples_generator.py @@ -362,10 +362,11 @@ def test_make_checkerboard(): shuffle=True, random_state=0) assert_array_equal(X1, X2) + def test_make_moons(): X, y = make_moons(3, shuffle=False) for x, label in zip(X, y): center = [0.0, 0.0] if label == 0 else [1.0, 0.5] dist_sqr = ((x - center) ** 2).sum() assert_almost_equal(dist_sqr, 1.0, - err_msg="Point is not on expected unit circle") + err_msg="Point is not on expected unit circle") From 8d981b510d339d270189cdfa3b8adcfdb6191ff1 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sat, 14 Jan 2017 14:01:30 -0600 Subject: [PATCH 6/8] one more whitespace change --- sklearn/datasets/tests/test_samples_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index 00e97571db428..cd4d4148c07cc 100644 --- a/sklearn/datasets/tests/test_samples_generator.py +++ b/sklearn/datasets/tests/test_samples_generator.py @@ -369,4 +369,4 @@ def test_make_moons(): center = [0.0, 0.0] if label == 0 else [1.0, 0.5] dist_sqr = ((x - center) ** 2).sum() assert_almost_equal(dist_sqr, 1.0, - err_msg="Point is not on expected unit circle") + err_msg="Point is not on expected unit circle") From dbaf91b7a961554ba4ffabf80b69a1fa4471d53b Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Mon, 16 Jan 2017 11:33:48 -0600 Subject: [PATCH 7/8] added bug fix entry for #8198 --- doc/whats_new.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 34f82c30e981e..b4efed9a7bc32 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -140,6 +140,10 @@ Enhancements Bug fixes ......... + - Fixed a bug where :class:`sklearn.datasets.make_moons` gives an + incorrect result when ``n_samples`` is odd. + :issue:`8198` by :user:`Josh Levy `. + - Fixed a bug where :class:`sklearn.linear_model.LassoLars` does not give the same result as the LassoLars implementation available in R (lars library). :issue:`7849` by :user:`Jair Montoya Martinez ` From bb284ab71d6c74794a0eeeea90a73a479ecc2705 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Mon, 16 Jan 2017 12:45:32 -0600 Subject: [PATCH 8/8] in whats_new.rst I had mislabeled a function as a class --- doc/whats_new.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/whats_new.rst b/doc/whats_new.rst index b4efed9a7bc32..a0e2509957b3e 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -140,7 +140,7 @@ Enhancements Bug fixes ......... - - Fixed a bug where :class:`sklearn.datasets.make_moons` gives an + - Fixed a bug where :func:`sklearn.datasets.make_moons` gives an incorrect result when ``n_samples`` is odd. :issue:`8198` by :user:`Josh Levy `.