Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Overfitting y underfitting, Unidad 6 — Cómo combatir el overfitting, 6.1 — Regularización ·

Impacto en generalización

Impacto en generalización

Introducción

El overfitting se refiere a que un modelo de machine learning es demasiado complejo y ajusta excesivamente los datos de entrenamiento, llegando a aprender tanto ruido como señal. Esto reduce la capacidad del modelo para hacer predicciones precisas en datos no vistos. La regularización es una técnica utilizada para mitigar el overfitting al controlar la complejidad del modelo y mejorar su generalización.

Explicación principal

La regularización implica agregar un término a la función de costo que penaliza ciertas características del modelo, como los valores de los parámetros. Esto ayuda a evitar que los parámetros se ajusten demasiado al ruido en los datos de entrenamiento y mejora la capacidad del modelo para generalizar.

Ejemplo con código

Supongamos que estamos trabajando con un modelo de regresión polinomial:

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import numpy as np

# Generar datos sintéticos
np.random.seed(0)
X = np.sort(np.random.rand(10, 1))
y = X + (2 * (X - 0.5)**3) + np.random.randn(10, 1)

# Aumentar la complejidad del modelo con un polinomio de grado alto
poly_features = PolynomialFeatures(degree=7)
X_poly = poly_features.fit_transform(X)

# Entrenar el modelo sin regularización (overfitting)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)

# Visualizar los resultados
import matplotlib.pyplot as plt

plt.scatter(X, y, color='blue', label='Datos reales')
X_line = np.linspace(0, 1, 100).reshape(-1, 1)
X_line_poly = poly_features.transform(X_line)
y_line = lin_reg.predict(X_line_poly)
plt.plot(X_line, y_line, color='red', label='Modelo sin regularización')

# Agregar regularización (Ridge) para evitar overfitting
lin_reg_ridge = LinearRegression()
lin_reg_ridge.fit(X_poly, y, sample_weight=np.exp(-np.abs(y)))

y_line_ridge = lin_reg_ridge.predict(X_line_poly)
plt.plot(X_line, y_line_ridge, color='green', label='Modelo con regularización')

plt.legend()
plt.show()

En este ejemplo, el modelo sin regularización (sin el ajuste en rojo) se ajusta demasiado a los datos de entrenamiento, lo que resulta en una curva muy irregular. Al agregar regularización usando Ridge regression (en verde), el modelo mejoró su capacidad para generalizar.

Errores típicos / trampas

  1. Escalar incorrectamente la regularización: Una regularización demasiado fuerte puede hacer que el modelo sea demasiado sencillo, lo que conduce a underfitting.
  2. No validar adecuadamente: Es importante dividir los datos en conjuntos de entrenamiento y validación para ajustar los hiperparámetros correctamente.
  3. Ignorar la elección del modelo: La regularización es solo una parte de la solución. Se debe considerar el tipo de problema, los datos disponibles y las características relevantes.

Checklist accionable

  1. Analiza la complejidad del modelo: Evalúa si el modelo tiene suficiente capacidad para aprender de los datos.
  2. Utiliza validación cruzada: Divide los datos en múltiples conjuntos para evaluar constantemente el rendimiento del modelo.
  3. Ajusta parámetros de regularización cuidadosamente: Experimenta con diferentes valores para encontrar la combinación óptima.
  4. Evalúa la generalización: Mide el error en un conjunto de datos no visto (test set).
  5. Monitorea el entrenamiento: Observa los cambios en el error durante el entrenamiento para detectar overfitting.

Siguientes pasos

  1. Explora regularizaciones adicionales: A parte del Ridge y Lasso, considera otros métodos como Dropout (para redes neuronales) o Early Stopping.
  2. Aumenta la complejidad de los datos: En algunos casos, el overfitting puede deberse a datos insuficientes. Considera agregar más datos o mejorar la calidad existente.
  3. Refina el modelo de selección de características: Mejora las variables utilizadas en el modelo para asegurar que se incluyan solo las más relevantes.

La regularización es una herramienta poderosa para combatir el overfitting y mejorar la generalización del modelo. Con un entendimiento sólido y la aplicación adecuada, puedes construir modelos de machine learning más robustos y precisos.

Contacto

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