8000 Revert "API Change the tuple order in make_column_transformer (#12626)" · xhluca/scikit-learn@68cdf05 · GitHub 10000
[go: up one dir, main page]

Skip to content

Commit 68cdf05

Browse files
author
Xing
committed
Revert "API Change the tuple order in make_column_transformer (scikit-learn#12626)"
This reverts commit 4eb9133.
1 parent 0addbe9 commit 68cdf05

File tree

4 files changed

+18
-92
lines changed

4 files changed

+18
-92
lines changed

doc/modules/compose.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ above example would be::
493493

494494
>>> from sklearn.compose import make_column_transformer
495495
>>> column_trans = make_column_transformer(
496-
... (CountVectorizer(analyzer=lambda x: [x]), 'city'),
497-
... (CountVectorizer(), 'title'),
496+
... ('city', CountVectorizer(analyzer=lambda x: [x])),
497+
... ('title', CountVectorizer()),
498498
... remainder=MinMaxScaler())
499499
>>> column_trans # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
500500
ColumnTransformer(n_jobs=None, remainder=MinMaxScaler(copy=True, ...),

doc/whats_new/v0.20.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,6 @@ Changelog
4848
even if all transformation results are sparse. :issue:`12304` by `Andreas
4949
Müller`_.
5050

51-
- |API| :func:`compose.make_column_transformer` now expects
52-
``(transformer, columns)`` instead of ``(columns, transformer)`` to keep
53-
consistent with :class:`compose.ColumnTransformer`.
54-
:issue:`12339` by :user:`Adrin Jalali <adrinjalali>`.
55-
5651
:mod:`sklearn.datasets`
5752
............................
5853

sklearn/compose/_column_transformer.py

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from itertools import chain
1212

1313
import numpy as np
14-
import warnings
1514
from scipy import sparse
1615

1716
from ..base import clone, TransformerMixin
@@ -682,63 +681,14 @@ def _is_empty_column_selection(column):
682681
return False
683682

684683

685-
def _validate_transformers(transformers):
686-
"""Checks if given transformers are valid.
687-
688-
This is a helper function to support the deprecated tuple order.
689-
XXX Remove in v0.22
690-
"""
691-
if not transformers:
692-
return True
693-
694-
for t in transformers:
695-
if t in ('drop', 'passthrough'):
696-
continue
697-
if (not (hasattr(t, "fit") or hasattr(t, "fit_transform")) or not
698-
hasattr(t, "transform")):
699-
return False
700-
701-
return True
702-
703-
704-
def _is_deprecated_tuple_order(tuples):
705-
"""Checks if the input follows the deprecated tuple order.
706-
707-
Returns
708-
-------
709-
Returns true if (transformer, columns) is not a valid assumption for the
710-
input, but (columns, transformer) is valid. The latter is deprecated and
711-
its support will stop in v0.22.
712-
713-
XXX Remove in v0.22
714-
"""
715-
transformers, columns = zip(*tuples)
716-
if (not _validate_transformers(transformers)
717-
and _validate_transformers(columns)):
718-
return True
719-
720-
return False
721-
722-
723684
def _get_transformer_list(estimators):
724685
"""
725686
Construct (name, trans, column) tuples from list
726687
727688
"""
728-
message = ('`make_column_transformer` now expects (transformer, columns) '
729-
'as input tuples instead of (columns, transformer). This '
730-
'has been introduced in v0.20.1. `make_column_transformer` '
731-
'will stop accepting the deprecated (columns, transformer) '
732-
'order in v0.22.')
733-
734-
transformers, columns = zip(*estimators)
735-
736-
# XXX Remove in v0.22
737-
if _is_deprecated_tuple_order(estimators):
738-
transformers, columns = columns, transformers
739-
warnings.warn(message, DeprecationWarning)
740-
741-
names, _ = zip(*_name_estimators(transformers))
689+
transformers = [trans[1] for trans in estimators]
690+
columns = [trans[0] for trans in estimators]
691+
names = [trans[0] for trans in _name_estimators(transformers)]
742692

743693
transformer_list = list(zip(names, transformers, columns))
744694
return transformer_list
@@ -754,7 +704,7 @@ def make_column_transformer(*transformers, **kwargs):
754704
755705
Parameters
756706
----------
757-
*transformers : tuples of transformers and column selections
707+
*transformers : tuples of column selections and transformers
758708
759709
remainder : {'drop', 'passthrough'} or estimator, default 'drop'
760710
By default, only the specified columns in `transformers` are
@@ -797,8 +747,8 @@ def make_column_transformer(*transformers, **kwargs):
797747
>>> from sklearn.preprocessing import StandardScaler, OneHotEncoder
798748
>>> from sklearn.compose import make_column_transformer
799749
>>> make_column_transformer(
800-
... (StandardScaler(), ['numerical_column']),
801-
... (OneHotEncoder(), ['categorical_column']))
750+
... (['numerical_column'], StandardScaler()),
751+
... (['categorical_column'], OneHotEncoder()))
802752
... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
803753
ColumnTransformer(n_jobs=None, remainder='drop', sparse_threshold=0.3,
804754
transformer_weights=None,

sklearn/compose/tests/test_column_transformer.py

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from sklearn.utils.testing import assert_dict_equal
1414
from sklearn.utils.testing import assert_array_equal
1515
from sklearn.utils.testing import assert_allclose_dense_sparse
16-
from sklearn.utils.testing import assert_almost_equal
1716

1817
from sklearn.base import BaseEstimator
1918
from sklearn.externals import six
@@ -374,8 +373,8 @@ def test_column_transformer_mixed_cols_sparse():
374373
dtype='O')
375374

