2D grid search
Het nadeel van het afzonderlijk afstemmen van elke hyperparameter is dat er een afhankelijkheid kan bestaan tussen verschillende hyperparameters. Een betere aanpak is om alle mogelijke hyperparametercombinaties te proberen. Maar in zulke gevallen groeit de zoekruimte van de grid search snel. Als we bijvoorbeeld 2 parameters met elk 10 mogelijke waarden hebben, levert dat 100 experimenten op.
Jouw doel is om het beste hyperparameterkoppel van max_depth en subsample voor het Gradient Boosting-model te vinden. subsample is het deel van de observaties dat wordt gebruikt om de individuele bomen te trainen.
Je krijgt een functie get_cv_score() die de trainingsgegevens en een dictionary met modelparameters als argumenten neemt en de totale validatie-RMSE-score retourneert over 3-voudige cross-validatie.
Deze oefening maakt deel uit van de cursus
Een Kaggle-competitie winnen met Python
Oefeninstructies
- Geef de grids op met mogelijke waarden voor
max_depthensubsample. Voormax_depth: 3, 5 en 7. Voorsubsample: 0.8, 0.9 en 1.0. - Pas de functie
product()uit het pakketitertoolstoe op de hyperparametergrids. Die retourneert alle mogelijke combinaties van deze twee grids. - Geef elk kandidaatkoppel van hyperparameters door aan de
params-dictionary van het model.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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)