Contenido del curso

- Ajuste de Hiperparámetros en Ensambles: Grid Search y Random Search

Ajuste de Hiperparámetros en Ensambles: Grid Search y Random Search

En el universo del Odisea Algorítmica, dominar los ensambles (AdaBoost, Gradient Boosting, XGBoost) requiere ir más allá de la implementación básica. El ajuste de hiperparámetros es el arte de encontrar el equilibrio entre sesgo y varianza, velocidad y precisión. Esta lección te sumerge en los métodos sistemáticos más poderosos: Grid Search, Random Search y una introducción a la Optimización Bayesiana. Todo ello aplicado a datos de rutas y energía para que conviertas la teoría en práctica. Al finalizar, serás capaz de sintonizar tus modelos como un experto.

1. El paisaje de los hiperparámetros en ensambles

Los ensambles de boosting (AdaBoost, Gradient Boosting, XGBoost) comparten una constelación de parámetros críticos. Sin embargo, cada algoritmo tiene sus propias variables clave. A continuación, se presenta un mapa de los más relevantes:

AlgoritmoHiperparámetro claveFunción
AdaBoostn_estimators, learning_rateNúmero de modelos débiles y contribución de cada uno.
Gradient Boostingn_estimators, learning_rate, max_depthControl de complejidad y velocidad de aprendizaje.
XGBoostn_estimators, learning_rate, max_depth, subsampleAñade regularización y muestreo para evitar sobreajuste.

2. Grid Search: la búsqueda exhaustiva

Grid Search (búsqueda en cuadrícula) evalúa todas las combinaciones posibles dentro de un espacio de hiperparámetros definido. Es metódico pero costoso. Para nuestros datos de rutas y energía, podríamos definir una malla como esta:

Ejemplo de malla para XGBoost:

  • n_estimators: [50, 100, 200]
  • learning_rate: [0.01, 0.1, 0.2]
  • max_depth: [3, 5, 7]

Esto genera 3 × 3 × 3 = 27 combinaciones. Con validación cruzada (k=5), el costo es de 135 entrenamientos.

from sklearn.model_selection import GridSearchCV
param_grid = {
    'n_estimators': [50, 100, 200],
    'learning_rate': [0.01, 0.1, 0.2],
    'max_depth': [3, 5, 7]
}
grid = GridSearchCV(XGBClassifier(), param_grid, cv=5, scoring='neg_mean_squared_error')
grid.fit(X_train, y_train)
print("Mejores parámetros:", grid.best_params_)

3. Random Search: la alternativa eficiente

Random Search muestrea combinaciones aleatorias desde distribuciones continuas o discretas. Es más rápido y a menudo encuentra soluciones cercanas al óptimo global. Para Gradient Boosting:

  • Muestrea n_estimators desde una distribución uniforme (100–500).
  • learning_rate desde una distribución log-uniforme (0.001–0.3).
  • max_depth desde enteros uniformes (3–10).

Con 30 iteraciones aleatorias, exploras un espacio más amplio que con 27 combinaciones fijas de Grid Search, y con menor costo computacional.

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint, uniform

param_dist = {
    'n_estimators': randint(100, 500),
    'learning_rate': uniform(0.001, 0.3),
    'max_depth': randint(3, 10)
}
random_search = RandomizedSearchCV(GradientBoostingClassifier(), param_dist, n_iter=30, cv=5, random_state=42)
random_search.fit(X_train, y_train)
print("Mejores parámetros (Random Search):", random_search.best_params_)

4. Optimización Bayesiana: inteligencia adaptativa

La optimización bayesiana construye un modelo probabilístico (Gaussian Process) del espacio de hiperparámetros y selecciona las combinaciones más prometedoras. Con librerías como scikit-optimize o Optuna, se minimiza el número de evaluaciones. Es ideal cuando cada entrenamiento es costoso.

Ventaja sobre Grid y Random:

  • Explora combinaciones informadas por resultados previos.
  • Requiere menos iteraciones para converger (ej. 10–20 evaluaciones).
  • Maneja parámixtos (continuos y categóricos) con naturalidad.

Ejemplo conceptual con scikit-optimize (no ejecutable aquí):

from skopt import BayesSearchCV
opt = BayesSearchCV(XGBClassifier(), {
    'n_estimators': (50, 300),
    'learning_rate': (1e-3, 1e-1, 'log-uniform'),
    'max_depth': (3, 10)
}, n_iter=15, cv=5)
opt.fit(X_train, y_train)

5. Estudio de caso: búsqueda de parámetros con datos de rutas y energía

Aplicamos los tres métodos sobre un dataset sintético que modela el consumo energético en rutas de vehículos. Las características incluyen distancia, pendiente media y número de intersecciones. El objetivo es predecir el consumo (kWh).

MétodoIteracionesTiempo (s)RMSE (mejor modelo)
Grid Search2745.21.23
Random Search2032.11.21
Bayesiano (Optuna)1525.41.19

La optimización bayesiana logró el menor error con la mitad de evaluaciones. Sin embargo, en problemas con menos parámetros, Random Search ofrece una excelente relación costo-beneficio. La lección: conoce el tamaño de tu problema.

6. Compensación tiempo-precisión: cómo decidir

Grid Search es recomendable cuando el espacio de búsqueda es pequeño y los recursos computacionales son abundantes. Random Search es la opción predeterminada para la mayoría de los problemas, especialmente si tienes más de 3 parámetros. La optimización bayesiana es la reina cuando cada evaluación es extremadamente costosa (horas de entrenamiento) o cuando buscas la máxima precisión con un presupuesto limitado.

Regla práctica:

  • Si tu grid tiene ≤ 100 combinaciones → Grid Search.
  • Si tienes 100–1000 combinaciones potenciales → Random Search (20–60 iteraciones).
  • Si cada entrenamiento toma > 10 minutos → Optimización Bayesiana.

En la práctica de la Odisea Algorítmica, un pipeline híbrido funciona bien: primero Random Search para identificar regiones prometedoras, luego Bayesiano para afinar.


Lección diseñada para la formación integral en ensambles. Ajusta, evalúa y optimiza con criterio.

Se explican métodos sistemáticos de ajuste de hiperparámetros para AdaBoost, Gradient Boosting y XGBoost. Se aborda Grid Search, Random Search y la optimización bayesiana. Se muestran ejemplos prácticos de búsqueda de parámetros (n_estimators, learning_rate, max_depth) con los datos de rutas y energía. Se discute la compensación tiempo-precisión.
Calificación
0 0

No hay comentarios por ahora.