Ajusta los hiperparámetros de random forest
Como con cualquier modelo, queremos optimizar el rendimiento ajustando los hiperparámetros. Tenemos muchos hiperparámetros en los random forests, pero a menudo el más importante es el número de variables que muestreamos en cada división, o max_features en RandomForestRegressor de la librería sklearn. Para modelos como random forests, que incorporan aleatoriedad, también queremos fijar random_state. Esto se establece para que nuestros resultados sean reproducibles.
Normalmente, podríamos usar el método GridSearchCV() de sklearn para buscar hiperparámetros, pero con una serie temporal financiera no queremos hacer validación cruzada por la mezcla de datos. Queremos ajustar nuestros modelos con los datos más antiguos y evaluar con los más recientes. Así que usaremos ParameterGrid de sklearn para crear combinaciones de hiperparámetros que podamos explorar.
Este ejercicio forma parte del curso
Machine Learning para finanzas con Python
Instrucciones del ejercicio
- Define el hiperparámetro
n_estimatorscomo una lista con un único valor (200) en el diccionariogrid. - Define el hiperparámetro
max_featurescomo una lista que contenga 4 y 8 en el diccionariogrid. - Ajusta el modelo de random forest regressor (
rfr, ya creado para ti) contrain_featuresytrain_targetspara cada combinación de hiperparámetros,g, en el bucle. - Calcula R\(^2\) usando
rfr.score()sobretest_featuresy añade el resultado a la listatest_scores.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
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])