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.