Имеет ли смысл настройка гиперпараметров для случайных лесов?

Вопрос или проблема

У меня есть задача бинарной классификации с существенным дисбалансом классов (99% отрицательных – 1% положительных). Я хочу разработать модель случайного леса для предсказаний, и после установления базового уровня (с параметрами по умолчанию) я перехожу к настройке гиперпараметров с помощью GridSearchCV из scikit-learn.

После установки некоторых параметров (например, max_depth, min_samples_split и т.д.) я заметил, что лучшие параметры, когда GridSearch завершён, это самые высокие max параметры (max_depth) и самые низкие min параметры (min_samples_split, min_samples_leaf). Другими словами, GridSearchCV предпочел комбинацию параметров, которая наиболее точно соответствует тренировочному набору, т.е. переподгоняет его. Я всегда думал, что кросс-валидация защитит от этого сценария.

Следовательно, мой вопрос: “Каков смысл GridSearch, если результат — это переобучение?” Я неправильно понял его назначение?

Мой код:

rf = RandomForestClassifier(random_state=random_state)

param_grid = {
    'n_estimators': [100, 200],
    'criterion': ['entropy', 'gini'],
    'max_depth': [5, 10, 20],
    'min_samples_split': [5, 10],
    'min_samples_leaf': [5, 10],
    'max_features': ['sqrt'],
    'bootstrap': [True],
    'class_weight': ['balanced']
}

rf_grid = GridSearchCV(estimator=rf,
                       param_grid=param_grid,
                       scoring=scoring_metric,
                       cv=5,
                       verbose=False,
                       n_jobs=-1)

best_rf_grid = rf_grid.fit(X_train, y_train)
```

В идеале я сначала займусь крайним дисбалансом, чтобы получить более надежный результат, попробую оверсэмплинг или андерсэмплинг (я предпочитаю оверсэмплинг).

Затем попробую с консервативными параметрами, такими как max_depth только до 10.

Тем не менее, я предпочитаю использовать XGBoost вместо случайного леса, так как у него есть параметр ранней остановки для предотвращения переобучения, хотя нужно быть осторожным, особенно с max_depth.

Затем я использую Optuna для настройки гиперпараметров, он также может использоваться для случайного леса и гораздо быстрее, чем GridSearchCV (особенно с огромными наборами данных).

У вас случай крайне несбалансированного набора данных. Поэтому, пока вы не решите эту проблему, все, что вы делаете, не будет особенно эффективным.

Вот несколько вещей, которые вы можете попробовать, чтобы устранить дисбаланс данных:

1.) Оверсэмплинг или Андерсэмплинг. imblearn может помочь вам с этим.

2.) Модели ансамблевого обучения: Использование моделей бэггинга или бустинга для несбалансированных наборов данных. Вы уже используете модель бэггинга (случайный лес). Вы также можете попробовать balancedbaggingclassifier, присутствующий в библиотеке imblearn. Вот документация на это. Также попробуйте некоторые модели бустинга, такие как XgBoost, CatBoost и т.д.

3.) Выбор правильной метрики для оценки: Вы не упомянули, какую метрику оценки вы используете. Я бы порекомендовал f1_score, но вы также можете использовать precision_score и recall_score в зависимости от вашей задачи.

4.) Получить больше данных. Это может быть наиболее эффективным из всех. Получите больше данных, особенно для класса меньшинства, что снизит эффект дисбаланса.

Поиск по решетке выбирает гиперпараметры, чей средний балл по тестовым фолдам лучший. Это также может соответствовать лучшим баллам по тренировочным фолдам и/или гиперпараметрам с высокой емкостью, но это не обязательно. “Более переобученная” модель все еще может быть лучше, если ее тестовые и производственные оценки лучше.

В вашем случае я замечаю, что ваши параметры решетки все более консервативны, чем параметры по умолчанию. Таким образом, возможно, вам просто нужно увеличить диапазон решетки, прежде чем вы начнете видеть, что действительно переобученные модели работают хуже на тестовых фолдах.

Также вы не указали, какая у вас метрика scoring. Убедитесь, что она имеет отношение к вашей бизнес-проблеме; а в ситуации с 1% положительного класса, вероятно, это не точность.

Ответ или решение

Важно ли провести настройку гиперпараметров для случайного леса?

Введение

Ваша задача по классификации с сильным дисбалансом классов (99% негативный и 1% позитивный) представляет собой серьезное испытание как для выбора модели, так и для процесса настройки гиперпараметров. Использование алгоритма случайного леса (Random Forest) в данном сценарии имеет свои нюансы, особенно когда речь идет о настройке гиперпараметров с помощью GridSearchCV библиотеки scikit-learn.

Анализ проблемы

Вы уже создали базовую модель с параметрами по умолчанию и решили провести настройку гиперпараметров. Однако вы заметили, что оптимальные параметры, найденные в результате GridSearchCV, приводят к переобучению модели. Основной вопрос заключается в том, есть ли смысл в настройке гиперпараметров, если результаты не соответствуют ожиданиям и черезмерно подстраиваются под обучающую выборку.

Настройка гиперпараметров и ее цель

Цель настройки гиперпараметров заключается в улучшении производительности модели путем подбора оптимальных значений параметров, таких как max_depth, min_samples_split, и других. Проведение такого процесса с помощью кросс-валидации, как GridSearchCV, позволяет уменьшить риск переобучения, поскольку модель проверяется на нескольких подвыборках данных. Однако, в вашем случае, если метрики, используемые для оптимизации, не согласованы с вашим целевым показателем (например, если вы используете простую точность при сильном дисбалансе классов), это может привести к неправильным выводам о качестве модели.

Влияние дисбаланса классов

Сильный дисбаланс между классами может существенно искажать результаты моделирования. Например, модель, просто предсказывающая мажоритарный класс, может достигать высокой точности без хорошего понимания редкого класса. Поэтому вам стоит рассмотреть возможность предварительной обработки данных для устранения дисбаланса, например, с помощью таких методов, как oversampling (увеличение меньшинства) или undersampling (уменьшение большинства). Библиотека imblearn предоставляет множество инструментов для этой цели.

Оптимизация гиперпараметров: лучшие практики

  1. Правильный выбор метрик: Убедитесь, что метрика, используемая в GridSearchCV, адекватно отражает вашу задачу. Если ваш целевой класс составляет только 1%, возможно, стоит использовать f1_score, precision_score или recall_score вместо простой точности.

  2. Рассмотрите использование более адаптивных моделей: Алгоритмы, такие как XGBoost и CatBoost, часто предоставляют более мощные средства для работы с дисбалансом классов и включают функции, такие как ранняя остановка, для предотвращения переобучения.

  3. Расширьте диапазоны параметров: Если параметры вашей модели ограничены, возможно, стоит протестировать более широкий диапазон для поиска значений, которые приведут к лучшему обобщению модели за пределами данных обучения.

  4. Используйте альтернативные методы настройки: Рассмотрите применение других методов оптимизации, таких как Optuna, которые могут быть эффективнее, особенно при работе с большими наборами данных.

Заключение

Настройка гиперпараметров для Random Forest имеет значение, однако, необходимо учитывать специфику вашей задачи, такие как дисбаланс классов. Устранение этой проблемы с помощью предварительной обработки данных и выбор соответствующих метрик оценки позволят получить более стабильные и надежные результаты. Вместо простой настройки гиперпараметров стоит рассмотреть более комплексный подход, включающий различные методы обработки дисбаланса, выбор метрик и адаптацию к конкретным условиям вашей задачи.

Оцените материал
Добавить комментарий

Капча загружается...