CommencerCommencez gratuitement

Ajuster les hyperparamètres d'une random forest

Comme pour tous les modèles, nous voulons optimiser les performances en ajustant les hyperparamètres. Les random forests en ont beaucoup, mais le plus important est souvent le nombre de variables échantillonnées à chaque division, c'est-à-dire max_features dans RandomForestRegressor de la bibliothèque sklearn. Pour les modèles comme les random forests qui intègrent de l'aléatoire, nous voulons aussi fixer random_state afin de rendre nos résultats reproductibles.

En général, on peut utiliser la méthode GridSearchCV() de sklearn pour rechercher les hyperparamètres, mais avec une série temporelle financière, nous voulons éviter la validation croisée à cause du mélange des données. Nous voulons ajuster nos modèles sur les données les plus anciennes et évaluer sur les plus récentes. Nous allons donc utiliser ParameterGrid de sklearn pour créer des combinaisons d'hyperparamètres à explorer.

Cet exercice fait partie du cours

<cours>Machine Learning pour la finance en Python</cours>
Voir le cours

Instructions de l’exercice

  • Définissez l'hyperparamètre n_estimators comme une liste contenant une valeur (200) dans le dictionnaire grid.
  • Définissez l'hyperparamètre max_features comme une liste contenant 4 et 8 dans le dictionnaire grid.
  • Entraînez le modèle de régression par random forest (rfr, déjà créé pour vous) sur train_features et train_targets pour chaque combinaison d'hyperparamètres, g, dans la boucle.
  • Calculez R\(^2\) en utilisant rfr.score() sur test_features et ajoutez le résultat à la liste test_scores.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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])
Modifier et exécuter le code