1717from scipy import sparse
1818from scipy .sparse import linalg as sp_linalg
1919
20- from ._base import LinearClassifierMixin , LinearModel , _rescale_data
20+ from ._base import LinearClassifierMixin , LinearModel
21+ from ._base import _deprecate_normalize , _rescale_data
2122from ._sag import sag_solver
2223from ..base import RegressorMixin , MultiOutputMixin , is_classifier
2324from ..utils .extmath import safe_sparse_dot
@@ -521,9 +522,9 @@ def _ridge_regression(X, y, alpha, sample_weight=None, solver='auto',
521522class _BaseRidge (LinearModel , metaclass = ABCMeta ):
522523 @abstractmethod
523524 @_deprecate_positional_args
524- def __init__ (self , alpha = 1.0 , * , fit_intercept = True , normalize = False ,
525- copy_X = True , max_iter = None , tol = 1e-3 , solver = "auto" ,
526- random_state = None ):
525+ def __init__ (self , alpha = 1.0 , * , fit_intercept = True ,
526+ normalize = 'deprecated' , copy_X = True , max_iter = None , tol = 1e-3 ,
527+ solver = "auto" , random_state = None ):
527528 self .alpha = alpha
528529 self .fit_intercept = fit_intercept
529530 self .normalize = normalize
@@ -535,7 +536,11 @@ def __init__(self, alpha=1.0, *, fit_intercept=True, normalize=False,
535536
536537 def fit (self , X , y , sample_weight = None ):
537538
538- # all other solvers work at both float precision levels
539+ self ._normalize = _deprecate_normalize (
540+ self .normalize , default = False ,
541+ estimator_name = self .__class__ .__name__
542+ )
543+
539544 _dtype = [np .float64 , np .float32 ]
540545 _accept_sparse = _get_valid_accept_sparse (sparse .issparse (X ),
541546 self .solver )
@@ -570,7 +575,7 @@ def fit(self, X, y, sample_weight=None):
570575
571576 # when X is sparse we only remove offset from y
572577 X , y , X_offset , y_offset , X_scale = self ._preprocess_data (
573- X , y , self .fit_intercept , self .normalize , self .copy_X ,
578+ X , y , self .fit_intercept , self ._normalize , self .copy_X ,
574579 sample_weight = sample_weight , return_mean = True )
575580
576581 if solver == 'sag' and sparse .issparse (X ) and self .fit_intercept :
@@ -640,6 +645,10 @@ class Ridge(MultiOutputMixin, RegressorMixin, _BaseRidge):
640645 :class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
641646 on an estimator with ``normalize=False``.
642647
648+ .. deprecated:: 1.0
649+ ``normalize`` was deprecated in version 1.0 and
650+ will be removed in 1.2.
651+
643652 copy_X : bool, default=True
644653 If True, X will be copied; else, it may be overwritten.
645654
@@ -731,9 +740,9 @@ class Ridge(MultiOutputMixin, RegressorMixin, _BaseRidge):
731740 Ridge()
732741 """
733742 @_deprecate_positional_args
734- def __init__ (self , alpha = 1.0 , * , fit_intercept = True , normalize = False ,
735- copy_X = True , max_iter = None , tol = 1e-3 , solver = "auto" ,
736- random_state = None ):
743+ def __init__ (self , alpha = 1.0 , * , fit_intercept = True ,
744+ normalize = 'deprecated' , copy_X = True , max_iter = None , tol = 1e-3 ,
745+ solver = "auto" , random_state = None ):
737746 super ().__init__ (
738747 alpha = alpha , fit_intercept = fit_intercept ,
739748 normalize = normalize , copy_X = copy_X ,
@@ -794,6 +803,10 @@ class RidgeClassifier(LinearClassifierMixin, _BaseRidge):
794803 :class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
795804 on an estimator with ``normalize=False``.
796805
806+ .. deprecated:: 1.0
807+ ``normalize`` was deprecated in version 1.0 and
808+ will be removed in 1.2.
809+
797810 copy_X : bool, default=True
798811 If True, X will be copied; else, it may be overwritten.
799812
@@ -889,9 +902,10 @@ class RidgeClassifier(LinearClassifierMixin, _BaseRidge):
889902 0.9595...
890903 """
891904 @_deprecate_positional_args
892- def __init__ (self , alpha = 1.0 , * , fit_intercept = True , normalize = False ,
893- copy_X = True , max_iter = None , tol = 1e-3 , class_weight = None ,
894- solver = "auto" , random_state = None ):
905+ def __init__ (self , alpha = 1.0 , * , fit_intercept = True ,
906+ normalize = 'deprecated' , copy_X = True , max_iter = None ,
907+ tol = 1e-3 , class_weight = None , solver = "auto" ,
908+ random_state = None ):
895909 super ().__init__ (
896910 alpha = alpha , fit_intercept = fit_intercept , normalize = normalize ,
897911 copy_X = copy_X , max_iter = max_iter , tol = tol , solver = solver ,
@@ -1115,7 +1129,7 @@ class _RidgeGCV(LinearModel):
11151129 """
11161130 @_deprecate_positional_args
11171131 def __init__ (self , alphas = (0.1 , 1.0 , 10.0 ), * ,
1118- fit_intercept = True , normalize = False ,
1132+ fit_intercept = True , normalize = 'deprecated' ,
11191133 scoring = None , copy_X = True ,
11201134 gcv_mode = None , store_cv_values = False ,
11211135 is_clf = False , alpha_per_target = False ):
@@ -1451,6 +1465,11 @@ def fit(self, X, y, sample_weight=None):
14511465 -------
14521466 self : object
14531467 """
1468+ _normalize = _deprecate_normalize (
1469+ self .normalize , default = False ,
1470+ estimator_name = self .__class__ .__name__
1471+ )
1472+
14541473 X , y = self ._validate_data (X , y , accept_sparse = ['csr' , 'csc' , 'coo' ],
14551474 dtype = [np .float64 ],
14561475 multi_output = True , y_numeric = True )
@@ -1470,7 +1489,7 @@ def fit(self, X, y, sample_weight=None):
14701489 "negative or null value instead." .format (self .alphas ))
14711490
14721491 X , y , X_offset , y_offset , X_scale = LinearModel ._preprocess_data (
1473- X , y , self .fit_intercept , self . normalize , self .copy_X ,
1492+ X , y , self .fit_intercept , _normalize , self .copy_X ,
14741493 sample_weight = sample_weight )
14751494
14761495 gcv_mode = _check_gcv_mode (X , self .gcv_mode )
@@ -1584,7 +1603,7 @@ def fit(self, X, y, sample_weight=None):
15841603class _BaseRidgeCV (LinearModel ):
15851604 @_deprecate_positional_args
15861605 def __init__ (self , alphas = (0.1 , 1.0 , 10.0 ), * ,
1587- fit_intercept = True , normalize = False , scoring = None ,
1606+ fit_intercept = True , normalize = 'deprecated' , scoring = None ,
15881607 cv = None , gcv_mode = None , store_cv_values = False ,
15891608 alpha_per_target = False ):
15901609 self .alphas = np .asarray (alphas )
@@ -1699,6 +1718,10 @@ class RidgeCV(MultiOutputMixin, RegressorMixin, _BaseRidgeCV):
16991718 :class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
17001719 on an estimator with ``normalize=False``.
17011720
1721+ .. deprecated:: 1.0
1722+ ``normalize`` was deprecated in version 1.0 and will be removed in
1723+ 1.2.
1724+
17021725 scoring : string, callable, default=None
17031726 A string (see model evaluation documentation) or
17041727 a scorer callable object / function with signature
@@ -1828,6 +1851,10 @@ class RidgeClassifierCV(LinearClassifierMixin, _BaseRidgeCV):
18281851 :class:`~sklearn.preprocessing.StandardScaler` before calling ``fit``
18291852 on an estimator with ``normalize=False``.
18301853
1854+ .. deprecated:: 1.0
1855+ ``normalize`` was deprecated in version 1.0 and
1856+ will be removed in 1.2.
1857+
18311858 scoring : string, callable, default=None
18321859 A string (see model evaluation documentation) or
18331860 a scorer callable object / function with signature
@@ -1911,8 +1938,8 @@ class RidgeClassifierCV(LinearClassifierMixin, _BaseRidgeCV):
19111938 """
19121939 @_deprecate_positional_args
19131940 def __init__ (self , alphas = (0.1 , 1.0 , 10.0 ), * , fit_intercept = True ,
1914- normalize = False , scoring = None , cv = None , class_weight = None ,
1915- store_cv_values = False ):
1941+ normalize = 'deprecated' , scoring = None , cv = None ,
1942+ class_weight = None , store_cv_values = False ):
19161943 super ().__init__ (
19171944 alphas = alphas , fit_intercept = fit_intercept , normalize = normalize ,
19181945 scoring = scoring , cv = cv , store_cv_values = store_cv_values )
0 commit comments