10000 DEP Deprecates 'normalize' in _bayes.py (#17746) · scikit-learn/scikit-learn@a45c0c9 · GitHub
[go: up one dir, main page]

Skip to content

Commit a45c0c9

Browse files
authored
DEP Deprecates 'normalize' in _bayes.py (#17746)
1 parent 23032e7 commit a45c0c9

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

doc/whats_new/v1.0.rst

Lines changed: 2 additions & 0 deletions
Original 8000 file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ Changelog
269269
Ridge, RidgeClassifier, RidgeCV or RidgeClassifierCV were deprecated in:
270270
:pr:`17772` by :user:`Maria Telenczuk <maikia>` and
271271
:user:`Alexandre Gramfort <agramfort>`.
272+
BayesianRidge, ARDRegression were deprecated in:
273+
:pr:`17746` by :user:`Maria Telenczuk <maikia>`.
272274

273275
- |Fix|: `sample_weight` are now fully taken into account in linear models
274276
when `normalize=True` for both feature centering and feature

sklearn/linear_model/_bayes.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from ._base import LinearModel, _rescale_data
1313
from ..base import RegressorMixin
14+
from ._base import _deprecate_normalize
1415
from ..utils.extmath import fast_logdet
1516
from scipy.linalg import pinvh
1617
from ..utils.validation import _check_sample_weight
@@ -84,6 +85,10 @@ class BayesianRidge(RegressorMixin, LinearModel):
8485
:class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
8586
on an estimator with ``normalize=False``.
8687
88+
.. deprecated:: 1.0
89+
``normalize`` was deprecated in version 1.0 and will be removed in
90+
1.2.
91+
8792
copy_X : bool, default=True
8893
If True, X will be copied; else, it may be overwritten.
8994
@@ -158,7 +163,7 @@ class BayesianRidge(RegressorMixin, LinearModel):
158163
def __init__(self, *, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
159164
lambda_1=1.e-6, lambda_2=1.e-6, alpha_init=None,
160165
lambda_init=None, compute_score=False, fit_intercept=True,
161-
normalize=False, copy_X=True, verbose=False):
166+
normalize='deprecated', copy_X=True, verbose=False):
162167
self.n_iter = n_iter
163168
self.tol = tol
164169
self.alpha_1 = alpha_1
@@ -193,6 +198,10 @@ def fit(self, X, y, sample_weight=None):
193198
-------
194199
self : returns an instance of self.
195200
"""
201+
self._normalize = _deprecate_normalize(
202+
self.normalize, default=False,
203+
estimator_name=self.__class__.__name__
204+
)
196205

197206
if self.n_iter < 1:
198207
raise ValueError('n_iter should be greater than or equal to 1.'
@@ -205,7 +214,7 @@ def fit(self, X, y, sample_weight=None):
205214
dtype=X.dtype)
206215

207216
X, y, X_offset_, y_offset_, X_scale_ = self._preprocess_data(
208-
X, y, self.fit_intercept, self.normalize, self.copy_X,
217+
X, y, self.fit_intercept, self._normalize, self.copy_X,
209218
sample_weight=sample_weight)
210219

211220
if sample_weight is not None:
@@ -325,7 +334,7 @@ def predict(self, X, return_std=False):
325334
if return_std is False:
326335
return y_mean
327336
else:
328-
if self.normalize:
337+
if self._normalize:
329338
X = (X - self.X_offset_) / self.X_scale_
330339
sigmas_squared_data = (np.dot(X, self.sigma_) * X).sum(axis=1)
331340
y_std = np.sqrt(sigmas_squared_data + (1. / self.alpha_))
@@ -445,6 +454,10 @@ class ARDRegression(RegressorMixin, LinearModel):
445454
:class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
446455
on an estimator with ``normalize=False``.
447456
457+
.. deprecated:: 1.0
458+
``normalize`` was deprecated in version 1.0 and will be removed in
459+
1.2.
460+
448461
copy_X : bool, default=True
449462
If True, X will be copied; else, it may be overwritten.
450463
@@ -510,8 +523,8 @@ class ARDRegression(RegressorMixin, LinearModel):
510523
@_deprecate_positional_args
511524
def __init__(self, *, n_iter=300, tol=1.e-3, alpha_1=1.e-6, alpha_2=1.e-6,
512525
lambda_1=1.e-6, lambda_2=1.e-6, compute_score=False,
513-
threshold_lambda=1.e+4, fit_intercept=True, normalize=False,
514-
copy_X=True, verbose=False):
526+
threshold_lambda=1.e+4, fit_intercept=True,
527+
normalize='deprecated', copy_X=True, verbose=False):
515528
self.n_iter = n_iter
516529
self.tol = tol
517530
self.fit_intercept = fit_intercept
@@ -543,14 +556,19 @@ def fit(self, X, y):
543556
-------
544557
self : returns an instance of self.
545558
"""
559+
self._normalize = _deprecate_normalize(
560+
self.normalize, default=False,
561+
estimator_name=self.__class__.__name__
562+
)
563+
546564
X, y = self._validate_data(X, y, dtype=np.float64, y_numeric=True,
547565
ensure_min_samples=2)
548566

549567
n_samples, n_features = X.shape
550568
coef_ = np.zeros(n_features)
551569

552570
X, y, X_offset_, y_offset_, X_scale_ = self._preprocess_data(
553-
X, y, self.fit_intercept, self.normalize, self.copy_X)
571+
X, y, self.fit_intercept, self._normalize, self.copy_X)
554572
555573
self.X_offset_ = X_offset_
556574
self.X_scale_ = X_scale_
@@ -686,7 +704,7 @@ def predict(self, X, return_std=False):
686704
if return_std is False:
687705
return y_mean
688706
else:
689-
if self.normalize:
707+
if self._normalize:
690708
X = (X - self.X_offset_) / self.X_scale_
691709
X = X[:, self.lambda_ < self.threshold_lambda]
692710
sigmas_squared_data = (np.dot(X, self.sigma_) * X).sum(axis=1)

sklearn/linear_model/tests/test_bayes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,8 @@ def test_update_sigma(seed):
274274
np.testing.assert_allclose(sigma, sigma_woodbury)
275275

276276

277+
# FIXME: 'normalize' to be removed in 1.2 in LinearRegression
278+
@pytest.mark.filterwarnings("ignore:'normalize' was deprecated")
277279
def test_ard_regression_predict_normalize_true():
278280
"""Check that we can predict with `normalize=True` and `return_std=True`.
279281
Non-regression test for:

sklearn/linear_model/tests/test_common.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from sklearn.linear_model import RidgeCV
1313
from sklearn.linear_model import RidgeClassifier
1414
from sklearn.linear_model import RidgeClassifierCV
15+
from sklearn.linear_model import BayesianRidge
16+
from sklearn.linear_model import ARDRegression
1517

1618
from sklearn.utils import check_random_state
1719

@@ -24,7 +26,8 @@
2426
)
2527
@pytest.mark.parametrize(
2628
"estimator",
27-
[LinearRegression, Ridge, RidgeCV, RidgeClassifier, RidgeClassifierCV]
29+
[LinearRegression, Ridge, RidgeCV, RidgeClassifier, RidgeClassifierCV,
30+
BayesianRidge, ARDRegression]
2831
)
2932
# FIXME remove test in 1.2
3033
def test_linear_model_normalize_deprecation_message(

0 commit comments

Comments
 (0)
0