← retour aux snippets

sklearn TransformedTargetRegressor

transformer la variable cible (log, box-cox) dans un pipeline propre

sklearn TransformedTargetRegressor

objectif

Expliquer et montrer comment transformer la variable cible (log, box-cox) dans un pipeline propre.

code minimal

import numpy as np
from sklearn.compose import TransformedTargetRegressor
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import FunctionTransformer

rng = np.random.RandomState(0)
X = rng.rand(500, 3)
y = np.exp(X @ np.array([2.0, -1.0, 0.5])) + rng.randn(500)*0.1  # cible log-normale

regr = TransformedTargetRegressor(
    regressor=LinearRegression(),
    transformer=FunctionTransformer(np.log1p, inverse_func=np.expm1, validate=True)
).fit(X, y)
regr.score(X, y)

utilisation

y_pred = regr.predict(X[:3])
print(y_pred)

variante(s) utile(s)

# PowerTransformer (Yeo-Johnson) sur y
from sklearn.preprocessing import PowerTransformer
tt = TransformedTargetRegressor(regressor=LinearRegression(), transformer=PowerTransformer(standardize=False)).fit(X, y)

notes

  • Permet de stabiliser la variance de y et d’améliorer les modèles linéaires.
  • Toujours définir inverse_func pour revenir à l’échelle originale.