Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Zet de hyperparameter n_estimators in de grid-dictionary op een lijst met één waarde (200).
  • Zet de hyperparameter max_features in de grid-dictionary op een lijst met 4 en 8.
  • Fit het random forest-regressiemodel (rfr, al voor je aangemaakt) op train_features en train_targets met elke hyperparametercombinatie g in de lus.
  • Bereken R\(^2\) met rfr.score() op test_features en voeg het resultaat toe aan de lijst test_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])
Code bewerken en uitvoeren