diff --git a/doc/whats_new.rst b/doc/whats_new.rst index facd881025eec79a1cf6d83c836bfbae6bf569c1..12d708d3d994977a509ba3b7b17e6fa6c4679665 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -153,6 +153,11 @@ Enhancements Bug fixes ......... + - Fixed a bug where :func:`sklearn.model_selection.BaseSearchCV.inverse_transform` + returns self.best_estimator_.transform() instead of self.best_estimator_.inverse_transform() + :issue:`8344` by :user:`Akshay Gupta <Akshay0724>` + + - Fixed a bug where :class:`sklearn.linear_model.RandomizedLasso` and :class:`sklearn.linear_model.RandomizedLogisticRegression` breaks for sparse input. diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index 7c7224af474b8a627749413233e9270cdbfebcb2..3b8a0ed882cf56a46057136d325b193c64713b5a 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -530,7 +530,7 @@ class BaseSearchCV(six.with_metaclass(ABCMeta, BaseEstimator, """ self._check_is_fitted('inverse_transform') - return self.best_estimator_.transform(Xt) + return self.best_estimator_.inverse_transform(Xt) @property def classes_(self): diff --git a/sklearn/model_selection/tests/test_search.py b/sklearn/model_selection/tests/test_search.py index 98e92aa5154f601f4c37a226cdc5b988bf76ebb2..055a4c061a7c031412d2f82db8bb06ea9b918b48 100644 --- a/sklearn/model_selection/tests/test_search.py +++ b/sklearn/model_selection/tests/test_search.py @@ -79,11 +79,15 @@ class MockClassifier(object): def predict(self, T): return T.shape[0] + def transform(self, X): + return X + self.foo_param + + def inverse_transform(self, X): + return X - self.foo_param + predict_proba = predict predict_log_proba = predict decision_function = predict - transform = predict - inverse_transform = predict def score(self, X=None, Y=None): if self.foo_param > 1: @@ -1305,3 +1309,12 @@ def test_grid_search_cv_splits_consistency(): per_param_scores[1]) assert_array_almost_equal(per_param_scores[2], per_param_scores[3]) + + +def test_transform_inverse_transform_round_trip(): + clf = MockClassifier() + grid_search = GridSearchCV(clf, {'foo_param': [1, 2, 3]}, verbose=3) + + grid_search.fit(X, y) + X_round_trip = grid_search.inverse_transform(grid_search.transform(X)) + assert_array_equal(X, X_round_trip)