8000 Revert "FIX Pipeline steps incorrectly updated with passthrough step … · xhluca/scikit-learn@d35f563 · GitHub
[go: up one dir, main page]

Skip to content

Commit d35f563

Browse files
author
Xing
committed
Revert "FIX Pipeline steps incorrectly updated with passthrough step (scikit-learn#12659)"
This reverts commit 408e51b.
1 parent 769161a commit d35f563

File tree

3 files changed

+12
-37
lines changed

3 files changed

+12
-37
lines changed

doc/whats_new/v0.20.rst

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@ enhancements to features released in 0.20.0.
1515
Changelog
1616
---------
1717

18-
:mod:`sklearn.pipeline`
19-
.......................
2018

21-
- |Fix| Fixed a regression in :class:`pipeline.Pipeline` where the ``steps``
22-
par 10000 ameter may not have been updated correctly when a step is set to ``None``
23-
or ``'passthrough'``. :user:`Thomas Fan <thomasjpfan>`.
2419

2520

2621
.. _changes_0_20_1:

sklearn/pipeline.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,9 @@ def _iter(self, with_final=True):
184184
if not with_final:
185185
stop -= 1
186186

187-
for idx, (name, trans) in enumerate(islice(self.steps, 0, stop)):
187+
for name, trans in islice(self.steps, 0, stop):
188188
if trans is not None and trans != 'passthrough':
189-
yield idx, name, trans
189+
yield name, trans
190190

191191
@property
192192
def _estimator_type(self):
@@ -219,7 +219,8 @@ def _fit(self, X, y=None, **fit_params):
219219
step, param = pname.split('__', 1)
220220
fit_params_steps[step][param] = pval
221221
Xt = X
222-
for step_idx, name, transformer in self._iter(with_final=False):
222+
for step_idx, (name, transformer) in enumerate(
223+
self._iter(with_final=False)):
223224
if hasattr(memory, 'location'):
224225
# joblib >= 0.12
225226
if memory.location is None:
@@ -340,7 +341,7 @@ def predict(self, X, **predict_params):
340341
y_pred : array-like
341342
"""
342343
Xt = X
343-
for _, name, transform in self._iter(with_final=False):
344+
for name, transform in self._iter(with_final=False):
344345
Xt = transform.transform(Xt)
345346
return self.steps[-1][-1].predict(Xt, **predict_params)
346347

@@ -389,7 +390,7 @@ def predict_proba(self, X):
389390
y_proba : array-like, shape = [n_samples, n_classes]
390391
"""
391392
Xt = X
392-
for _, name, transform in self._iter(with_final=False):
393+
for name, transform in self._iter(with_final=False):
393394
Xt = transform.transform(Xt)
394395
return self.steps[-1][-1].predict_proba(Xt)
395396

@@ -408,7 +409,7 @@ def decision_function(self, X):
408409
y_score : array-like, shape = [n_samples, n_classes]
409410
"""
410411
Xt = X
411-
for _, name, transform in self._iter(with_final=False):
412+
for name, transform in self._iter(with_final=False):
412413
Xt = transform.transform(Xt)
413414
return self.steps[-1][-1].decision_function(Xt)
414415

@@ -427,7 +428,7 @@ def predict_log_proba(self, X):
427428
y_score : array-like, shape = [n_samples, n_classes]
428429
"""
429430
Xt = X
430-
for _, name, transform in self._iter(with_final=False):
431+
for name, transform in self._iter(with_final=False):
431432
Xt = transform.transfor 8000 m(Xt)
432433
return self.steps[-1][-1].predict_log_proba(Xt)
433434

@@ -456,7 +457,7 @@ def transform(self):
456457

457458
def _transform(self, X):
458459
Xt = X
459-
for _, _, transform in self._iter():
460+
for _, transform in self._iter():
460461
Xt = transform.transform(Xt)
461462
return Xt
462463

@@ -480,14 +481,14 @@ def inverse_transform(self):
480481
"""
481482
# raise AttributeError if necessary for hasattr behaviour
482483
# XXX: Handling the None case means we can't use if_delegate_has_method
483-
for _, _, transform in self._iter():
484+
for _, transform in self._iter():
484485
transform.inverse_transform
485486
return self._inverse_transform
486487

487488
def _inverse_transform(self, X):
488489
Xt = X
489490
reverse_iter = reversed(list(self._iter()))
490-
for _, _, transform in reverse_iter:
491+
for _, transform in reverse_iter:
491492
Xt = transform.inverse_transform(Xt)
492493
return Xt
493494

@@ -514,7 +515,7 @@ def score(self, X, y=None, sample_weight=None):
514515
score : float
515516
"""
516517
Xt = X
517-
for _, name, transform in self._iter(with_final=False):
518+
for name, transform in self._iter(with_final=False):
518519
Xt = transform.transform(Xt)
519520
score_params = {}
520521
if sample_weight is not None:

sklearn/tests/test_pipeline.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -574,27 +574,6 @@ def test_pipeline_named_steps():
574574
assert pipeline.named_steps.mult is mult2
575575

576576

577-
@pytest.mark.parametrize('passthrough', [None, 'passthrough'])
578-
def test_pipeline_correctly_adjusts_steps(passthrough):
579-
X = np.array([[1]])
580-
y = np.array([1])
581-
mult2 = Mult(mult=2)
582-
mult3 = Mult(mult=3)
583-
mult5 = Mult(mult=5)
584-
585-
pipeline = Pipeline([
586-
('m2', mult2),
587-
('bad', passthrough),
588-
('m3', mult3),
589-
('m5', mult5)
590-
])
591-
592-
pipeline.fit(X, y)
593-
expected_names = ['m2', 'bad', 'm3', 'm5']
594-
actual_names = [name for name, _ in pipeline.steps]
595-
assert expected_names == actual_names
596-
597-
598577
@pytest.mark.parametrize('passthrough', [None, 'passthrough'])
599578
def test_set_pipeline_step_passthrough(passthrough):
600579
X = np.array([[1]])

0 commit comments

Comments
 (0)
0