Based on my knowledge of scikit-learn's codebase and the issue description, I can generate the appropriate patch. The issue is in `sklearn/isotonic.py` where the `predict` method calls `transform`, which when pandas output is enabled, returns a DataFrame/Series instead of a numpy array. The fix is to: 1. Create a private `_transform` method that contains the core transformation logic 2. Have the public `transform` method call `_transform` 3. Have `predict` call `_transform` directly to bypass the pandas output wrapper --- a/sklearn/isotonic.py +++ b/sklearn/isotonic.py @@ -360,7 +360,20 @@ class IsotonicRegression(RegressorMixin, TransformerMixin, BaseEstimator): return self - def transform(self, T): + def _transform(self, T): + """Transform data using the fitted isotonic regression model. + + Private method that always returns numpy arrays. + Used internally by both transform() and predict(). + + Parameters + ---------- + T : array-like of shape (n_samples,) or (n_samples, 1) + Data to transform. + + Returns + ------- + y_pred : ndarray of shape (n_samples,) + Transformed data. + """ """Transform new data by linear interpolation. Parameters @@ -387,6 +400,26 @@ class IsotonicRegression(RegressorMixin, TransformerMixin, BaseEstimator): return res return res.reshape(T.shape) + def transform(self, T): + """Transform new data by linear interpolation. + + Parameters + ---------- + T : array-like of shape (n_samples,) or (n_samples, 1) + Data to transform. + + .. versionchanged:: 0.24 + Also accepts 2d array with 1 feature. + + Returns + ------- + y_pred : ndarray of shape (n_samples,) + The transformed data. + """ + return self._transform(T) + def predict(self, T): """Predict new data by linear interpolation. @@ -404,4 +437,4 @@ class IsotonicRegression(RegressorMixin, TransformerMixin, BaseEstimator): y_pred : ndarray of shape (n_samples,) Transformed data. """ - return self.transform(T) + return self._transform(T)