Grid search 2D
Lo svantaggio di ottimizzare ogni iperparametro in modo indipendente è la possibile dipendenza tra iperparametri diversi. Un approccio migliore è provare tutte le combinazioni possibili di iperparametri. Tuttavia, in questi casi, lo spazio di ricerca della grid cresce rapidamente. Per esempio, se abbiamo 2 parametri con 10 valori possibili ciascuno, otterremo 100 esecuzioni di esperimenti.
Il tuo obiettivo è trovare la migliore coppia di iperparametri max_depth e subsample per il modello di Gradient Boosting. subsample è la frazione di osservazioni da utilizzare per addestrare i singoli alberi.
Ti viene fornita una funzione get_cv_score(), che prende come argomenti il dataset di train e un dizionario dei parametri del modello e restituisce l'RMSE di validazione complessivo su una cross-validation a 3 fold.
Questo esercizio fa parte del corso
Vincere una competizione Kaggle con Python
Istruzioni dell'esercizio
- Specifica le griglie dei possibili valori di
max_depthesubsample. Permax_depth: 3, 5 e 7. Persubsample: 0.8, 0.9 e 1.0. - Applica la funzione
product()dal packageitertoolsalle griglie di iperparametri. Restituisce tutte le combinazioni possibili per queste due griglie. - Passa ogni coppia candidata di iperparametri al dizionario
paramsdel modello.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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)