EmpezarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Define el hiperparámetro n_estimators como una lista con un único valor (200) en el diccionario grid.
  • Define el hiperparámetro max_features como una lista que contenga 4 y 8 en el diccionario grid.
  • Ajusta el modelo de random forest regressor (rfr, ya creado para ti) con train_features y train_targets para cada combinación de hiperparámetros, g, en el bucle.
  • Calcula R\(^2\) usando rfr.score() sobre test_features y añade el resultado a la lista test_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])
Editar y ejecutar código