Búsqueda en malla 2D
El inconveniente de ajustar cada hiperparámetro por separado es que puede haber dependencia entre ellos. La mejor opción es probar todas las combinaciones posibles de hiperparámetros. Sin embargo, en estos casos, el espacio de búsqueda en malla crece rápidamente. Por ejemplo, si tenemos 2 parámetros con 10 valores posibles cada uno, esto dará lugar a 100 ejecuciones de experimentos.
Tu objetivo es encontrar la mejor pareja de hiperparámetros max_depth y subsample para el modelo de Gradient Boosting. subsample es la fracción de observaciones que se usará para ajustar los árboles individuales.
Se te proporciona la función get_cv_score(), que recibe el conjunto de entrenamiento y un diccionario con los parámetros del modelo como argumentos y devuelve la puntuación global de RMSE de validación mediante validación cruzada de 3 particiones.
Este ejercicio forma parte del curso
Cómo ganar una competición de Kaggle con Python
Instrucciones del ejercicio
- Especifica las rejillas de posibles valores para
max_depthysubsample. Paramax_depth: 3, 5 y 7. Parasubsample: 0.8, 0.9 y 1.0. - Aplica la función
product()del paqueteitertoolsa las rejillas de hiperparámetros. Devuelve todas las combinaciones posibles para estas dos rejillas. - Pasa cada pareja candidata de hiperparámetros al diccionario
paramsdel modelo.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
import itertools
# Hyperparameter grids
max_depth_grid = [____]
subsample_grid = [____]
results = {}
# For each couple in the grid
for max_depth_candidate, subsample_candidate in itertools.____(max_depth_grid, subsample_grid):
params = {'max_depth': ____,
'subsample': ____}
validation_score = get_cv_score(train, params)
# Save the results for each couple
results[(max_depth_candidate, subsample_candidate)] = validation_score
print(results)