376375
ct = make_column_transformer(
377-
(OneHotEncoder(), [0]),
378-
('passthrough', [1, 2]),
376+
([0], OneHotEncoder()),
377+
([1, 2], 'passthrough'),
379378
sparse_threshold=1.0
380379
)
381380

@@ -387,8 +386,8 @@ def test_column_transformer_mixed_cols_sparse():
387386
[0, 1, 2, 0]]))
388387

389388
ct = make_column_transformer(
390-
(OneHotEncoder(), [0]),
391-
('passthrough', [0]),
389+
([0], OneHotEncoder()),
390+
([0], 'passthrough'),
392391
sparse_threshold=1.0
393392
)
394393
with pytest.raises(ValueError,
@@ -517,47 +516,29 @@ def predict(self, X):
517516
def test_make_column_transformer():
518517
scaler = StandardScaler()
519518
norm = Normalizer()
520-
ct = make_column_transformer((scaler, 'first'), (norm, ['second']))
519+
ct = make_column_transformer(('first', scaler), (['second'], norm))
521520
names, transformers, columns = zip(*ct.transformers)
522521
assert_equal(names, ("standardscaler", "normalizer"))
523522
assert_equal(transformers, (scaler, norm))
524523
assert_equal(columns, ('first', ['second']))
525524

526-
# XXX remove in v0.22
527-
with pytest.warns(DeprecationWarning,
528-
match='`make_column_transformer` now expects'):
529-
ct1 = make_column_transformer(([0], norm))
530-
ct2 = make_column_transformer((norm, [0]))
531-
X_array = np.array([[0, 1, 2], [2, 4, 6]]).T
532-
assert_almost_equal(ct1.fit_transform(X_array),
533-
ct2.fit_transform(X_array))
534-
535-
with pytest.warns(DeprecationWarning,
536-
match='`make_column_transformer` now expects'):
537-
make_column_transformer(('first', 'drop'))
538-
539-
with pytest.warns(DeprecationWarning,
540-
match='`make_column_transformer` now expects'):
541-
make_column_transformer(('passthrough', 'passthrough'),
542-
('first', 'drop'))
543-
544525

545526
def test_make_column_transformer_kwargs():
546527
scaler = StandardScaler()
547528
norm = Normalizer()
548-
ct = make_column_transformer((scaler, 'first'), (norm, ['second']),
529+
ct = make_column_transformer(('first', scaler), (['second'], norm),
549530
n_jobs=3, remainder='drop',
550531
sparse_threshold=0.5)
551532
assert_equal(ct.transformers, make_column_transformer(
552-
(scaler, 'first'), (norm, ['second'])).transformers)
533+
('first', scaler), (['second'], norm)).transformers)
553534
assert_equal(ct.n_jobs, 3)
554535
assert_equal(ct.remainder, 'drop')
555536
assert_equal(ct.sparse_threshold, 0.5)
556537
# invalid keyword parameters should raise an error message
557538
assert_raise_message(
558539
TypeError,
559540
'Unknown keyword arguments: "transformer_weights"',
560-
make_column_transformer, (scaler, 'first'), (norm, ['second']),
541+
make_column_transformer, ('first', scaler), (['second'], norm),
561542
transformer_weights={'pca': 10, 'Transf': 1}
562543
)
563544

@@ -566,7 +547,7 @@ def test_make_column_transformer_remainder_transformer():
566547
scaler = StandardScaler()
567548
norm = Normalizer()
568549
remainder = StandardScaler()
569-
ct = make_column_transformer((scaler, 'first'), (norm, ['second']),
550+
ct = make_column_transformer(('first', scaler), (['second'], norm),
570551
remainder=remainder)
571552
assert ct.remainder == remainder
572553

@@ -776,7 +757,7 @@ def test_column_transformer_remainder():
776757
"or estimator.", ct.fit_transform, X_array)
777758

778759
# check default for make_column_transformer
779-
ct = make_column_transformer((Trans(), [0]))
760+
ct = make_column_transformer(([0], Trans()))
780761
assert ct.remainder == 'drop'
781762

782763

0 commit comments

Comments
 (0)
0