Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Geef de grids op met mogelijke waarden voor max_depth en subsample. Voor max_depth: 3, 5 en 7. Voor subsample: 0.8, 0.9 en 1.0.
  • Pas de functie product() uit het pakket itertools toe 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)
Code bewerken en uitvoeren