Настройка гиперпараметров — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Гиперпараметры)
(Grid search done)
Строка 14: Строка 14:
 
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.
 
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.
  
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn.
+
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.
  
[[Файл:KNeighborsClassifier_model.png|800px|thumb|left|  Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.]]
+
[[Файл:KNeighborsClassifier_model.png|center|1000px]]  
  
 
== Техники настройки гиперпараметров ==
 
== Техники настройки гиперпараметров ==
Строка 22: Строка 22:
 
=== Grid search ===
 
=== Grid search ===
  
Принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.
+
==== Общая информация ====
 +
 
 +
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров).  
 +
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.
 +
 
 +
==== Sklearn Grid search: использование ====
  
 
Пример использования Grid search из библиотеки scikit-learn:
 
Пример использования Grid search из библиотеки scikit-learn:
Строка 28: Строка 33:
 
# Создание экземпляра класса  SGDClassifier (из sklearn)
 
# Создание экземпляра класса  SGDClassifier (из sklearn)
 
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
 
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
# Создание экземпляра класса кросс-валидации.
+
# Создание экземпляра класса кросс-валидации
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технику кросс-валидации), четвертый - кросс-# # # валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
+
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
 
# Запуск поиска по сетке.
 
# Запуск поиска по сетке.
  
здесь будет картинка
+
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]]
 
 
  
Важные атрибуты GridSearch
+
==== Sklearn Grid search: важные атрибуты ====
  
 
* best_estimator_  - лучшая модель
 
* best_estimator_  - лучшая модель
 
* best_score_  - ошибка, полученная на лучшей модели.
 
* best_score_  - ошибка, полученная на лучшей модели.
* best_params_  - гиперпараметры лучшей модели
+
* best_params_  - гиперпараметры лучшей модели <br>
  
картинка
+
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] <br>
  
* cv_results_  - результаты всех моделей.
+
* cv_results_  - результаты всех моделей. <br>
  
картинка
+
[[Файл:KNeighborsClassifier_results.png|center|1000px]] <br>
  
* доступ к массиву определенного параметра:
+
* доступ к массиву определенного параметра: <br>
  
картинка
+
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] <br>
  
==== Реализация ====
+
==== Реализация Grid search в библеотеках====
 
* Katib
 
* Katib
 
* scikit-learn
 
* scikit-learn
Строка 59: Строка 63:
  
 
=== Random grid search ===
 
=== Random grid search ===
 +
 +
==== Основная информация ====
  
 
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов,происходит сужение области поиска. Random grid search будет гораздо полезнее, чем  grid search в ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.
 
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов,происходит сужение области поиска. Random grid search будет гораздо полезнее, чем  grid search в ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.
  
==== Реализация ====
+
==== Реализация Random grid ====
  
 
* hyperopt
 
* hyperopt

Версия 12:16, 20 апреля 2020

Гиперпараметры

Гиперпараметры - параметры, которые не настраиваются во время обучения модели.

Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением.
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.

Для подбора гиперпараметров необходимо разделить датасет на три части:

  • training set (тренировочный набор данных, для обучении модели)
  • validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)
  • test set (тестовый набор данных, для тестирования лучшей модели)

Зачем нам нужен и валидационный, и тестовый набор?
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.

Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.

KNeighborsClassifier model.png

Техники настройки гиперпараметров

Grid search

Общая информация

Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.

Sklearn Grid search: использование

Пример использования Grid search из библиотеки scikit-learn:

  1. Создание экземпляра класса SGDClassifier (из sklearn)
  2. Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.
  3. Создание экземпляра класса кросс-валидации
  4. Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)
  5. Запуск поиска по сетке.
KNeighborsClassifier exmpl.png

Sklearn Grid search: важные атрибуты

  • best_estimator_ - лучшая модель
  • best_score_ - ошибка, полученная на лучшей модели.
  • best_params_ - гиперпараметры лучшей модели
KNeighborsClassifier bestest.png

  • cv_results_ - результаты всех моделей.
KNeighborsClassifier results.png

  • доступ к массиву определенного параметра:
KNeighborsClassifier param array.png

Реализация Grid search в библеотеках

  • Katib
  • scikit-learn
  • Tune
  • Talos


Random grid search

Основная информация

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

Реализация Random grid

  • hyperopt
  • Katib
  • scikit-learn
  • Tune
  • Talos


SMBO

SMBO - Sequential Model-Based Optimization (Методы последовательной оптимизации на основе моделей)

SMBO являются формализацией байесовской оптимизации.

На каждом шаге SMBO:

  1. SMBO выбирает текущий набор гиперпараметров на основе предыдущих результатов и Байесовский рассуждений. Делается это для того, чтобы сузить область поиска и сосредоточиться на том, что наиболее перспективно.
  2. происходит запуск модели с текущими гиперпараметрами
  3. обновляется вероятностная модель.

Существует пять ключевых аспектов SMBO:

  • Сетка значений гиперпараметров (область поиска)
  • Целевая функция, которая принимает гиперпараметры и выводит оценку, которую мы хотим минимизировать (или максимизировать)
  • Вероятностная модель целевой функции
  • Критерий, называемый функцией выбора, для оценки того, какие гиперпараметры выбрать следующим из вероятностной модели.
  • История, состоящая из пар <оценка, гиперпараметр>, используемая алгоритмом для обновления вероятностной модели.

Существует несколько вариантов SMBO оптимизации, которые отличаются между собой в 3 и 4 пунктах: есть различные варианты построения вероятностной модели целевой функции и выбора критерия. Вероятностные модели (3 пункт): Gaussian Processes, Random Forest Regressions, and Tree Parzen Estimators (TPE). Популярный критерий (4 пункт): Expected Improvement


TPE

TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)

Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:

формула

SMAC

расширяет подходы SMBO

В частности, разработаны подходы обработки данных:

  • дискретные и условные пространства параметров (с учетом

оптимизация параметров категориального алгоритма и параметров, между которыми существуют зависимости);

  • существенный негауссовский шум (из-за дисперсии в

распределение времени выполнения алгоритма по экземплярам задач и несколько независимых запусков на одном экземпляре);

  • частично цензурированные оценки функций (из-за преждевременного

завершенные запуски алгоритма);

  • бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций;