From a6753f3ed38d25cec0af8ed95697f48eaacaed24 Mon Sep 17 00:00:00 2001 From: Alexandre Gramfort <alexandre.gramfort@m4x.org> Date: Sun, 9 Jul 2017 13:21:45 +0200 Subject: [PATCH] [MRG+1] Ridgecv normalize (#9302) * FIX : normalize was not passed to grid search in RidgeCV * update what's new --- doc/whats_new.rst | 5 ++++- sklearn/linear_model/ridge.py | 3 ++- sklearn/linear_model/tests/test_ridge.py | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 0c5608d6b5..3c87d4174c 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -471,10 +471,13 @@ Bug fixes by :user:`Andre Ambrosio Boechat <boechat107>`, :user:`Utkarsh Upadhyay <musically-ut>`, and `Joel Nothman`_. - - Add ``data_home`` parameter to :func:`sklearn.datasets.fetch_kddcup99` by `Loic Esteve`_. + - Fix inconsistent results between :class:`linear_model.RidgeCV` + and :class:`linear_model.Ridge` when using ``normalize=True`` + by `Alexandre Gramfort`_. + API changes summary ------------------- diff --git a/sklearn/linear_model/ridge.py b/sklearn/linear_model/ridge.py index e0c7b6f188..caf2f9eed6 100644 --- a/sklearn/linear_model/ridge.py +++ b/sklearn/linear_model/ridge.py @@ -1119,7 +1119,8 @@ class _BaseRidgeCV(LinearModel): raise ValueError("cv!=None and store_cv_values=True " " are incompatible") parameters = {'alpha': self.alphas} - gs = GridSearchCV(Ridge(fit_intercept=self.fit_intercept), + gs = GridSearchCV(Ridge(fit_intercept=self.fit_intercept, + normalize=self.normalize), parameters, cv=self.cv, scoring=self.scoring) gs.fit(X, y, sample_weight=sample_weight) estimator = gs.best_estimator_ diff --git a/sklearn/linear_model/tests/test_ridge.py b/sklearn/linear_model/tests/test_ridge.py index 4879e02def..ee44da5d56 100644 --- a/sklearn/linear_model/tests/test_ridge.py +++ b/sklearn/linear_model/tests/test_ridge.py @@ -383,6 +383,16 @@ def _test_ridge_loo(filter_): return ret +def _test_ridge_cv_normalize(filter_): + ridge_cv = RidgeCV(normalize=True, cv=3) + ridge_cv.fit(filter_(10. * X_diabetes), y_diabetes) + + gs = GridSearchCV(Ridge(normalize=True), cv=3, + param_grid={'alpha': ridge_cv.alphas}) + gs.fit(filter_(10. * X_diabetes), y_diabetes) + assert_equal(gs.best_estimator_.alpha, ridge_cv.alpha_) + + def _test_ridge_cv(filter_): ridge_cv = RidgeCV() ridge_cv.fit(filter_(X_diabetes), y_diabetes) @@ -462,6 +472,7 @@ def check_dense_sparse(test_func): def test_dense_sparse(): for test_func in (_test_ridge_loo, _test_ridge_cv, + _test_ridge_cv_normalize, _test_ridge_diabetes, _test_multi_ridge_diabetes, _test_ridge_classifiers, -- GitLab