Crear un transformer
Introducción
Crear transformadores personalizados es una habilidad valiosa para cualquier desarrollador de modelos de machine learning con Scikit-learn. Los transformadores permiten aplicar procesos específicos a los datos, ya sea en la etapa de preparación o durante el flujo de trabajo del modelo. Esto puede incluir cambios en las características, la creación de nuevas características, o incluso manipulaciones complejas que no están cubiertas por los transformadores estándar de Scikit-learn.
En esta unidad, exploraremos cómo crear un transformador personalizado y cómo integrarlo en un pipeline para mejorar el flujo de trabajo del modelo. Aprenderás a definir métodos fit y transform, y cómo utilizar estos transformadores dentro de pipelines de Scikit-learn.
Explicación principal con ejemplos
Para crear un transformador personalizado, debes definir una clase que herede de sklearn.base.BaseEstimator y sklearn.base.TransformerMixin. Estas clases proporcionan los métodos fit (que se usa para ajustar el transformador a los datos) y transform (que se utiliza para aplicar las transformaciones a los datos).
A continuación, te mostramos un ejemplo de cómo crear un transformador personalizado para agregar la raíz cuadrada de una columna existente en tu conjunto de datos:
from sklearn.base import BaseEstimator, TransformerMixin
class SquareRootTransformer(TransformerMixin, BaseEstimator):
def fit(self, X, y=None):
# El método fit es obligatorio pero no hace nada en este caso porque la transformación es inmutable.
return self
def transform(self, X):
# Aplica la raíz cuadrada a cada elemento de la columna 'columna'
import numpy as np
X['raiz_cuadrada'] = np.sqrt(X['columna'])
return X
# Ejemplo de uso en un pipeline
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
# Crear una columna con datos numéricos para demostrar la transformación
X = pd.DataFrame({'columna': [4, 9, 16]})
y = np.array([2, 3, 4])
# Definir el pipeline
pipeline = Pipeline([
('square_root', SquareRootTransformer()),
('regression', LinearRegression())
])
# Entrenar y predecir
pipeline.fit(X, y)
predictions = pipeline.predict(X)
print(predictions)
Errores típicos / trampas
- No implementar
fitcorrectamente: Asegúrate de que el métodofitdevuelvaself. Si lo omites o no devuelve nada, Scikit-learn no podrá aplicar la transformación en los datos.
- Transformaciones inmutables en
transform: La funcióntransformdebe retornar una representación del conjunto de datos modificado. No debes modificar directamente las columnas del DataFrame original dentro detransform. En su lugar, crea un nuevo DataFrame o usa la sintaxisX.copy()para evitar cambios inmutables.
- No utilizar
fit_transformen el pipeline: Si defines tantofitcomotransform, asegúrate de que tu transformador sea compatible confit_transform, que es útil cuando puedes aplicar la misma lógica a ambos métodos. Asegúrate de implementarlo o no según corresponda.
Checklist accionable
- Definir una clase que herede de
TransformerMixinyBaseEstimator. - Implementar el método
fitpara ajustar los parámetros necesarios (si aplica). - Implementar el método
transformpara aplicar las transformaciones a los datos. - Crear un pipeline que incluya tu transformador personalizado.
- Entrenar y evaluar tu modelo con los datos transformados.
Cierre
Siguientes pasos
- Aprender sobre selección automática de features: Utiliza técnicas como
SelectKBestoRecursive Feature Eliminationpara automatizar la selección de características. - Implementar validación cruzada personalizada: Adaptar el uso de validación cruzada a tus necesidades específicas.
- Crear transformadores más complejos: Explora cómo crear transformadores que incluyan múltiples pasos o procesos más complejos.
Siguiendo estos pasos, podrás mejorar significativamente la preparación y el ajuste de tus modelos de machine learning utilizando Scikit-learn.