Random-Forest-Hyperparameter abstimmen
Wie bei allen Modellen wollen wir die Performance optimieren, indem wir die Hyperparameter abstimmen. Random Forests haben viele Hyperparameter, aber besonders wichtig ist oft die Anzahl der Features, die wir bei jedem Split sampeln, also max_features im RandomForestRegressor aus der sklearn-Bibliothek. Für Modelle wie Random Forests, die Zufälligkeit eingebaut haben, sollten wir außerdem den random_state setzen. So stellen wir sicher, dass unsere Ergebnisse reproduzierbar sind.
Normalerweise können wir die GridSearchCV()-Methode von sklearn verwenden, um Hyperparameter zu durchsuchen. Bei einer finanziellen Zeitreihe möchten wir jedoch wegen möglicher Datenvermischung kein Cross-Validation durchführen. Wir wollen unsere Modelle auf den ältesten Daten trainieren und auf den neuesten Daten evaluieren. Deshalb verwenden wir sklearns ParameterGrid, um Kombinationen von Hyperparametern zum Durchsuchen zu erzeugen.
Diese Übung ist Teil des Kurses
<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>Übungsanweisungen
- Setze den Hyperparameter
n_estimatorsim Dictionarygridauf eine Liste mit einem Wert (200). - Setze den Hyperparameter
max_featuresim Dictionarygridauf eine Liste mit 4 und 8. - Fitte das Random-Forest-Regressionsmodell (
rfr, bereits für dich erstellt) für jede Hyperparameter-Kombinationgin der Schleife auftrain_featuresundtrain_targets. - Berechne R\(^2\), indem du
rfr.score()auftest_featuresanwendest, und hänge das Ergebnis an die Listetest_scoresan.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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])