From aea6462b81e42ee5ef582de6da353f8869642735 Mon Sep 17 00:00:00 2001 From: Josh Levy <levy.5674@gmail.com> Date: Mon, 16 Jan 2017 20:37:42 -0600 Subject: [PATCH] [MRG+1] Fixes #8198 - error in datasets.make_moons (#8199) --- doc/whats_new.rst | 4 ++++ sklearn/datasets/samples_generator.py | 4 ++-- sklearn/datasets/tests/test_samples_generator.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 34f82c30e9..a0e2509957 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -140,6 +140,10 @@ Enhancements Bug fixes ......... + - Fixed a bug where :func:`sklearn.datasets.make_moons` gives an + incorrect result when ``n_samples`` is odd. + :issue:`8198` by :user:`Josh Levy <levy5674>`. + - 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 <jmontoyam>` diff --git a/sklearn/datasets/samples_generator.py b/sklearn/datasets/samples_generator.py index 8321159c35..e7f61b3227 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) diff --git a/sklearn/datasets/tests/test_samples_generator.py b/sklearn/datasets/tests/test_samples_generator.py index 324df959bd..cd4d4148c0 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_friedman1 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,12 @@ 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): + 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") -- GitLab