Skip to content

Commit 938c36b

Browse files
FIX TransformedTargetRegressor warns when set_output expects dataframe (scikit-learn#29401)
1 parent d391353 commit 938c36b

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

doc/whats_new/v1.5.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@ For a short description of the main highlights of the release, please refer to
1313

1414
.. include:: changelog_legend.inc
1515

16+
.. _changes_1_5_2:
17+
18+
Version 1.5.2
19+
=============
20+
21+
**release date of 1.5.2**
22+
23+
Changelog
24+
---------
25+
26+
:mod:`sklearn.compose`
27+
......................
28+
29+
- |Fix| Fixed :class:`compose.TransformedTargetRegressor` not to raise `UserWarning` if
30+
transform output is set to `pandas` or `polars`, since it isn't a transformer.
31+
:pr:`29401` by :user:`Stefanie Senger <StefanieSenger>`.
32+
1633
.. _changes_1_5_1:
1734

1835
Version 1.5.1

sklearn/compose/_target.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ def _fit_transformer(self, y):
193193
validate=True,
194194
check_inverse=self.check_inverse,
195195
)
196+
# We are transforming the target here and not the features, so we set the
197+
# output of FunctionTransformer() to be a numpy array (default) and to not
198+
# depend on the global configuration:
199+
self.transformer_.set_output(transform="default")
196200
# XXX: sample_weight is not currently passed to the
197201
# transformer. However, if transformer starts using sample_weight, the
198202
# code should be modified accordingly. At the time to consider the

sklearn/compose/tests/test_target.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import warnings
2+
13
import numpy as np
24
import pytest
35

4-
from sklearn import datasets
6+
from sklearn import config_context, datasets
57
from sklearn.base import BaseEstimator, TransformerMixin, clone
68
from sklearn.compose import TransformedTargetRegressor
79
from sklearn.dummy import DummyRegressor
@@ -393,3 +395,18 @@ def test_transform_target_regressor_pass_extra_predict_parameters():
393395
regr.fit(X, y)
394396
regr.predict(X, check_input=False)
395397
assert regr.regressor_.predict_called
398+
399+
400+
@pytest.mark.parametrize("output_format", ["pandas", "polars"])
401+
def test_transform_target_regressor_not_warns_with_global_output_set(output_format):
402+
"""Test that TransformedTargetRegressor will not raise warnings if
403+
set_config(transform_output="pandas"/"polars") is set globally; regression test for
404+
issue #29361."""
405+
X, y = datasets.make_regression()
406+
y = np.abs(y) + 1
407+
with config_context(transform_output=output_format):
408+
with warnings.catch_warnings():
409+
warnings.simplefilter("error")
410+
TransformedTargetRegressor(
411+
regressor=LinearRegression(), func=np.log, inverse_func=np.exp
412+
).fit(X, y)

0 commit comments

Comments
 (0)