Zacznij terazZacznij za darmo

Dostrajanie hiperparametrów lasu losowego

Podobnie jak w przypadku innych modeli, chcemy zoptymalizować wydajność przez dostrojenie hiperparametrów. Lasy losowe mają wiele hiperparametrów, ale najważniejszym jest często liczba cech losowanych przy każdym podziale – w RandomForestRegressor z biblioteki sklearn odpowiada za to parametr max_features. W modelach takich jak lasy losowe, które mają wbudowany element losowości, warto też ustawić random_state, aby wyniki były powtarzalne.

Zazwyczaj do przeszukiwania hiperparametrów można użyć metody GridSearchCV() ze sklearn, jednak w przypadku finansowych szeregów czasowych nie chcemy stosować walidacji krzyżowej – mogłoby to doprowadzić do mieszania danych. Zależy nam na tym, żeby modele były trenowane na starszych danych i oceniane na nowszych. Dlatego użyjemy ParameterGrid ze sklearn, aby wygenerować kombinacje hiperparametrów do przeszukania.

To ćwiczenie jest częścią kursu

Uczenie maszynowe w finansach z Pythonem

Zobacz kurs

Instrukcje do ćwiczenia

  • Ustaw hiperparametr n_estimators jako listę z jedną wartością (200) w słowniku grid.
  • Ustaw hiperparametr max_features jako listę zawierającą wartości 4 i 8 w słowniku grid.
  • Dopasuj model regresji lasu losowego (rfr, już utworzony) do train_features i train_targets dla każdej kombinacji hiperparametrów g w pętli.
  • Oblicz R\(^2\), używając rfr.score() na test_features, i dołącz wynik do listy test_scores.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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])
Edytuj i uruchom kod