НачатьНачать бесплатно

Настройка гиперпараметров случайного леса

Как и для любой модели, мы стремимся повысить качество предсказаний с помощью настройки гиперпараметров. У случайных лесов таких гиперпараметров немало, однако наиболее важным из них часто является количество признаков, выбираемых при каждом разбиении, — параметр 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])
Редактировать и запускать код