Finjustera hyperparametrar för random forest
Precis som med alla modeller vill vi optimera prestandan genom att finjustera hyperparametrar. Random forests har många hyperparametrar, men den viktigaste är ofta antalet särdrag vi samplar vid varje uppdelning – det vill säga max_features i RandomForestRegressor från sklearn-biblioteket. För modeller som random forests, där slumpmässighet är inbyggd, vill vi även ange random_state så att resultaten blir reproducerbara.
Vanligtvis kan vi använda sklearn:s GridSearchCV() för att söka bland hyperparametrar, men med en finansiell tidsserie vill vi undvika korsvalidering eftersom det kan blanda data. Vi vill träna modellerna på de äldsta data och utvärdera på de nyaste. Därför använder vi sklearn:s ParameterGrid för att skapa kombinationer av hyperparametrar att söka igenom.
Den här övningen är en del av kursen
Maskininlärning för finans i Python
Övningsinstruktioner
- Sätt hyperparametern
n_estimatorstill en lista med ett värde (200) igrid-ordlistan. - Sätt hyperparametern
max_featurestill en lista med värdena 4 och 8 igrid-ordlistan. - Anpassa random forest-regressionsmodellen (
rfr, redan skapad åt dig) tilltrain_featuresochtrain_targetsmed varje hyperparameterkombination,g, i loopen. - Beräkna R\(^2\) med hjälp av
rfr.score()påtest_featuresoch lägg till resultatet i listantest_scores.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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])