From f85e417b95757fa39fb431ff2929271e56710e4b Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Wed, 25 Aug 2021 21:41:26 -0300 Subject: [PATCH 1/7] Remove unused parameter from OneClassSVM fit method. --- sklearn/svm/_classes.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sklearn/svm/_classes.py b/sklearn/svm/_classes.py index 51f19beeca60e..4cb7c84c6311c 100644 --- a/sklearn/svm/_classes.py +++ b/sklearn/svm/_classes.py @@ -1543,7 +1543,7 @@ def __init__( random_state=None, ) - def fit(self, X, y=None, sample_weight=None, **params): + def fit(self, X, y=None, sample_weight=None): """Detect the soft boundary of the set of samples X. Parameters @@ -1559,9 +1559,6 @@ def fit(self, X, y=None, sample_weight=None, **params): Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points. - **params : dict - Additional fit parameters. - Returns ------- self : object @@ -1571,7 +1568,7 @@ def fit(self, X, y=None, sample_weight=None, **params): ----- If X is not a C-ordered contiguous array it is copied. """ - super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight, **params) + super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight) self.offset_ = -self._intercept_ return self From 4db790b65a64affc820268c038ea61f11c85a12d Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Sat, 4 Sep 2021 17:44:16 -0300 Subject: [PATCH 2/7] Deprecate params from OneClassSVM fit method. Co-authored-by: glemaitre --- sklearn/svm/_classes.py | 21 +++++++++++++++++++-- sklearn/svm/tests/test_svm.py | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/sklearn/svm/_classes.py b/sklearn/svm/_classes.py index 4cb7c84c6311c..3e16c2db6bb09 100644 --- a/sklearn/svm/_classes.py +++ b/sklearn/svm/_classes.py @@ -1,4 +1,5 @@ import numpy as np +import warnings from ._base import _fit_liblinear, BaseSVC, BaseLibSVM from ..base import BaseEstimator, RegressorMixin, OutlierMixin @@ -1543,7 +1544,7 @@ def __init__( random_state=None, ) - def fit(self, X, y=None, sample_weight=None): + def fit(self, X, y=None, sample_weight=None, **params): """Detect the soft boundary of the set of samples X. Parameters @@ -1559,6 +1560,13 @@ def fit(self, X, y=None, sample_weight=None): Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points. + **params : dict + Additional fit parameters. + + .. deprecated:: 1.0 + The fit method will not longer accept extra keyword + parameters in 1.2 since they are unused. + Returns ------- self : object @@ -1568,7 +1576,16 @@ def fit(self, X, y=None, sample_weight=None): ----- If X is not a C-ordered contiguous array it is copied. """ - super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight) + # TODO: Remove in v1.2 + if len(params) > 0: + warnings.warn( + "Passing additional keyword parameters has no effect and is " + "deprecated in 1.0. An error will be raised from 1.2 and " + "beyond. The ignored keyword parameter(s) are: " + f"{params.keys()}.", + FutureWarning, + ) + super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight, **params) self.offset_ = -self._intercept_ return self diff --git a/sklearn/svm/tests/test_svm.py b/sklearn/svm/tests/test_svm.py index 922408402690a..3ed402eab87e3 100644 --- a/sklearn/svm/tests/test_svm.py +++ b/sklearn/svm/tests/test_svm.py @@ -299,6 +299,22 @@ def test_oneclass_score_samples(): ) +# TODO: Remove in v1.2 +def test_oneclass_fit_params_is_deprecated(): + clf = svm.OneClassSVM() + params = { + "unused_param": "", + "extra_param": None, + } + msg = ( + "Passing additional keyword parameters has no effect and is deprecated " + "in 1.0. An error will be raised from 1.2 and beyond. The ignored " + f"keyword parameter(s) are: {params.keys()}." + ) + with pytest.warns(FutureWarning, match=msg): + clf.fit(X, **params) + + def test_tweak_params(): # Make sure some tweaking of parameters works. # We change clf.dual_coef_ at run time and expect .predict() to change From a7c714927fc3c97c3a7a9e7057b41cd4a33560d1 Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Sat, 4 Sep 2021 17:56:13 -0300 Subject: [PATCH 3/7] Escape the warning string to match --- sklearn/svm/_classes.py | 2 +- sklearn/svm/tests/test_svm.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/svm/_classes.py b/sklearn/svm/_classes.py index 64ed31878f45b..0720fc1237548 100644 --- a/sklearn/svm/_classes.py +++ b/sklearn/svm/_classes.py @@ -1627,7 +1627,7 @@ def fit(self, X, y=None, sample_weight=None, **params): f"{params.keys()}.", FutureWarning, ) - super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight, **params) + super().fit(X, np.ones(_num_samples(X)), sample_weight=sample_weight) self.offset_ = -self._intercept_ return self diff --git a/sklearn/svm/tests/test_svm.py b/sklearn/svm/tests/test_svm.py index 3ed402eab87e3..3933b6ca029e2 100644 --- a/sklearn/svm/tests/test_svm.py +++ b/sklearn/svm/tests/test_svm.py @@ -6,6 +6,7 @@ import numpy as np import itertools import pytest +import re from numpy.testing import assert_array_equal, assert_array_almost_equal from numpy.testing import assert_almost_equal @@ -311,7 +312,7 @@ def test_oneclass_fit_params_is_deprecated(): "in 1.0. An error will be raised from 1.2 and beyond. The ignored " f"keyword parameter(s) are: {params.keys()}." ) - with pytest.warns(FutureWarning, match=msg): + with pytest.warns(FutureWarning, match=re.escape(msg)): clf.fit(X, **params) From 56a6301ecfef8b63df149f69e6e1da50a3c55167 Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Sat, 4 Sep 2021 18:15:13 -0300 Subject: [PATCH 4/7] Add what's new entry --- doc/whats_new/v1.0.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/whats_new/v1.0.rst b/doc/whats_new/v1.0.rst index 5e313f6d2752e..20a1d5bcab62f 100644 --- a/doc/whats_new/v1.0.rst +++ b/doc/whats_new/v1.0.rst @@ -792,6 +792,13 @@ Changelog `n_features_in_` and will be removed in 1.2. :pr:`20240` by :user:`Jérémie du Boisberranger `. +:mod:`sklearn.svm` +................... + +- |API| The parameter `params` of :func:`svm.OneClassSVM.fit` is + deprecated and will be removed in 1.2. + :pr:`20843` by :user:`Juan Martín Loyola `. + :mod:`sklearn.tree` ................... From 40ef06721582f1f4ca8e2597cf504943cb44d4d6 Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Mon, 6 Sep 2021 08:28:58 -0300 Subject: [PATCH 5/7] Update sklearn/svm/_classes.py Co-authored-by: Guillaume Lemaitre --- sklearn/svm/_classes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/svm/_classes.py b/sklearn/svm/_classes.py index 0720fc1237548..d6ee33a87b72e 100644 --- a/sklearn/svm/_classes.py +++ b/sklearn/svm/_classes.py @@ -1606,7 +1606,7 @@ def fit(self, X, y=None, sample_weight=None, **params): Additional fit parameters. .. deprecated:: 1.0 - The fit method will not longer accept extra keyword + The `fit` method will not longer accept extra keyword parameters in 1.2 since they are unused. Returns From 5c1e272f3130af667c7d5f6b713f15be7f5c526d Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Mon, 6 Sep 2021 08:29:21 -0300 Subject: [PATCH 6/7] Update sklearn/svm/_classes.py Co-authored-by: Guillaume Lemaitre --- sklearn/svm/_classes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/svm/_classes.py b/sklearn/svm/_classes.py index d6ee33a87b72e..719540cd725c0 100644 --- a/sklearn/svm/_classes.py +++ b/sklearn/svm/_classes.py @@ -1607,7 +1607,8 @@ def fit(self, X, y=None, sample_weight=None, **params): .. deprecated:: 1.0 The `fit` method will not longer accept extra keyword - parameters in 1.2 since they are unused. + parameters in 1.2. These keyword parameters were + already discarded. Returns ------- From ba6f55bd2c27caab1b58bb335cb90c012b28eeed Mon Sep 17 00:00:00 2001 From: Juan Martin Loyola Date: Mon, 6 Sep 2021 08:29:39 -0300 Subject: [PATCH 7/7] Update doc/whats_new/v1.0.rst Co-authored-by: Guillaume Lemaitre --- doc/whats_new/v1.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/whats_new/v1.0.rst b/doc/whats_new/v1.0.rst index 20a1d5bcab62f..34b94e5025115 100644 --- a/doc/whats_new/v1.0.rst +++ b/doc/whats_new/v1.0.rst @@ -795,7 +795,7 @@ Changelog :mod:`sklearn.svm` ................... -- |API| The parameter `params` of :func:`svm.OneClassSVM.fit` is +- |API| The parameter `**params` of :func:`svm.OneClassSVM.fit` is deprecated and will be removed in 1.2. :pr:`20843` by :user:`Juan Martín Loyola `.