<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AnneKsatn</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AnneKsatn"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/AnneKsatn"/>
		<updated>2026-08-04T13:37:13Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74019</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74019"/>
				<updated>2020-04-23T11:53:41Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;, SMAC строит распределение результатов модели для  &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;.&lt;br /&gt;
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;]. &lt;br /&gt;
После нахождения &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt; необходимо найти конфигурацию с наибольшим значением &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. Эта задача приводит к проблеме максимизация значения на всем пространстве конфигураций.&lt;br /&gt;
Другие методы SMBO максимизируют значения а случайной выборке из пространства конфигураций, что достаточно плохо работает в случае высокомерного пространства.&lt;br /&gt;
SMAC применяет немного другой подход: выполняется несколько локальных и поисков и среди них выбираются все конфигурации с максимальным &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. И уже среди них производится новый поиск и выбирается лучшая конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
[http://neerc.ifmo.ru/wiki/index.php?title=Машинное_обучение Викиконспекты: Машинное обучение]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74018</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74018"/>
				<updated>2020-04-23T11:49:23Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;, SMAC строит распределение результатов модели для  &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;.&lt;br /&gt;
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;]. &lt;br /&gt;
После нахождения &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt; необходимо найти конфигурацию с наибольшим значением &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. Эта задача приводит к проблеме максимизация значения на всем пространстве конфигураций.&lt;br /&gt;
Другие методы SMBO максимизируют значения а случайной выборке из пространства конфигураций, что достаточно плохо работает в случае высокомерного пространства.&lt;br /&gt;
SMAC применяет немного другой подход: выполняется несколько локальных и поисков и среди них выбираются все конфигурации с максимальным &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. И уже среди них производится новый поиск и выбирается лучшая конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74017</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74017"/>
				<updated>2020-04-23T11:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* SMAC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;, SMAC строит распределение результатов модели для  &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;.&lt;br /&gt;
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf EI]. &lt;br /&gt;
После нахождения &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt; необходимо найти конфигурацию с наибольшим значением &amp;lt;math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. Эта задача приводит к проблеме максимизация значения на всем пространстве конфигураций.&lt;br /&gt;
Другие методы SMBO максимизируют значения а случайной выборке из пространства конфигураций, что достаточно плохо работает в случае высокомерного пространства.&lt;br /&gt;
SMAC применяет немного другой подход: выполняется несколько локальных и поисков и среди них выбираются все конфигурации с максимальным EI. И уже среди них производится новый поиск и выбирается лучшая конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74016</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74016"/>
				<updated>2020-04-23T11:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;, SMAC строит распределение результатов модели для  &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;.&lt;br /&gt;
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf EI]. &lt;br /&gt;
После нахождения math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt; необходимо найти конфигурацию с наибольшим значением math&amp;gt; EI(\theta) &amp;lt;/math&amp;gt;. Эта задача приводит к проблеме максимизация значения на всем пространстве конфигураций.&lt;br /&gt;
Другие методы SMBO максимизируют значения а случайной выборке из пространства конфигураций, что достаточно плохо работает в случае высокомерного пространства.&lt;br /&gt;
SMAC применяет немного другой подход: выполняется несколько локальных и поисков и среди них выбираются все конфигурации с максимальным EI. И уже среди них производится новый поиск и выбирается лучшая конфигурация.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74015</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74015"/>
				<updated>2020-04-23T11:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* SMAC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
Кроме того, SMAC использует переданную ему модель для формирования списка перспективных конфигураций (сочетаний) параметров. Чтобы оценить перспективность конфигурация &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;, SMAC строит распределение результатов модели для  &amp;lt;math&amp;gt; \theta &amp;lt;/math&amp;gt;.&lt;br /&gt;
С помощью этого распределения, а также информации, о текущей лучшей конфигурации, SMAC вычисляет ожидаемое положительное улучшение [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf EI]. И на основе этого делает выбор о наилучшей конфигурации.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74014</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74014"/>
				<updated>2020-04-23T11:15:33Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.cs.ubc.ca/~hutter/papers/10-TR-SMAC.pdf Sequential Model-Based Optimization for General Algorithm Configuration]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74013</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74013"/>
				<updated>2020-04-23T11:11:57Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значениях целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74012</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74012"/>
				<updated>2020-04-23T11:11:21Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значений целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: &amp;lt;math&amp;gt; argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74011</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74011"/>
				<updated>2020-04-23T11:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значений целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# Возвращается значение: argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74010</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74010"/>
				<updated>2020-04-23T11:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В TPE задается два различных распределения гиперпараметров: первое при значениях целевой функции меньших, чем пороговое значение. Второе - при значений целевой функции больших, чем пороговое значение.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм ====&lt;br /&gt;
