2D-Grid-Search
Der Nachteil, jeden Hyperparameter unabhängig zu optimieren, ist eine mögliche Abhängigkeit zwischen verschiedenen Hyperparametern. Der bessere Ansatz ist, alle möglichen Hyperparameter-Kombinationen auszuprobieren. In solchen Fällen wächst der Grid-Search-Raum jedoch sehr schnell. Wenn wir zum Beispiel 2 Parameter mit jeweils 10 möglichen Werten haben, ergibt das 100 Experimentläufe.
Dein Ziel ist es, das beste Hyperparameter-Paar aus max_depth und subsample für das Gradient-Boosting-Modell zu finden. subsample ist der Anteil der Beobachtungen, der zum Fitten der einzelnen Bäume verwendet wird.
Du bekommst eine Funktion get_cv_score(), die den Trainingsdatensatz und ein Dictionary mit Modellparametern als Argumente entgegennimmt und den gesamten Validierungs-RMSE über eine 3-fach-Cross-Validation zurückgibt.
Diese Übung ist Teil des Kurses
Eine Kaggle-Competition in Python gewinnen
Anleitung zur Übung
- Lege die Grids für mögliche Werte von
max_depthundsubsamplefest. Fürmax_depth: 3, 5 und 7. Fürsubsample: 0.8, 0.9 und 1.0. - Wende die Funktion
product()aus dem Paketitertoolsauf die Hyperparameter-Grids an. Sie gibt alle möglichen Kombinationen für diese beiden Grids zurück. - Übergib jedes Hyperparameter-Kandidatenpaar an das
params-Dictionary des Modells.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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)