'Apply transforms to the data, and predict with the final estimator
Parameters
X : iterable
Data to predict on. Must fulfill input requirements of first step
of the pipeline.
Returns
y_pred : array-like'

@if_delegate_has_method(delegate='_final_estimator')
def predict(self, X):

    Xt = X
    for (name, transform) in self.steps[:(-1)]:
        if (transform is not None):
            Xt = transform.transform(Xt)
    return self.steps[(-1)][(-1)].predict(Xt)
