Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Scikit-learn desde cero, Unidad 10 — Feature engineering con scikit-learn, 10.1 — Transformadores personalizados ·

Crear un transformer

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

  1. No implementar fit correctamente: Asegúrate de que el método fit devuelva self. Si lo omites o no devuelve nada, Scikit-learn no podrá aplicar la transformación en los datos.
  1. Transformaciones inmutables en transform: La función transform debe retornar una representación del conjunto de datos modificado. No debes modificar directamente las columnas del DataFrame original dentro de transform. En su lugar, crea un nuevo DataFrame o usa la sintaxis X.copy() para evitar cambios inmutables.
  1. No utilizar fit_transform en el pipeline: Si defines tanto fit como transform, asegúrate de que tu transformador sea compatible con fit_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

  1. Definir una clase que herede de TransformerMixin y BaseEstimator.
  2. Implementar el método fit para ajustar los parámetros necesarios (si aplica).
  3. Implementar el método transform para aplicar las transformaciones a los datos.
  4. Crear un pipeline que incluya tu transformador personalizado.
  5. Entrenar y evaluar tu modelo con los datos transformados.

Cierre

Siguientes pasos

  • Aprender sobre selección automática de features: Utiliza técnicas como SelectKBest o Recursive Feature Elimination para 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.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).