Ajustează hiperparametrii pădurii aleatoare
Ca pentru orice model, vrem să optimizăm performanța prin ajustarea hiperparametrilor. Pădurile aleatoare au mulți hiperparametri, dar cel mai important este adesea numărul de caracteristici eșantionate la fiecare diviziune – max_features în RandomForestRegressor din biblioteca sklearn. Pentru modelele precum pădurile aleatoare, care au aleatorietate încorporată, vrem să setăm și random_state, astfel încât rezultatele să fie reproductibile.
De obicei, putem folosi metoda GridSearchCV() din sklearn pentru a căuta hiperparametrii optimi, însă în cazul unei serii de timp financiare nu dorim validare încrucișată, deoarece datele s-ar amesteca. Vrem să antrenăm modelele pe datele mai vechi și să le evaluăm pe cele mai recente. Prin urmare, vom folosi ParameterGrid din sklearn pentru a genera combinații de hiperparametri pe care să le explorăm.
Acest exercițiu face parte din cursul
Machine Learning pentru finanțe în Python
Instrucțiuni pentru exercițiu
- Setează hiperparametrul
n_estimatorsca o listă cu o singură valoare (200) în dicționarulgrid. - Setează hiperparametrul
max_featuresca o listă care conține valorile 4 și 8 în dicționarulgrid. - Antrenează modelul de regresie cu pădure aleatoare (
rfr, deja creat pentru tine) petrain_featuresșitrain_targetspentru fiecare combinație de hiperparametrigdin buclă. - Calculează R\(^2\) folosind
rfr.score()petest_featuresși adaugă rezultatul în listatest_scores.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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])