Настройка гиперпараметров случайного леса
Как и для любой модели, мы стремимся повысить качество предсказаний с помощью настройки гиперпараметров. У случайных лесов таких гиперпараметров немало, однако наиболее важным из них часто является количество признаков, выбираемых при каждом разбиении, — параметр max_features в RandomForestRegressor из библиотеки sklearn. Для моделей со встроенной случайностью, таких как случайный лес, важно также задавать random_state, чтобы результаты можно было воспроизвести.
Обычно для поиска гиперпараметров используют метод GridSearchCV() из sklearn, однако для финансовых временных рядов кросс-валидация не подходит: она приводит к смешению данных. Мы хотим обучать модели на более ранних данных и проверять их на более поздних. Поэтому воспользуемся ParameterGrid из sklearn, чтобы сформировать все комбинации гиперпараметров для перебора.
Это упражнение является частью курса
Машинное обучение для финансов на Python
Инструкции к упражнению
- Задайте гиперпараметр
n_estimatorsв словареgridв виде списка с одним значением (200). - Задайте гиперпараметр
max_featuresв словареgridв виде списка, содержащего значения 4 и 8. - Обучите регрессор случайного леса (
rfr, уже создан за вас) наtrain_featuresиtrain_targetsдля каждой комбинации гиперпараметровgв цикле. - Вычислите R\(^2\) с помощью
rfr.score()наtest_featuresи добавьте результат в списокtest_scores.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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])