Curva de aprendizaje

Eval

Curva de aprendizaje

まとめ
  • Una curva de aprendizaje muestra las puntuaciones de entrenamiento y validación a medida que crece el tamaño del conjunto de entrenamiento.
  • Usa learning_curve para dibujar ambas curvas, evaluar el sesgo/varianza y decidir si más datos ayudarán.
  • Aplica las conclusiones a la recolección de datos, la capacidad del modelo y la ingeniería de características.

1. ¿Qué es una curva de aprendizaje? #

Registra puntuación de entrenamiento y puntuación de validación mientras se incrementa progresivamente el número de muestras usadas para entrenar. Sirve para responder:

  • ¿El modelo sufre de alto sesgo (underfitting) o de alta varianza (overfitting)?
  • ¿Aumentar el dataset mejoraría de forma significativa el rendimiento?
  • ¿Conviene ajustar hiperparámetros o cambiar la arquitectura del modelo?

2. Ejemplo en Python (regresión Ridge) #

from __future__ import annotations

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
from sklearn.model_selection import learning_curve
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler


def plot_learning_curve_for_ridge() -> None:
    """Dibuja la RMSE frente al tamaño del conjunto de entrenamiento."""
    features, targets = make_regression(
        n_samples=1500,
        n_features=25,
        n_informative=8,
        noise=12.0,
        random_state=42,
    )

    model = make_pipeline(StandardScaler(), Ridge(alpha=10.0))
    train_sizes, train_scores, valid_scores = learning_curve(
        estimator=model,
        X=features,
        y=targets,
        train_sizes=np.linspace(0.1, 1.0, 8),
        cv=5,
        scoring="neg_mean_squared_error",
        shuffle=True,
        random_state=42,
        n_jobs=None,
    )

    train_rmse = np.sqrt(-train_scores.mean(axis=1))
    valid_rmse = np.sqrt(-valid_scores.mean(axis=1))
    train_std = np.sqrt(train_scores.var(axis=1))
    valid_std = np.sqrt(valid_scores.var(axis=1))

    plt.figure(figsize=(7, 5))
    plt.plot(train_sizes, train_rmse, color="#1d4ed8", label="Train RMSE")
    plt.fill_between(
        train_sizes,
        train_rmse - train_std,
        train_rmse + train_std,
        alpha=0.2,
        color="#1d4ed8",
    )
    plt.plot(train_sizes, valid_rmse, color="#ea580c", label="Validation RMSE")
    plt.fill_between(
        train_sizes,
        valid_rmse - valid_std,
        valid_rmse + valid_std,
        alpha=0.2,
        color="#ea580c",
    )
    plt.xlabel("Muestras de entrenamiento")
    plt.ylabel("RMSE")
    plt.title("Learning Curve for Ridge Regression (RMSE)")
    plt.legend(loc="upper right")
    plt.grid(alpha=0.3)


plot_learning_curve_for_ridge()
Curva de aprendizaje para Ridge

Al aumentar las muestras, la RMSE de entrenamiento empeora y se acerca a la de validación, que mejora y se estabiliza. Cuando ambas convergen, añadir datos tiene un retorno decreciente.


3. Interpretación #

  • Alta varianza / sobreajuste: la curva de entrenamiento es excelente y la de validación queda atrás. Refuerza la regularización, reduce características o suma más datos.
  • Alto sesgo / infraajuste: ambas curvas son altas (mal rendimiento). Cambia a un modelo más expresivo, ingenia nuevas variables o suaviza la regularización.
  • Curvas convergentes: los valores se acercan; más datos apenas mueven la aguja y es mejor replantear modelo o features.

4. Aplicaciones prácticas #

  • ROI de la recolección: si la curva de validación sigue mejorando, más datos son valiosos; si se estabiliza, prioriza otras tareas.
  • Capacidad del modelo y regularización: analiza la curva antes de ajustar profundidad, ancho o intensidad de regularización.
  • Ingeniería de características: si ambas curvas se mantienen altas y paralelas, indica que necesitas mejores atributos.
  • Complemento con otras diagnósticas: combínala con curvas de validación o análisis temporal para planificar ciclos de iteración.

Conclusiones #

  • Las curvas de aprendizaje desvelan el balance entre overfitting y underfitting y cuantifican el efecto del tamaño de entrenamiento.
  • Con learning_curve es sencillo generarlas y decidir sobre adquisición de datos o cadencia de tuning.
  • Úsalas junto a otras herramientas de diagnóstico para equilibrar datos, complejidad y objetivos de negocio.