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>Instructions de l’exercice
- Définissez l'hyperparamètre
n_estimatorscomme une liste contenant une valeur (200) dans le dictionnairegrid. - Définissez l'hyperparamètre
max_featurescomme une liste contenant 4 et 8 dans le dictionnairegrid. - Entraînez le modèle de régression par random forest (
rfr, déjà créé pour vous) surtrain_featuresettrain_targetspour chaque combinaison d'hyperparamètres,g, dans la boucle. - Calculez R\(^2\) en utilisant
rfr.score()surtest_featureset ajoutez le résultat à la listetest_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])