LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Lege die Grids für mögliche Werte von max_depth und subsample fest. Für max_depth: 3, 5 und 7. Für subsample: 0.8, 0.9 und 1.0.
  • Wende die Funktion product() aus dem Paket itertools auf 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)
Code bearbeiten und ausführen