diff --git a/doc/whats_new/v0.6.rst b/doc/whats_new/v0.6.rst index 223f68551..bb6c97196 100644 --- a/doc/whats_new/v0.6.rst +++ b/doc/whats_new/v0.6.rst @@ -81,7 +81,7 @@ Enhancement :class:`imblearn.over_sampling.KMeansSMOTE`, :class:`imblearn.over_sampling.SMOTENC` is now vectorize with giving an additional speed-up when `X` in sparse. - :pr:`596` by :user:`Matt Edding `. + :pr:`596` by :user:`Matt Eding `. Deprecation ........... diff --git a/imblearn/under_sampling/_prototype_selection/_edited_nearest_neighbours.py b/imblearn/under_sampling/_prototype_selection/_edited_nearest_neighbours.py index 162287032..41d62c622 100644 --- a/imblearn/under_sampling/_prototype_selection/_edited_nearest_neighbours.py +++ b/imblearn/under_sampling/_prototype_selection/_edited_nearest_neighbours.py @@ -202,6 +202,11 @@ class RepeatedEditedNearestNeighbours(BaseCleaningSampler): .. versionadded:: 0.4 + n_iter_ : int + Number of iterations run. + + .. versionadded:: 0.6 + See Also -------- CondensedNearestNeighbour : Undersample by condensing samples. @@ -325,6 +330,7 @@ def _fit_resample(self, X, y): ] break + self.n_iter_ = n_iter + 1 X_resampled, y_resampled = X_, y_ return X_resampled, y_resampled diff --git a/imblearn/under_sampling/_prototype_selection/tests/test_repeated_edited_nearest_neighbours.py b/imblearn/under_sampling/_prototype_selection/tests/test_repeated_edited_nearest_neighbours.py index 432a57300..209ebb2b3 100644 --- a/imblearn/under_sampling/_prototype_selection/tests/test_repeated_edited_nearest_neighbours.py +++ b/imblearn/under_sampling/_prototype_selection/tests/test_repeated_edited_nearest_neighbours.py @@ -182,6 +182,7 @@ def test_renn_fit_resample(): ) assert_array_equal(X_resampled, X_gt) assert_array_equal(y_resampled, y_gt) + assert 0 < renn.n_iter_ <= renn.max_iter def test_renn_fit_resample_mode_object(): @@ -266,6 +267,7 @@ def test_renn_fit_resample_mode_object(): ) assert_array_equal(X_resampled, X_gt) assert_array_equal(y_resampled, y_gt) + assert 0 < renn.n_iter_ <= renn.max_iter def test_renn_fit_resample_mode(): @@ -351,6 +353,7 @@ def test_renn_fit_resample_mode(): ) assert_array_equal(X_resampled, X_gt) assert_array_equal(y_resampled, y_gt) + assert 0 < renn.n_iter_ <= renn.max_iter def test_renn_not_good_object(): @@ -358,3 +361,16 @@ def test_renn_not_good_object(): renn = RepeatedEditedNearestNeighbours(n_neighbors=nn, kind_sel="mode") with pytest.raises(ValueError): renn.fit_resample(X, Y) + + +@pytest.mark.parametrize( + "max_iter, n_iter", + [ + (2, 2), + (5, 3), + ], +) +def test_renn_iter_attribute(max_iter, n_iter): + renn = RepeatedEditedNearestNeighbours(max_iter=max_iter) + renn.fit_resample(X, Y) + assert renn.n_iter_ == n_iter