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
Istruzioni dell'esercizio
- Imposta l'iperparametro
n_estimatorscome una lista con un solo valore (200) nel dizionariogrid. - Imposta l'iperparametro
max_featurescome una lista contenente 4 e 8 nel dizionariogrid. - Allena il modello di random forest regressor (
rfr, già creato per te) sutrain_featuresetrain_targetscon ciascuna combinazione di iperparametri,g, nel ciclo. - Calcola R\(^2\) usando
rfr.score()sutest_featurese aggiungi il risultato alla listatest_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])