&lt;br /&gt;
# На вход подается список пар (parameters, loss)&lt;br /&gt;
# По заданному порогу, происходит разбиение списка на 2 части&lt;br /&gt;
# Для каждого списка строится распределение&lt;br /&gt;
# &amp;lt;math&amp;gt; \mbox{ Return }argmin_{param} \frac{g(param)}{l(param)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74009</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74009"/>
				<updated>2020-04-23T10:54:55Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров, &amp;lt;math&amp;gt; y &amp;lt;/math&amp;gt; —  значение целевой функции,  &amp;lt;math&amp;gt; y* &amp;lt;/math&amp;gt; — пороговое начение&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74008</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74008"/>
				<updated>2020-04-23T10:53:02Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if }  y &amp;lt; y* \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if }  y \ge y*&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74007</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74007"/>
				<updated>2020-04-23T10:50:49Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;  p(x|y) = \begin{cases}&lt;br /&gt;
  l(x),  &amp;amp; \mbox{if } n \mbox{ is even} \\&lt;br /&gt;
  g(x), &amp;amp; \mbox{if } n \mbox{ is odd}&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74006</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74006"/>
				<updated>2020-04-23T10:35:28Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74005</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74005"/>
				<updated>2020-04-23T10:34:31Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* [https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf Algorithms for Hyper-Parameter Optimization]&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74004</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74004"/>
				<updated>2020-04-23T10:33:25Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация Random grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74003</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74003"/>
				<updated>2020-04-23T10:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: реструктурирование&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74002</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74002"/>
				<updated>2020-04-23T10:25:49Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
 &lt;br /&gt;
