Estimador Final
Pipeline se utilizó anteriormente para el preprocesamiento, pero su propósito real es encadenar el preprocesamiento con un predictor final. El último paso en una pipeline puede ser cualquier estimador (típicamente un modelo) que produzca predicciones.
Al llamar a .fit(), cada transformador ejecuta .fit_transform().
Al llamar a .predict(), la pipeline utiliza .transform() antes de enviar los datos al estimador final.
Esto es necesario porque los nuevos datos deben transformarse exactamente igual que los datos de entrenamiento.
¿Por qué .transform()?
Usar .fit_transform() en nuevos datos podría cambiar las codificaciones (por ejemplo, en OneHotEncoder), creando columnas desajustadas y predicciones poco fiables.
.transform() garantiza un preprocesamiento consistente, ignorando categorías no vistas y manteniendo el mismo orden de columnas.
Así es como se ve el conjunto de datos de entrenamiento codificado con one-hot:
Estas son las nuevas instancias para predecir:
Si se aplicara .fit_transform() a nuevas instancias, el OneHotEncoder podría generar columnas en un orden diferente o incluso introducir nuevas. Esto provocaría que los nuevos datos se transformaran de manera inconsistente con el conjunto de entrenamiento, haciendo que las predicciones sean no confiables.
Sin embargo, usar .transform() garantiza que los nuevos datos se codifiquen exactamente como los datos de entrenamiento, ignorando las categorías no vistas durante el entrenamiento:
Agregar el estimador final
Simplemente agregar el modelo como el último paso del pipeline:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Esto permite que todo el flujo de trabajo—preprocesamiento + predicción—se ejecute con una sola llamada.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain why using `.fit_transform()` on new data is problematic?
How does `.transform()` handle unseen categories in new data?
Can you show an example of a pipeline with a different final estimator?
Genial!
Completion tasa mejorada a 3.13
Estimador Final
Desliza para mostrar el menú
Pipeline se utilizó anteriormente para el preprocesamiento, pero su propósito real es encadenar el preprocesamiento con un predictor final. El último paso en una pipeline puede ser cualquier estimador (típicamente un modelo) que produzca predicciones.
Al llamar a .fit(), cada transformador ejecuta .fit_transform().
Al llamar a .predict(), la pipeline utiliza .transform() antes de enviar los datos al estimador final.
Esto es necesario porque los nuevos datos deben transformarse exactamente igual que los datos de entrenamiento.
¿Por qué .transform()?
Usar .fit_transform() en nuevos datos podría cambiar las codificaciones (por ejemplo, en OneHotEncoder), creando columnas desajustadas y predicciones poco fiables.
.transform() garantiza un preprocesamiento consistente, ignorando categorías no vistas y manteniendo el mismo orden de columnas.
Así es como se ve el conjunto de datos de entrenamiento codificado con one-hot:
Estas son las nuevas instancias para predecir:
Si se aplicara .fit_transform() a nuevas instancias, el OneHotEncoder podría generar columnas en un orden diferente o incluso introducir nuevas. Esto provocaría que los nuevos datos se transformaran de manera inconsistente con el conjunto de entrenamiento, haciendo que las predicciones sean no confiables.
Sin embargo, usar .transform() garantiza que los nuevos datos se codifiquen exactamente como los datos de entrenamiento, ignorando las categorías no vistas durante el entrenamiento:
Agregar el estimador final
Simplemente agregar el modelo como el último paso del pipeline:
pipe = make_pipeline(
ct,
SimpleImputer(strategy='most_frequent'),
StandardScaler(),
KNeighborsClassifier()
)
pipe.fit(X, y)
pipe.predict(X_new)
Esto permite que todo el flujo de trabajo—preprocesamiento + predicción—se ejecute con una sola llamada.
¡Gracias por tus comentarios!