RandomizedSearchCV

Материал из Documentation.

Перейти к: навигация, поиск



RandomizedSearchCV (Рандомизированный поиск по сетке) — мощный инструмент из библиотеки scikit-learn, используемый для оптимизации гиперпараметров моделей машинного обучения. Он является альтернативой GridSearchCV и часто более эффективен, особенно когда пространство гиперпараметров очень велико.

RandomizedSearchCV случайным образом выбирает фиксированное количество комбинаций гиперпараметров из заданных распределений.

[править] Алгоритм работы с RandomizedSearchCV

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

  • Дискретные списки (как в GridSearchCV).
  • Непрерывные распределения (например, равномерное, логнормальное, целые числа) из модуля scipy.stats.

2. Количество итераций (n_iter): Вы указываете, сколько различных комбинаций гиперпараметров нужно протестировать. Это фиксированное число, независимо от размера пространства поиска.

3. Случайная выборка: На каждой из n_iter итераций:

  • Для каждого гиперпараметра случайным образом выбирается одно значение из его соответствующего распределения.
  • Формируется одна уникальная комбинация гиперпараметров.

4. Обучение и оценка: Модель обучается с этой комбинацией гиперпараметров, и её производительность оценивается с использованием кросс-валидации (как и в GridSearchCV).

5. Выбор лучшей модели: После завершения всех n_iter итераций, RandomizedSearchCV выбирает ту комбинацию гиперпараметров, которая показала наилучшую среднюю оценку на кросс-валидации.

6. Переобучение (опционально): По умолчанию, лучшая модель затем переобучается на всём обучающем наборе данных.

[править] Преимущества и недостатки

Преимущества RandomizedSearchCV:

  1. Эффективность: Главное преимущество. Значительно быстрее GridSearchCV для больших пространств гиперпараметров. Вы можете контролировать вычислительные затраты, просто регулируя n_iter.
  2. Вероятность нахождения хороших результатов: Исследования показали, что в большинстве случаев производительность модели сильно зависит от нескольких ключевых гиперпараметров. RandomizedSearchCV имеет высокую вероятность «попробовать» хорошие значения для этих важных параметров, даже если n_iter относительно невелик. Он не тратит время на перебор всех «плохих» комбинаций.
  3. Гибкость: Позволяет легко искать оптимальные значения в непрерывных пространствах, используя статистические распределения. Это особенно полезно для таких параметров, как скорости обучения, коэффициенты регуляризации, которые часто работают лучше на логарифмической шкале.
  4. Масштабируемость: Лучше подходит для сценариев с большим количеством гиперпараметров или очень широкими диапазонами значений.

Недостатки RandomizedSearchCV:

  1. Нет гарантии глобального оптимума: Поскольку поиск не является исчерпывающим, нет гарантии, что будет найдена абсолютно лучшая комбинация гиперпараметров в заданном пространстве. Однако, как правило, находится «достаточно хорошая» или даже близкая к оптимальной комбинация.
  2. Зависимость от n_iter: Если n_iter слишком мал, можно пропустить хорошие комбинации. Если слишком велик, теряется преимущество в скорости по сравнению с GridSearchCV.
  3. Воспроизводимость: Если не задать random_state, результаты могут немного отличаться при каждом запуске.

[править] Параметры

estimator: Объект модели (например, RandomForestClassifier(), SVC()).

param_distributions: Самый важный параметр. Словарь, где ключи — это имена гиперпараметров, а значения — это:

  • Список дискретных значений (как в GridSearchCV).
  • Объект распределения из scipy.stats (для непрерывных или целочисленных параметров).

n_iter: Количество случайных комбинаций гиперпараметров для тестирования. Чем больше, тем дольше поиск, но выше шанс найти лучшие параметры.

scoring: Метрика, используемая для оценки производительности модели (например, 'accuracy', 'f1', 'roc_auc'). Если не указана, используется метод score модели.

cv: Стратегия кросс-валидации (например, целое число для KFold, или объект кросс-валидации).

refit: (По умолчанию True). Если True, лучшая найденная модель будет переобучена на всем обучающем наборе данных после завершения поиска. Это позволяет вам использовать search.best_estimator_ как готовую к использованию модель.

random_state: Целое число для инициализации генератора случайных чисел. Обеспечивает воспроизводимость результатов.

n_jobs: Количество ядер процессора для использования в параллельных вычислениях.

  • −1: Использовать все доступные ядра.
  • 1: Не использовать параллелизацию.

verbose: Уровень детализации вывода во время выполнения. Чем выше значение, тем больше информации выводится.

return_train_score: (По умолчанию False). Если True, результаты обучения (не только валидации) также будут включены в cv_results_. Полезно для диагностики переобучения.

Личные инструменты