ajuste-transformación en datos de entrenamiento y transformación en datos de prueba

Tengo problemas para entender cómo exactamente transform() y fit_transform() funcionan juntos.

Llamo a fit_transform() en mi conjunto de datos de entrenamiento y luego transform() en mi conjunto de prueba.

Sin embargo, si llamo a fit_transform() en el conjunto de prueba, obtengo malos resultados.

¿Alguien me puede dar una explicación de cómo y por qué ocurre esto?

Tomemos un ejemplo de una transformación, sklearn.preprocessing.StandardScaler .

De la documentación, esto va a:

Estandarizar las características mediante la eliminación de la media y la escala a la variación de la unidad

Supongamos que está trabajando con un código como el siguiente.

 import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # X is features, y is label X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42 ) 

Cuando llama a StandardScaler.fit(X_train) , lo que hace es calcular la media y la varianza de los valores en X_train . Luego, llamar a .transform() transformará todas las características restando la media y dividiendo por la varianza. Para mayor comodidad, estas dos llamadas de función se pueden hacer en un solo paso usando fit_transform() .

La razón por la que desea ajustar el escalador utilizando solo los datos de entrenamiento es porque no desea sesgar su modelo con la información de los datos de prueba.

Si fit() a sus datos de prueba, calculará una nueva media y varianza para cada característica. En teoría, estos valores pueden ser muy similares si sus conjuntos de prueba y tren tienen la misma distribución, pero en la práctica esto no suele ser el caso.

En su lugar, solo desea transformar los datos de prueba utilizando los parámetros calculados en los datos de entrenamiento.