Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Overfitting y underfitting, Unidad 4 — Overfitting: causas habituales, 4.1 — Complejidad excesiva del modelo ·

Modelos muy flexibles

Modelos muy flexibles: Causa habitual de overfitting

Introducción

El overfitting, o sobreajuste, es uno de los desafíos más comunes que enfrentan los ingenieros de machine learning al entrenar modelos. Una de las causas más frecuentes del overfitting es la complejidad excesiva del modelo. Los modelos muy flexibles son particularmente propensos a capturar ruido y patrones no significativos en los datos de entrenamiento, lo que resulta en una baja generalización y un rendimiento pobre en nuevos datos. En este artículo, exploraremos cómo la complejidad excesiva del modelo puede llevar al overfitting, presentaremos ejemplos prácticos y discutiremos cómo identificar y mitigar este problema.

Explicación principal

Los modelos muy flexibles son aquellos que tienen la capacidad de ajustarse a los datos con gran detalle. Esto significa que pueden capturar tanto la señal (la tendencia real del problema) como el ruido (las variaciones aleatorias o espúreas). Sin embargo, esta alta flexibilidad también implica que el modelo puede ser demasiado complejo para generalizar adecuadamente a nuevos datos.

Explicación con bloque de código

Para ilustrar cómo la complejidad excesiva del modelo puede llevar al overfitting, consideremos un ejemplo simple utilizando la librería scikit-learn en Python:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_squared_error

# Generar datos sintéticos
X, y = make_regression(n_samples=100, n_features=1, noise=20, random_state=42)

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Entrenar un modelo lineal (sencillo)
linear_reg = LinearRegression()
linear_reg.fit(X_train, y_train)
y_pred_linear = linear_reg.predict(X_test)
mse_linear = mean_squared_error(y_test, y_pred_linear)

# Entrenar un modelo Ridge con una complejidad excesiva
ridge_reg = Ridge(alpha=0.1)  # alpha es el parámetro de regularización (mayor valor = menor complejidad)
ridge_reg.fit(X_train, y_train)
y_pred_ridge = ridge_reg.predict(X_test)
mse_ridge = mean_squared_error(y_test, y_pred_ridge)

# Comparar errores
print(f"Error cuadrático medio del modelo lineal: {mse_linear}")
print(f"Error cuadrático medio del modelo Ridge con complejidad excesiva: {mse_ridge}")

En este ejemplo, el modelo lineal simple tiene un error relativamente alto debido a la alta varianza y bajo sesgo. Sin embargo, el modelo Ridge con una complejidad excesivamente baja (es decir, un alpha muy pequeño) puede ajustarse demasiado al ruido de los datos de entrenamiento, resultando en un bajo error en el conjunto de entrenamiento pero un alto error en el conjunto de prueba.

Errores típicos / trampas

  1. Escalar y normalizar los datos insuficientemente: La falta de adecuada escalación y normalización puede llevar a modelos muy flexibles que ajustan mal las características.
  2. Omitir la regularización: No aplicar o usar una forma inadecuada de regularización puede permitir que el modelo se ajuste demasiado al ruido del conjunto de entrenamiento.
  3. Subestimar el número de parámetros: Modelos con más parámetros tienen mayor capacidad de overfitting, por lo que subestimar este factor puede llevar a modelos muy flexibles.

Checklist accionable

  1. Escalar y normalizar los datos adecuadamente.
  2. Aplicar regularización (por ejemplo, Ridge o Lasso).
  3. Ajustar el número de parámetros en función del tamaño del conjunto de entrenamiento.
  4. Validar con cross-validation para evitar overfitting.
  5. Monitorear la curva de aprendizaje para identificar signos tempranos de overfitting.

Siguientes pasos

  1. Explorar diferentes técnicas de regularización como Dropout en redes neuronales o early stopping en algoritmos iterativos.
  2. Usar modelos más simples si los datos son escasos y la complejidad del modelo es innecesaria.
  3. Invertir tiempo en el feature engineering, ya que características relevantes pueden reducir la complejidad necesaria del modelo.

Asegúrate de que tu modelo no esté sobreajustando y que tenga capacidad para generalizar adecuadamente a nuevos datos. Utiliza las herramientas proporcionadas por scikit-learn y otros frameworks para monitorear y mitigar el overfitting, y siempre validad tus modelos con cuidado.

Contacto

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