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
Instruções do exercicio
- Defina o hiperparâmetro
n_estimatorscomo uma lista com um valor (200) no dicionáriogrid. - Defina o hiperparâmetro
max_featurescomo uma lista contendo 4 e 8 no dicionáriogrid. - Ajuste o modelo de random forest regressor (
rfr, já criado para você) comtrain_featuresetrain_targetspara cada combinação de hiperparâmetros,g, no loop. - Calcule R\(^2\) usando
rfr.score()emtest_featurese acrescente o resultado à listatest_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])