Comece agoraComece grátis

Ajustar hiperparâmetros de random forest

Como em qualquer modelo, queremos otimizar o desempenho ajustando hiperparâmetros. Temos muitos hiperparâmetros para random forests, mas o mais importante costuma ser o número de features amostradas em cada divisão, o max_features no RandomForestRegressor da biblioteca sklearn. Para modelos como random forests, que têm aleatoriedade embutida, também queremos definir o random_state. Isso garante que nossos resultados sejam reprodutíveis.

Normalmente, podemos usar o método GridSearchCV() do sklearn para buscar hiperparâmetros, mas com séries temporais financeiras não queremos fazer validação cruzada por causa da mistura de dados. Queremos ajustar nossos modelos nos dados mais antigos e avaliar nos dados mais recentes. Por isso, vamos usar o ParameterGrid do sklearn para criar combinações de hiperparâmetros a serem testadas.

Este exercicio faz parte do curso

Machine Learning para Finanças em Python

Ver curso

Instruções do exercicio

  • Defina o hiperparâmetro n_estimators como uma lista com um valor (200) no dicionário grid.
  • Defina o hiperparâmetro max_features como uma lista contendo 4 e 8 no dicionário grid.
  • Ajuste o modelo de random forest regressor (rfr, já criado para você) com train_features e train_targets para cada combinação de hiperparâmetros, g, no loop.
  • Calcule R\(^2\) usando rfr.score() em test_features e acrescente o resultado à lista test_scores.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

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 e Executar Código