Back to models
Transformer

FitInTransform

Transformer wrapper to delay fit to the transform phase.

In panel settings, e.g., time series classification, it can be preferable (or, necessary) to fit and transform on the test set, e.g., interpolate within the same series that interpolation parameters are being fitted on. FitInTransform can be used to wrap any transformer to ensure that fit and transform happen always on the same series, by delaying the fit to the transform batch.

Warning: The use of FitInTransform will typically not be useful, or can constitute a mistake (data leakage) when naively used in a forecasting setting.

Quickstart

python
from sktime.transformations.compose import FitInTransform

estimator = FitInTransform(transformer, skip_inverse_transform=True)

Tags

Capabilities

  • Multivariate
  • Unequal-length series
  • Inverse transform: Not supported
  • Missing values: Not supported
  • Removes missing values: Not supported
  • Equalizes series length: Not supported

Properties

Input typescitype:transform-input
Series
Output typescitype:transform-output
Series
Label typescitype:transform-labels
None
Fit is emptyfit_is_empty
Yes
Keeps the time indextransform-returns-same-time-index
No
Requires Xrequires_X
Yes
Requires yrequires_y
No
X and y need the same indexX-y-must-have-same-index
No

Parameters(2)

transformerEstimator
scikit-learn-like or sktime-like transformer to fit and apply to series.
skip_inverse_transformbool
The FitInTransform will skip inverse_transform by default, of the param skip_inverse_transform=False, then the inverse_transform is calculated by means of transformer.fit(X=X, y=y).inverse_transform(X=X, y=y) where transformer is the inner transformer. So the inner transformer is fitted on the inverse_transform data. This is required to have a non- state changing transform() method of FitInTransform.

Examples

>>> from sktime.datasets import load_longley
>>> from sktime.forecasting.naive import NaiveForecaster
>>> from sktime.forecasting.base import ForecastingHorizon
>>> from sktime.forecasting.compose import ForecastingPipeline
>>> from sktime.split import temporal_train_test_split
>>> from sktime.transformations.compose import FitInTransform
>>> from sktime.transformations.impute import Imputer
>>> y, X = load_longley ()
>>> y_train, y_test, X_train, X_test = temporal_train_test_split (y, X)
>>> fh = ForecastingHorizon (y_test. index, is_relative = False)
>>> # we want to fit the Imputer only on the predict (=transform) data.
>>> # note that NaiveForecaster can't use X data, this is just a show case.
>>> pipe = ForecastingPipeline (
... steps = [
... ("imputer", FitInTransform (Imputer (method = "mean"))),
... ("forecaster", NaiveForecaster ()),
... ]
... )
>>> pipe. fit (y_train, X_train) ForecastingPipeline(
... )
>>> y_pred = pipe. predict (fh = fh, X = X_test)