diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 34f82c30e981e4b4a17ebf3908b2f4e06703a17e..a0e2509957b3ede08265d9de20f9c2f3a11915d0 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 8321159c35ed1534fafca84a9863cf615faa777b..e7f61b3227331b396bafb13ffeddd3cad5960673 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 324df959bd0744b641362193b3a0547b586de7aa..cd4d4148c07cc2ea5367f7446e69b4658ac1743b 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")