Ajuster les hyperparamètres d'une forêt aléatoire
Comme pour tous les modèles, nous voulons optimiser la performance en ajustant les hyperparamètres. Les forêts aléatoires en ont plusieurs, mais celui qui compte souvent le plus est le nombre de caractéristiques échantillonnées à chaque division, soit max_features dans RandomForestRegressor de la bibliothèque sklearn. Pour les modèles comme les forêts aléatoires qui intègrent du hasard, nous voulons aussi fixer random_state, afin que nos résultats soient reproductibles.
Habituellement, nous pouvons utiliser la méthode GridSearchCV() de sklearn pour explorer les hyperparamètres, mais avec une série chronologique financière, nous voulons éviter la validation croisée pour ne pas mélanger les données. Nous voulons entraîner 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 générer des combinaisons d'hyperparamètres à explorer.
Cette activité fait partie du cours
Machine Learning pour la finance en Python
Instructions de l’exercice
- Dans le dictionnaire
grid, définissez l'hyperparamètren_estimatorscomme une liste ne contenant qu'une valeur (200). - Dans le dictionnaire
grid, définissez l'hyperparamètremax_featurescomme une liste contenant 4 et 8. - Ajustez le modèle de régression à forêt aléatoire (
rfr, déjà créé pour vous) auxtrain_featuresettrain_targetspour chaque combinaison d'hyperparamètresgdans 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])