- Ajuste de hiperparámetros y validación cruzada para clasificadores clásicos
🔍 Ajuste de hiperparámetros y validación cruzada para clasificadores clásicos
En esta lección dominarás las técnicas fundamentales para optimizar clasificadores como Random Forest y SVM. La búsqueda de hiperparámetros combinada con validación cruzada estratificada es el puente entre un modelo mediocre y un modelo de alto rendimiento. Aprenderás a evitar el sobreajuste y a interpretar los resultados dentro del dilema sesgo-varianza.
🎯 Objetivo: Al finalizar, serás capaz de aplicar Grid Search, Random Search y búsqueda bayesiana sobre los hiperparámetros clave de clasificadores clásicos, utilizando validación cruzada estratificada para garantizar la generalización del modelo.
1. Validación cruzada estratificada: el cimiento de la optimización
La validación cruzada estándar (k-fold) puede fallar cuando las clases están desbalanceadas. La validación cruzada estratificada preserva la proporción de clases en cada pliegue, ofreciendo una estimación más realista del rendimiento. Es obligatoria en clasificación binaria o multiclase con distribuciones desiguales.
- StratifiedKFold (scikit-learn): asigna muestras manteniendo el porcentaje de cada clase.
- Ventaja: Reduce el sesgo en la estimación de métricas como F1-score o exactitud balanceada.
- Uso típico: 5 o 10 pliegues. En conjuntos pequeños usar 5, en grandes 10.
Fragmento de código (estructura):
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# Luego se itera sobre skf.split(X, y) para entrenar y validar
2. Hiperparámetros críticos: Random Forest y SVM
Cada clasificador tiene hiperparámetros que controlan la complejidad del modelo. Ajustarlos mal conduce a sobreajuste o subajuste. A continuación los más relevantes:
| Clasificador | Hiperparámetro | Rol | Rango típico |
|---|---|---|---|
| Random Forest | n_estimators | Número de árboles. A mayor número, menor varianza (hasta cierto punto). | 100 – 1000 (o más, según capacidad computacional) |
| Random Forest | max_depth | Profundidad máxima de cada árbol. Controla la complejidad individual. | 3 – 50 (o None si se permite crecimiento completo) |
| SVM (kernel RBF) | C | Penalización por error. C alto busca clasificar bien todos los puntos (puede sobreajustar). | 0.001 – 100 (escala logarítmica) |
| SVM (kernel RBF) | gamma | Influencia de cada punto de entrenamiento. Gamma alto genera bordes complejos. | 0.0001 – 10 (escala logarítmica) |
Relación sesgo-varianza: en Random Forest, aumentar max_depth incrementa la varianza (cada árbol se sobreajusta más). En SVM, valores altos de C o gamma llevan a modelos de alta varianza. El ajuste busca el punto óptimo de equilibrio.
3. Grid Search: búsqueda exhaustiva y sus limitaciones
Grid Search evalúa todas las combinaciones dentro de una cuadrícula de hiperparámetros predefinida. Es sencillo de implementar y paralelizable, pero sufre de la maldición de la dimensionalidad: el número de combinaciones crece exponencialmente.
- Ventaja: garantiza cubrir el espacio definido. Fácil de entender.
- Desventaja: para conjuntos de 4 o más hiperparámetros puede ser computacionalmente prohibitivo. No explora fuera de los valores elegidos.
- Buenas prácticas: usar pocos valores por hiperparámetro (3–5) en etapas tempranas, luego refinar alrededor de la mejor región.
from sklearn.model_selection import GridSearchCV
param_grid_rf = {
'n_estimators': [100, 300, 500],
'max_depth': [5, 10, 20, None]
}
grid_rf = GridSearchCV(RandomForestClassifier(), param_grid_rf, cv=5, scoring='f1_macro')
grid_rf.fit(X_train, y_train)
4. Random Search: eficiencia por exploración estocástica
Random Search muestrea combinaciones aleatorias a partir de distribuciones especificadas. Ha demostrado ser más eficiente que Grid Search cuando el espacio de búsqueda es grande, ya que explora mejor regiones prometedoras sin perder tiempo en valores redundantes.
- Hiperparámetros continuos: usar distribuciones uniformes o log-uniforme (por ejemplo, C en SVM con
loguniform(1e-3, 1e3)). - Número de iteraciones: típicamente 30–100, dependiendo del presupuesto computacional.
- Ventaja: en espacios de alta dimensión encuentra regiones óptimas más rápido.
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform, loguniform
param_dist_svm = {
'C': loguniform(1e-3, 1e2),
'gamma': loguniform(1e-4, 1e1)
}
rand_svm = RandomizedSearchCV(SVC(kernel='rbf'), param_dist_svm, n_iter=50, cv=5, scoring='f1_macro')
rand_svm.fit(X_train, y_train)
5. Búsqueda bayesiana: optimización inteligente
A diferencia de los métodos anteriores, la búsqueda bayesiana construye un modelo probabilístico (por ejemplo, Gaussian Process) que relaciona los hiperparámetros con la métrica de rendimiento. Con cada evaluación actualiza el modelo y selecciona la siguiente combinación prometedora mediante una función de adquisición (ej. Expected Improvement).
- Ventaja: requiere menos evaluaciones para converger. Ideal cuando cada evaluación es costosa (grandes datasets, modelos complejos).
- Implementación: librerías como scikit-optimize, Optuna o Hyperopt.
- Desventaja: es más complejo de configurar y paralelizar; puede ser sobredisperso si no se ajustan bien los priors.
# Ejemplo conceptual con skopt (scikit-optimize)
from skopt import BayesSearchCV
from skopt.space import Real, Integer
opt = BayesSearchCV(
SVC(),
{'C': Real(1e-3, 1e2, prior='log-uniform'),
'gamma': Real(1e-4, 1e1, prior='log-uniform')},
n_iter=40, cv=5
)
opt.fit(X_train, y_train)
La búsqueda bayesiana es actualmente el estado del arte para la optimización de hiperparámetros, especialmente cuando el tiempo de entrenamiento es alto.
6. Cómo evitar el sobreajuste durante la búsqueda
Uno de los errores más comunes es optimizar directamente sobre el conjunto de prueba, lo que lleva a una falsa sensación de rendimiento. Estrategias para evitarlo:
- Validación interna: la búsqueda debe hacerse siempre dentro de los pliegues de validación cruzada (CV). Nunca usar el conjunto de prueba hasta el final.
- Validación externa: reservar un conjunto de prueba independiente (hold-out) que no se toca durante la búsqueda.
- CV anidada (Nested CV): cuando se necesita una estimación imparcial del rendimiento final, se usa un bucle externo de CV para evaluar el modelo seleccionado. El bucle interno optimiza los hiperparámetros.
- Cuidado con la varianza del CV: si el dataset es pequeño, la mejor combinación puede ser casual. Repetir la búsqueda con diferentes semillas ayuda a confirmar la robustez.
💡 Consejo clave: Si usas GridSearchCV o RandomizedSearchCV con un solo conjunto de validación, no vuelvas a usar esas métricas como garantía final. Un tercer conjunto (prueba) es necesario para reportar la capacidad de generalización.
7. Interpretación de resultados y balance sesgo-varianza
Una vez obtenidos los mejores hiperparámetros, es vital entender qué nos dicen sobre el modelo:
- Random Forest con max_depth baja y muchos árboles: modelo con bajo sesgo (cada árbol es débil) pero control de varianza gracias al promediado. Es un indicio de modelo estable.
- SVM con C alto y gamma alto: el modelo se ajusta mucho a los puntos de entrenamiento; probablemente alta varianza. Si el rendimiento en CV es mucho mejor que en prueba, hay sobreajuste.
- Grid/Random Search con diferencias pequeñas entre folds: señal de que el modelo generaliza bien. Si hay desviaciones grandes, puede haber inestabilidad.
Ejemplo de interpretación: Supongamos que en SVM el mejor valor de C es 0.1 y gamma 0.01. Esto indica que el modelo necesita una regularización moderada (C no muy alto) y una influencia local controlada (gamma baja). Si hubiera dado C=100, gamma=10, el modelo probablemente estaría memorizando ruido.
8. Resumen: estrategias de búsqueda y cuándo usarlas
| Método | Ventaja | Cuándo usarlo | Riesgo |
|---|---|---|---|
| Grid Search | Exhaustivo, reproducible | Pocos hiperparámetros (≤3) y rangos pequeños | Costoso en espacio grande |
| Random Search | Eficiente para espacios amplios | 4+ hiperparámetros, presupuesto computacional limitado | Puede perder regiones óptimas si n_iter es bajo |
| Bayesiano | Óptimo en pocas iteraciones | Evaluaciones costosas, búsqueda fina | Requiere ajuste de prior; no siempre paralelizable |
⚖️ Reflexión final: El ajuste de hiperparámetros no es un fin en sí mismo, sino una herramienta para navegar el balance sesgo-varianza. Combinando validación cruzada estratificada con una búsqueda inteligente, lograrás modelos que no solo memorizan, sino que generalizan. Aplica siempre una validación externa para confirmar tus hallazgos.
Lección creada bajo el curso "Odisea Algorítmica: De la Regresión al Aprendizaje Profundo". Domina cada técnica y conviértete en un experto en clasificación.
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.