* [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
[https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74001</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74001"/>
				<updated>2020-04-23T10:25:28Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
[https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74000</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=74000"/>
				<updated>2020-04-23T10:25:00Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: [https://www.automl.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
* Tree Parzen Estimators: [https://hyperopt.github.io/hyperopt/#algorithms Hyperopt]&lt;br /&gt;
* Gaussian Processes: [https://devhub.io/repos/automl-spearmint Spearmint], [https://scikit-optimize.github.io/stable/modules/classes.html#module-skopt.optimizer Scikit-optimize]&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73999</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73999"/>
				<updated>2020-04-23T10:20:12Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация Random grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Ray]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html scikit-learn]&lt;br /&gt;
* [https://ray.readthedocs.io/en/latest/tune-searchalg.html#variant-generation-grid-search-random-search Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#models Talos]&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73998</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73998"/>
				<updated>2020-04-23T09:32:52Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация Grid search в библеотеках */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html scikit-learn]&lt;br /&gt;
* [https://github.com/kubeflow/katib Katib]&lt;br /&gt;
* [https://tidymodels.github.io/tune/articles/grid.html Tune]&lt;br /&gt;
* [https://autonomio.github.io/docs_talos/#grid-search Talos]&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73997</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73997"/>
				<updated>2020-04-23T09:20:59Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Sklearn Grid search: использование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False, class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000, n_iter_no_change=5, n_jobs=None, &lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05, 3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
                                       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05, 8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73996</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73996"/>
				<updated>2020-04-23T09:19:35Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Sklearn Grid search: важные атрибуты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), &lt;br /&gt;
                 error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False,&lt;br /&gt;
                                     class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True,&lt;br /&gt;
                                     l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000,&lt;br /&gt;
                                     n_iter_no_change=5, n_jobs=None,&lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05,&lt;br /&gt;
       3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05,&lt;br /&gt;
       8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None, early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6, n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1, verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73995</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73995"/>
				<updated>2020-04-23T09:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Гиперпараметры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели (loss, penalty, alpha и т.д), с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
    class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, &lt;br /&gt;
                                         tol=0.001, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', &lt;br /&gt;
                                         eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, &lt;br /&gt;
                                         warm_start=False, average=False)&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), &lt;br /&gt;
                 error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False,&lt;br /&gt;
                                     class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True,&lt;br /&gt;
                                     l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000,&lt;br /&gt;
                                     n_iter_no_change=5, n_jobs=None,&lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05,&lt;br /&gt;
       3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05,&lt;br /&gt;
       8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None,&lt;br /&gt;
                   early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6,&lt;br /&gt;
                   n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1,&lt;br /&gt;
                   verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73994</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73994"/>
				<updated>2020-04-23T09:14:58Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Sklearn Grid search: важные атрибуты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), &lt;br /&gt;
                 error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False,&lt;br /&gt;
                                     class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True,&lt;br /&gt;
                                     l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000,&lt;br /&gt;
                                     n_iter_no_change=5, n_jobs=None,&lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05,&lt;br /&gt;
       3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05,&lt;br /&gt;
       8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_estimator_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: SGDClassifier(alpha=4.857142857142857e-05, average=False, class_weight=None,&lt;br /&gt;
                   early_stopping=False, epsilon=0.1, eta0=1e-05, fit_intercept=True,&lt;br /&gt;
                   l1_ratio=0.15, learning_rate='optimal', loss='hinge', max_iter=6,&lt;br /&gt;
                   n_iter_no_change=5, n_jobs=None, penalty='l2', power_t=0.5,&lt;br /&gt;
                   random_state=0, shuffle=True, tol=0.001, validation_fraction=0.1,&lt;br /&gt;
                   verbose=0, warm_start=False)&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_score_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: 0.9099999999999999&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.best_params_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out: {'alpha': 4.857142857142857e-05, 'eta0': 1e-05, 'learning_rate': 'optimal', 'max_iter': 6}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    print(grid_cv.cv_results_) &amp;lt;br&amp;gt;&lt;br /&gt;
    Out:&lt;br /&gt;
        {'mean_fit_time': array([0.00209482, 0.00120714, 0.00089645, ..., 0.00109975, 0.00100021,&lt;br /&gt;
        0.00099928]),&lt;br /&gt;
        'std_fit_time': array([1.22382854e-03, 6.21233347e-04, 5.32190271e-04, ...,&lt;br /&gt;
            3.11922473e-04, 1.27400324e-05, 1.94000071e-06]),&lt;br /&gt;
        'mean_score_time': array([2.00700760e-04, 0.00000000e+00, 2.99715996e-04, ...,&lt;br /&gt;
            1.99961662e-04, 2.96926498e-04, 9.98973846e-05]),&lt;br /&gt;
        'std_score_time': array([0.0004014 , 0.        , 0.00045782, ..., 0.00039992, 0.00045363,&lt;br /&gt;
           0.00029969]),&lt;br /&gt;
         ...... }&lt;br /&gt;
&lt;br /&gt;
     print(grid_cv.cv_results_['param_max_iter'].data) &amp;lt;br&amp;gt;&lt;br /&gt;
     Out: array([5, 6, 7, ..., 7, 8, 9], dtype=object)&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73993</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73993"/>
				<updated>2020-04-23T09:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Sklearn Grid search: использование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), &lt;br /&gt;
                 error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False,&lt;br /&gt;
                                     class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True,&lt;br /&gt;
                                     l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000,&lt;br /&gt;
                                     n_iter_no_change=5, n_jobs=None,&lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05,&lt;br /&gt;
       3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05,&lt;br /&gt;
       8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73992</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73992"/>
				<updated>2020-04-23T08:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: Замена первой картинки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    classifier = linear_model.SGDClassifier(random_state = 0, tol=1e-3)&lt;br /&gt;
&lt;br /&gt;
    parameters_grid = {&lt;br /&gt;
        'alpha' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
        'eta0' : np.linspace(0.00001, 0.0001, 15),&lt;br /&gt;
        'max_iter' : np.arange(5,10),&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    cv = model_selection.StratifiedShuffleSplit(n_splits=10, test_size = 0.2)&lt;br /&gt;
    grid_cv = model_selection.GridSearchCV(classifier, parameters_grid, scoring = 'accuracy', cv = cv)&lt;br /&gt;
    grid_cv.fit(train_data, test_data)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
    Out:&lt;br /&gt;
    GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=0, test_size=0.2, train_size=None), &lt;br /&gt;
                 error_score=nan,&lt;br /&gt;
                 estimator=SGDClassifier(alpha=0.0001, average=False,&lt;br /&gt;
                                     class_weight=None, early_stopping=False,&lt;br /&gt;
                                     epsilon=0.1, eta0=0.0, fit_intercept=True,&lt;br /&gt;
                                     l1_ratio=0.15, learning_rate='optimal',&lt;br /&gt;
                                     loss='hinge', max_iter=1000,&lt;br /&gt;
                                     n_iter_no_change=5, n_jobs=None,&lt;br /&gt;
                                     penalty='l2...&lt;br /&gt;
                         'eta0': array([1.00000000e-05, 1.64285714e-05, 2.28571429e-05, 2.92857143e-05,&lt;br /&gt;
       3.57142857e-05, 4.21428571e-05, 4.85714286e-05, 5.50000000e-05,&lt;br /&gt;
       6.14285714e-05, 6.78571429e-05, 7.42857143e-05, 8.07142857e-05,&lt;br /&gt;
       8.71428571e-05, 9.35714286e-05, 1.00000000e-04]),&lt;br /&gt;
                         'learning_rate': ['optimal', 'constant', 'invscaling'],&lt;br /&gt;
                         'max_iter': array([5, 6, 7, 8, 9])},&lt;br /&gt;
             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,&lt;br /&gt;
             scoring='accuracy', verbose=0)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73989</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73989"/>
				<updated>2020-04-22T17:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: источники&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Общая информация ===&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: использование ===&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
=== Sklearn Grid search: важные атрибуты ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Реализация Grid search в библеотеках ===&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random grid search ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
=== Реализация Random grid ===&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SMBO  ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
== TPE ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
== SMAC ==&lt;br /&gt;
&lt;br /&gt;
=== Основная информация ===&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
* AutoML&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [https://towardsdatascience.com/hyperparameters-optimization-526348bb8e2d Hyperparameters Optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=u6MG_UTwiIQ Bayesian optimization]&lt;br /&gt;
* [https://www.youtube.com/watch?v=PgJMLpIfIc8 Гауссовские процессы и байесовская оптимизация]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html GridSearchCV sklearn]&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73988</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73988"/>
				<updated>2020-04-22T16:57:32Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: форматирование текста&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель &amp;lt;code&amp;gt;KNeighborsClassifier&amp;lt;/code&amp;gt; из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  &amp;lt;code&amp;gt;SGDClassifier&amp;lt;/code&amp;gt; (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра &amp;lt;code&amp;gt;GridSearch&amp;lt;/code&amp;gt; (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;best_estimator_&amp;lt;/code&amp;gt;  — лучшая модель&lt;br /&gt;
* &amp;lt;code&amp;gt;best_score_&amp;lt;/code&amp;gt;  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* &amp;lt;code&amp;gt;best_params_&amp;lt;/code&amp;gt; — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cv_results_&amp;lt;/code&amp;gt;  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73987</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73987"/>
				<updated>2020-04-22T16:50:54Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: форматирование&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель ''KNeighborsClassifier'' из библиотеки ''sklearn''. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования ''Grid search'' из библиотеки ''scikit-learn'':&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  ''SGDClassifier'' (из ''sklearn'')&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра ''GridSearch'' (из ''sklearn''). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* ''best_estimator_''  — лучшая модель&lt;br /&gt;
* ''best_score_''  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* ''best_params_'' — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''cv_results_''  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73984</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73984"/>
				<updated>2020-04-22T16:41:15Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: замена деф. на тире&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры — параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра — шаг градиентного спуска, он задается перед обучением. Пример параметров — веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр — модель, второй — сетка гиперпараметров, третий — функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый — кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  — лучшая модель&lt;br /&gt;
* best_score_  — ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  — гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  — результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма — мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) — методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO — замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE — Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; — распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73983</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73983"/>
				<updated>2020-04-22T16:36:59Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: форматирование текста&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели.  Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; - распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73854</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73854"/>
				<updated>2020-04-20T11:06:28Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Реализация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; - распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* Hyperopt&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73853</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73853"/>
				<updated>2020-04-20T11:05:57Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* TPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; - распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73852</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73852"/>
				<updated>2020-04-20T11:05:27Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* TPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; - распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73851</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73851"/>
				<updated>2020-04-20T11:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* TPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель &amp;lt;math&amp;gt; {p(y|x)} &amp;lt;/math&amp;gt;. В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; p(y) = \frac{p(x|y) * p(y)}{p(x)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; {p(x|y)} &amp;lt;/math&amp;gt; - распределение гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;  \left \{ \frac{x}{y} } &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73848</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73848"/>
				<updated>2020-04-20T11:00:08Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* TPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Как было написано выше, методы SMBO отличаются тем, как они строят вероятностную модель p (y|x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{x}{y} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73847</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73847"/>
				<updated>2020-04-20T10:51:07Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73846</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73846"/>
				<updated>2020-04-20T10:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использует дискретные и условные пространства параметров.&lt;br /&gt;
* Обрабатывает негауссовский шум.&lt;br /&gt;
* Выделеяет бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73845</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73845"/>
				<updated>2020-04-20T10:50:00Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* SMAC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMAC использует Random Forest regression и расширяет подходы SMBO:&lt;br /&gt;
&lt;br /&gt;
* Использование дискретных и условных пространств параметров.&lt;br /&gt;
* Обработка негауссовского шума.&lt;br /&gt;
* Выделение бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* AutoML&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73844</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73844"/>
				<updated>2020-04-20T10:38:56Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* SMBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
SMBO (Sequential Model-Based Optimization) - методы, основанные на байесовской оптимизации&lt;br /&gt;
&lt;br /&gt;
Когда используют SMBO? &amp;lt;br&amp;gt;&lt;br /&gt;
Когда оптимизация целевой функции будет стоить очень &amp;quot;дорого&amp;quot;. Главная идея SMBO - замена целевой функции &amp;quot;суррогатной&amp;quot; функцией.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге работы SMBO:&lt;br /&gt;
&lt;br /&gt;
# Строится вероятностная модель (суррогатная функция) целевой функции.&lt;br /&gt;
# Подбираются гиперпараметры, которые лучше всего подходят для вероятностной модели.&lt;br /&gt;
# Подобранные гиперпараметры применяются к целевой функции.&lt;br /&gt;
# Вероятностная модель перестраивается (обновляется).&lt;br /&gt;
# Шаги 2-4 повторяются столько раз, сколько задал пользователь.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Существует четыре ключевые аспекта SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска).&lt;br /&gt;
* Целевая функция (выводит оценку, которую мы хотим минимизировать или максимизировать).&lt;br /&gt;
* Вероятностная модель целевой функции (суррогатная функция).&lt;br /&gt;
* Критерий, называемый функцией выбора (для выбора следующих гиперпараметры по текущей вероятностной модели).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются между собой вероятностными моделями и функциями выбора: &amp;lt;br&amp;gt;&lt;br /&gt;
Популярные вероятностные модели (суррогатные функции):&lt;br /&gt;
* Gaussian Processes&lt;br /&gt;
* Tree Parzen Estimators (TPE)&lt;br /&gt;
* Random Forest Regressions&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Random Forest Regressions: SMAC&lt;br /&gt;
* Tree Parzen Estimators: Hyperopt&lt;br /&gt;
* Gaussian Processes: Spearmint, Scikit-optimize&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
расширяет подходы SMBO &lt;br /&gt;
&lt;br /&gt;
В частности, разработаны подходы обработки данных:&lt;br /&gt;
&lt;br /&gt;
* дискретные и условные пространства параметров  (с учетом&lt;br /&gt;
оптимизация параметров категориального алгоритма и параметров, между которыми существуют зависимости);&lt;br /&gt;
* существенный негауссовский шум (из-за дисперсии в&lt;br /&gt;
распределение времени выполнения алгоритма по экземплярам задач и&lt;br /&gt;
несколько независимых запусков на одном экземпляре);&lt;br /&gt;
* частично цензурированные оценки функций (из-за преждевременного&lt;br /&gt;
завершенные запуски алгоритма);&lt;br /&gt;
* бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73836</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73836"/>
				<updated>2020-04-20T09:18:21Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Основная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов, происходит сужение области поиска. &lt;br /&gt;
&lt;br /&gt;
Когда random grid search будет гораздо полезнее, чем  grid search? &amp;lt;br&amp;gt;&lt;br /&gt;
В ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
SMBO - Sequential Model-Based Optimization (Методы последовательной оптимизации на основе моделей) &lt;br /&gt;
&lt;br /&gt;
SMBO являются формализацией байесовской оптимизации.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге SMBO:&lt;br /&gt;
# SMBO выбирает текущий набор гиперпараметров на основе предыдущих результатов и Байесовский рассуждений. Делается это для того, чтобы сузить область поиска и сосредоточиться на том, что наиболее перспективно.&lt;br /&gt;
# происходит запуск модели с текущими гиперпараметрами&lt;br /&gt;
# обновляется вероятностная модель.&lt;br /&gt;
&lt;br /&gt;
Существует пять ключевых аспектов SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска)&lt;br /&gt;
* Целевая функция, которая принимает гиперпараметры и выводит оценку, которую мы хотим минимизировать (или максимизировать)&lt;br /&gt;
* Вероятностная модель целевой функции&lt;br /&gt;
* Критерий, называемый функцией выбора, для оценки того, какие гиперпараметры выбрать следующим из  вероятностной модели.&lt;br /&gt;
* История, состоящая из пар &amp;lt;оценка, гиперпараметр&amp;gt;, используемая алгоритмом для обновления вероятностной модели.&lt;br /&gt;
&lt;br /&gt;
Существует несколько вариантов SMBO оптимизации, которые отличаются между собой в 3 и 4 пунктах: есть различные варианты построения вероятностной модели целевой функции и выбора критерия.&lt;br /&gt;
Вероятностные модели (3 пункт): Gaussian Processes, Random Forest Regressions, and Tree Parzen Estimators (TPE).&lt;br /&gt;
Популярный критерий (4 пункт): Expected Improvement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
расширяет подходы SMBO &lt;br /&gt;
&lt;br /&gt;
В частности, разработаны подходы обработки данных:&lt;br /&gt;
&lt;br /&gt;
* дискретные и условные пространства параметров  (с учетом&lt;br /&gt;
оптимизация параметров категориального алгоритма и параметров, между которыми существуют зависимости);&lt;br /&gt;
* существенный негауссовский шум (из-за дисперсии в&lt;br /&gt;
распределение времени выполнения алгоритма по экземплярам задач и&lt;br /&gt;
несколько независимых запусков на одном экземпляре);&lt;br /&gt;
* частично цензурированные оценки функций (из-за преждевременного&lt;br /&gt;
завершенные запуски алгоритма);&lt;br /&gt;
* бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73835</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73835"/>
				<updated>2020-04-20T09:16:00Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: Grid search done&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn. Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Общая информация ====&lt;br /&gt;
&lt;br /&gt;
Grid search принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). &lt;br /&gt;
Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: использование ====&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технике кросс-валидации), четвертый - кросс-валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_exmpl.png|center|1000px]] &lt;br /&gt;
&lt;br /&gt;
==== Sklearn Grid search: важные атрибуты ====&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_bestest.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_results.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_param_array.png|center|1000px]] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Реализация Grid search в библеотеках====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
==== Основная информация ====&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов,происходит сужение области поиска. Random grid search будет гораздо полезнее, чем  grid search в ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация Random grid ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
SMBO - Sequential Model-Based Optimization (Методы последовательной оптимизации на основе моделей) &lt;br /&gt;
&lt;br /&gt;
SMBO являются формализацией байесовской оптимизации.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге SMBO:&lt;br /&gt;
# SMBO выбирает текущий набор гиперпараметров на основе предыдущих результатов и Байесовский рассуждений. Делается это для того, чтобы сузить область поиска и сосредоточиться на том, что наиболее перспективно.&lt;br /&gt;
# происходит запуск модели с текущими гиперпараметрами&lt;br /&gt;
# обновляется вероятностная модель.&lt;br /&gt;
&lt;br /&gt;
Существует пять ключевых аспектов SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска)&lt;br /&gt;
* Целевая функция, которая принимает гиперпараметры и выводит оценку, которую мы хотим минимизировать (или максимизировать)&lt;br /&gt;
* Вероятностная модель целевой функции&lt;br /&gt;
* Критерий, называемый функцией выбора, для оценки того, какие гиперпараметры выбрать следующим из  вероятностной модели.&lt;br /&gt;
* История, состоящая из пар &amp;lt;оценка, гиперпараметр&amp;gt;, используемая алгоритмом для обновления вероятностной модели.&lt;br /&gt;
&lt;br /&gt;
Существует несколько вариантов SMBO оптимизации, которые отличаются между собой в 3 и 4 пунктах: есть различные варианты построения вероятностной модели целевой функции и выбора критерия.&lt;br /&gt;
Вероятностные модели (3 пункт): Gaussian Processes, Random Forest Regressions, and Tree Parzen Estimators (TPE).&lt;br /&gt;
Популярный критерий (4 пункт): Expected Improvement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
расширяет подходы SMBO &lt;br /&gt;
&lt;br /&gt;
В частности, разработаны подходы обработки данных:&lt;br /&gt;
&lt;br /&gt;
* дискретные и условные пространства параметров  (с учетом&lt;br /&gt;
оптимизация параметров категориального алгоритма и параметров, между которыми существуют зависимости);&lt;br /&gt;
* существенный негауссовский шум (из-за дисперсии в&lt;br /&gt;
распределение времени выполнения алгоритма по экземплярам задач и&lt;br /&gt;
несколько независимых запусков на одном экземпляре);&lt;br /&gt;
* частично цензурированные оценки функций (из-за преждевременного&lt;br /&gt;
завершенные запуски алгоритма);&lt;br /&gt;
* бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_param_array.png&amp;diff=73834</id>
		<title>Файл:KNeighborsClassifier param array.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_param_array.png&amp;diff=73834"/>
				<updated>2020-04-20T09:05:52Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_results.png&amp;diff=73833</id>
		<title>Файл:KNeighborsClassifier results.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_results.png&amp;diff=73833"/>
				<updated>2020-04-20T09:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_bestest.png&amp;diff=73832</id>
		<title>Файл:KNeighborsClassifier bestest.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_bestest.png&amp;diff=73832"/>
				<updated>2020-04-20T09:00:29Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_exmpl.png&amp;diff=73831</id>
		<title>Файл:KNeighborsClassifier exmpl.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_exmpl.png&amp;diff=73831"/>
				<updated>2020-04-20T08:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73830</id>
		<title>Настройка гиперпараметров</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%B8%D0%BF%D0%B5%D1%80%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2&amp;diff=73830"/>
				<updated>2020-04-20T08:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: /* Гиперпараметры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Гиперпараметры ==&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры - параметры, которые не настраиваются во время обучения модели. &lt;br /&gt;
&lt;br /&gt;
Пример гиперпараметра - шаг градиентного спуска, он задается перед обучением. &amp;lt;br&amp;gt;&lt;br /&gt;
Пример параметров - веса градиентного спуска, они изменяются и настраиваются во время обучения.&lt;br /&gt;
&lt;br /&gt;
Для подбора гиперпараметров необходимо разделить датасет на три части:&lt;br /&gt;
* training set (тренировочный набор данных, для обучении модели) &lt;br /&gt;
* validation set (валидационный набор данных, для расчета ошибки и выбора наилучшей модели)&lt;br /&gt;
* test set (тестовый набор данных, для тестирования лучшей модели)&lt;br /&gt;
&lt;br /&gt;
Зачем нам нужен и валидационный, и тестовый набор? &amp;lt;br&amp;gt;&lt;br /&gt;
Дело в том, что модель может переучиться на валидационном наборе данных. Для выявления переобучения используется тестовый набор данных.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим модель KNeighborsClassifier из библиотеки sklearn.&lt;br /&gt;
&lt;br /&gt;
[[Файл:KNeighborsClassifier_model.png|800px|thumb|left|  Все “параметры” данной модели, с точки зрения машинного обучения, являются гиперпараметрами, так как задаются до начала обучения.]]&lt;br /&gt;
&lt;br /&gt;
== Техники настройки гиперпараметров ==&lt;br /&gt;
&lt;br /&gt;
=== Grid search ===&lt;br /&gt;
&lt;br /&gt;
Принимает на вход модель и различные значения гиперпараметров (сетку гиперпараметров). Далее, для каждого возможного сочетания значений гиперпараметров, метод считает ошибку и в конце выбирает сочетание, при котором ошибка минимальна.&lt;br /&gt;
&lt;br /&gt;
Пример использования Grid search из библиотеки scikit-learn:&lt;br /&gt;
&lt;br /&gt;
# Создание экземпляра класса  SGDClassifier (из sklearn)&lt;br /&gt;
# Создание сетки гиперпараметров. В данном случае будем подбирать коэффициент регуляризации, шаг градиентного спуска, количество итераций и параметр скорости обучения.&lt;br /&gt;
# Создание экземпляра класса кросс-валидации.&lt;br /&gt;
# Создание экземпляра GridSearch (из sklearn). Первый параметр - модель, второй - сетка гиперпараметров, третий - функционал ошибки (используемый для контроля качества моделей по технику кросс-валидации), четвертый - кросс-# # # валидация (можно задать количество фолдов, а можно передать экземпляр класса кросс - валидации)&lt;br /&gt;
# Запуск поиска по сетке.&lt;br /&gt;
&lt;br /&gt;
здесь будет картинка&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Важные атрибуты GridSearch&lt;br /&gt;
&lt;br /&gt;
* best_estimator_  - лучшая модель&lt;br /&gt;
* best_score_  - ошибка, полученная на лучшей модели.&lt;br /&gt;
* best_params_  - гиперпараметры лучшей модели&lt;br /&gt;
&lt;br /&gt;
картинка&lt;br /&gt;
&lt;br /&gt;
* cv_results_  - результаты всех моделей.&lt;br /&gt;
&lt;br /&gt;
картинка&lt;br /&gt;
&lt;br /&gt;
* доступ к массиву определенного параметра:&lt;br /&gt;
&lt;br /&gt;
картинка&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Random grid search ===&lt;br /&gt;
&lt;br /&gt;
Вместо полного перебора, Random grid search работает с некоторыми, случайным образом выбранными, комбинациями. На основе полученных результатов,происходит сужение области поиска. Random grid search будет гораздо полезнее, чем  grid search в ситуации,  когда гиперпараметров много, но сильно влияющих на конечную производительность алгоритма - мало.&lt;br /&gt;
&lt;br /&gt;
==== Реализация ====&lt;br /&gt;
&lt;br /&gt;
* hyperopt&lt;br /&gt;
* Katib&lt;br /&gt;
* scikit-learn&lt;br /&gt;
* Tune&lt;br /&gt;
* Talos&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SMBO  ===&lt;br /&gt;
SMBO - Sequential Model-Based Optimization (Методы последовательной оптимизации на основе моделей) &lt;br /&gt;
&lt;br /&gt;
SMBO являются формализацией байесовской оптимизации.&lt;br /&gt;
 &lt;br /&gt;
На каждом шаге SMBO:&lt;br /&gt;
# SMBO выбирает текущий набор гиперпараметров на основе предыдущих результатов и Байесовский рассуждений. Делается это для того, чтобы сузить область поиска и сосредоточиться на том, что наиболее перспективно.&lt;br /&gt;
# происходит запуск модели с текущими гиперпараметрами&lt;br /&gt;
# обновляется вероятностная модель.&lt;br /&gt;
&lt;br /&gt;
Существует пять ключевых аспектов SMBO:&lt;br /&gt;
* Сетка значений гиперпараметров (область поиска)&lt;br /&gt;
* Целевая функция, которая принимает гиперпараметры и выводит оценку, которую мы хотим минимизировать (или максимизировать)&lt;br /&gt;
* Вероятностная модель целевой функции&lt;br /&gt;
* Критерий, называемый функцией выбора, для оценки того, какие гиперпараметры выбрать следующим из  вероятностной модели.&lt;br /&gt;
* История, состоящая из пар &amp;lt;оценка, гиперпараметр&amp;gt;, используемая алгоритмом для обновления вероятностной модели.&lt;br /&gt;
&lt;br /&gt;
Существует несколько вариантов SMBO оптимизации, которые отличаются между собой в 3 и 4 пунктах: есть различные варианты построения вероятностной модели целевой функции и выбора критерия.&lt;br /&gt;
Вероятностные модели (3 пункт): Gaussian Processes, Random Forest Regressions, and Tree Parzen Estimators (TPE).&lt;br /&gt;
Популярный критерий (4 пункт): Expected Improvement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== TPE ===&lt;br /&gt;
&lt;br /&gt;
TPE - Tree-structured Parzen Estimator (Древовидная структура Парзена)&lt;br /&gt;
&lt;br /&gt;
Методы SMBO отличаются тем, как они строят вероятностную модель p (y | x). В случае TPE, используется следующая функция:&lt;br /&gt;
&lt;br /&gt;
формула&lt;br /&gt;
&lt;br /&gt;
=== SMAC ===&lt;br /&gt;
&lt;br /&gt;
расширяет подходы SMBO &lt;br /&gt;
&lt;br /&gt;
В частности, разработаны подходы обработки данных:&lt;br /&gt;
&lt;br /&gt;
* дискретные и условные пространства параметров  (с учетом&lt;br /&gt;
оптимизация параметров категориального алгоритма и параметров, между которыми существуют зависимости);&lt;br /&gt;
* существенный негауссовский шум (из-за дисперсии в&lt;br /&gt;
распределение времени выполнения алгоритма по экземплярам задач и&lt;br /&gt;
несколько независимых запусков на одном экземпляре);&lt;br /&gt;
* частично цензурированные оценки функций (из-за преждевременного&lt;br /&gt;
завершенные запуски алгоритма);&lt;br /&gt;
* бюджет на общее время, доступное для настройки алгоритма, а не на количество оценок функций;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_model.png&amp;diff=73829</id>
		<title>Файл:KNeighborsClassifier model.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:KNeighborsClassifier_model.png&amp;diff=73829"/>
				<updated>2020-04-20T08:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;AnneKsatn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AnneKsatn</name></author>	</entry>

	</feed>