Inizia subitoInizia gratis

Ottimizza gli iperparametri della random forest

Come per tutti i modelli, vogliamo ottimizzare le prestazioni regolando gli iperparametri. Le random forest hanno molti iperparametri, ma spesso il più importante è il numero di caratteristiche campionate a ogni split, ovvero max_features in RandomForestRegressor della libreria sklearn. Per modelli come le random forest, che includono casualità, vogliamo anche impostare il random_state, così da rendere i risultati riproducibili.

Di solito possiamo usare il metodo GridSearchCV() di sklearn per cercare gli iperparametri, ma con una serie storica finanziaria non vogliamo fare cross-validation per evitare mescolamenti di dati. Vogliamo addestrare i modelli sui dati più vecchi e valutarli su quelli più recenti. Per questo useremo ParameterGrid di sklearn per creare le combinazioni di iperparametri da esplorare.

Questo esercizio fa parte del corso

Machine Learning per la finanza in Python

Visualizza corso

Istruzioni dell'esercizio

  • Imposta l'iperparametro n_estimators come una lista con un solo valore (200) nel dizionario grid.
  • Imposta l'iperparametro max_features come una lista contenente 4 e 8 nel dizionario grid.
  • Allena il modello di random forest regressor (rfr, già creato per te) su train_features e train_targets con ciascuna combinazione di iperparametri, g, nel ciclo.
  • Calcola R\(^2\) usando rfr.score() su test_features e aggiungi il risultato alla lista test_scores.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

from sklearn.model_selection import ParameterGrid

# Create a dictionary of hyperparameters to search
grid = {____, 'max_depth': [3], 'max_features': ____, 'random_state': [42]}
test_scores = []

# Loop through the parameter grid, set the hyperparameters, and save the scores
for g in ParameterGrid(grid):
    rfr.set_params(**g)  # ** is "unpacking" the dictionary
    rfr.fit(____, ____)
    test_scores.append(rfr.score(____, ____))

# Find best hyperparameters from the test score and print
best_idx = np.argmax(test_scores)
print(test_scores[best_idx], ParameterGrid(grid)[best_idx])
Modifica ed esegui il codice