Random forest-hyperparameters afstellen
Zoals bij alle modellen willen we de prestaties optimaliseren door hyperparameters af te stemmen. We hebben veel hyperparameters voor random forests, maar de belangrijkste is vaak het aantal features dat we bij elke split samplen, oftewel max_features in RandomForestRegressor uit de sklearn-bibliotheek. Voor modellen zoals random forests, die ingebouwde willekeurigheid hebben, willen we ook de random_state zetten. Dit doen we zodat onze resultaten reproduceerbaar zijn.
Normaal gesproken kunnen we sklearn's GridSearchCV() gebruiken om hyperparameters te zoeken, maar bij een financiële tijdreeks willen we geen cross-validatie vanwege het mengen van data. We willen onze modellen trainen op de oudste data en evalueren op de nieuwste data. Daarom gebruiken we sklearn's ParameterGrid om combinaties van hyperparameters te maken om te doorzoeken.
Deze oefening maakt deel uit van de cursus
Machine Learning voor finance in Python
Oefeninstructies
- Zet de hyperparameter
n_estimatorsin degrid-dictionary op een lijst met één waarde (200). - Zet de hyperparameter
max_featuresin degrid-dictionary op een lijst met 4 en 8. - Fit het random forest-regressiemodel (
rfr, al voor je aangemaakt) optrain_featuresentrain_targetsmet elke hyperparametercombinatiegin de lus. - Bereken R\(^2\) met
rfr.score()optest_featuresen voeg het resultaat toe aan de lijsttest_scores.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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])