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)