<?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=Penguinni</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=Penguinni"/>
		<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/Penguinni"/>
		<updated>2026-06-11T16:46:37Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70368</id>
		<title>Стохастический градиентный спуск</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70368"/>
				<updated>2019-03-13T08:59:56Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Стохастический градиентный спуск''' (англ. ''stochastic gradient descent'') $-$ оптимизационный алгоритм, отличающийся от обычного [https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA градиентного спуска] тем, что градиент оптимизируемой функции считается на каждом шаге не как сумма градиентов от каждого элемента выборки, а как градиент от одного, случайно выбранного элемента.&lt;br /&gt;
&lt;br /&gt;
== Обычный градиентный спуск ==&lt;br /&gt;
Для начала вспомним, как работает обычный градиентный спуск. Пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;\{(x_1,y_1),\dots,(x_l,y_l)\}.&amp;lt;/tex&amp;gt; Пусть семейство алгоритмов $a(x, {\bf w})$ имеет параметр вектор весов $\bf w$. И пускай мы выбрали какую-нибудь функцию потерь. Для $i$-го объекта выборки для алгоритма с весами ${\bf w}$ обозначим ее &amp;lt;tex&amp;gt; \mathscr{L}_i({\bf w}) &amp;lt;/tex&amp;gt;. Необходимо минимизировать эмпирический риск, т.е. &amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^l \mathscr{L}_i(w) \,\to\, \min\limits_{\bf w}&amp;lt;/tex&amp;gt;. Если функция потерь принадлежит классу $C_1(X)$, то можно применить метод градиентного спуска. Выберем ${\bf w}^{(0)}$ $-$ начальное приближение. Тогда каждый следующий вектор параметров будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\sum\limits_{i=1}^{l}\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $h$ - градиентный шаг, смысл которого заключается в том, насколько сильно менять вектор весов в направлении градиента. Остановка алгоритма будет определяться сходимостью $Q$ или $\bf w$.&lt;br /&gt;
&lt;br /&gt;
== Стохастический градиентный спуск ==&lt;br /&gt;
Проблема предыдущего алгоритма заключается в том, что чтобы определить новое приближение вектора весов необходимо вычислить градиент от каждого элемента выборки, что может сильно замедлять алгоритм. Идея ускорения алгоритма заключается в использовании только одного элемента, либо некоторой подвыборки для подсчета нового приближения весов. То есть теперь новое приближение будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $i$ $-$ случайно выбранный индекс. Так как теперь направление изменения $\bf w$ будет определяться за $O(1)$, подсчет $Q$ на каждом шаге будет слишком дорогостоящим. Для того, чтобы ускорить оценку $Q$, будем использовать приближенную рекуррентную формулу. Можно выбрать одну из следующих формул:&lt;br /&gt;
* среднее арифметическое: $\overline{Q}_m = \dfrac{1}{m}\varepsilon_m + \dfrac{1}{m}\varepsilon_{m - 1} + \dfrac{1}{m}\varepsilon_{m - 2} + \dots = \dfrac{1}{m}\varepsilon_m + (1 - \dfrac{1}{m})\overline{Q}_{m-1}$;&lt;br /&gt;
* экспоненциальное скользящее среднее: $\overline{Q}_m = \lambda\varepsilon_m + (1 - \lambda)\varepsilon_{m - 1} + (1 - \lambda)^2\varepsilon_{m - 2} + \dots = \lambda\varepsilon_m + (1-\lambda)\overline{Q}_{m - 1},$ где $\lambda$ $-$ темп забывания предыстории ряда.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
 '''def''' SGD(X, h, $\lambda$)''':''' &amp;lt;font color=green&amp;gt; # где X $-$ выборка, h $-$ градиентный шаг, а $\lambda$ $-$ темп забывания &amp;lt;/font&amp;gt;&lt;br /&gt;
    ${\bf w} =$ initialize_weights() &amp;lt;font color=green&amp;gt; # инициализировать веса &amp;lt;/font&amp;gt;&lt;br /&gt;
    $\overline{Q} = \frac{1}{l} \sum_{i=1}^{l}\mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# инициализировать оценку функционала &amp;lt;/font&amp;gt;&lt;br /&gt;
    '''while''' $Q$ not converges '''or''' ${\bf w}$ not converges''':'''&lt;br /&gt;
        $i =$ rand() % $l$ &amp;lt;font color=green&amp;gt; # случайно выбрать элемент, по которому будет считаться градиент &amp;lt;/font&amp;gt;&lt;br /&gt;
        $\varepsilon = \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt; # вычислить потерю &amp;lt;/font&amp;gt;&lt;br /&gt;
        ${\bf w} = {\bf w} - h \nabla \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# обновить вектор весов в направлении градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
        $\overline{Q} = \lambda\varepsilon + (1 - \lambda)\overline{Q}$ &amp;lt;font color=green&amp;gt;# оценить функционал&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''return''' w&lt;br /&gt;
&lt;br /&gt;
== Эвристики ==&lt;br /&gt;
Существует несколько способов инициализировать веса:&lt;br /&gt;
* ${\bf w} = {\bf 0}$;&lt;br /&gt;
* $w_j = random(-\dfrac{1}{2n}, \dfrac{1}{2n})$. Стоит брать небольшие случайные веса, так как если выбрать их слишком большими, в некоторых случаях (к примеру в случае нейрона с [[Нейронные_сети,_перцептрон|функцией активациии]] равной арктангенсу) большие начальные значения веса могут привести в область с малыми по модулю производными, в связи с чем из такой области будет трудно выбраться;&lt;br /&gt;
* $w_j = \dfrac{\langle y, f_j \rangle}{\langle f_j, f_j \rangle}$, где $f_j = (f_j(x_i))_{i=1}^l$. Оценка оптимальная в случае, если функция потерь квадратична и признаки нескоррелированы, то есть $\langle f_j, f_k \rangle = 0, j \neq k$.&lt;br /&gt;
Так же можно запустить спуск несколько раз с разными начальными приближениями и выбрать лучшее решение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При выборе случайного элемента можно использовать следующие эвристики:&lt;br /&gt;
* брать объекты из разных классов;&lt;br /&gt;
* брать объекты, на которых ошибка больше, то есть чем меньше отступ (в метрических классификаторах расстояние от разделяющей поверхности до объекта) i-го объекта $M_i$, тем больше вероятность взять этот объект;&lt;br /&gt;
* брать объекты, на которых уверенность меньше, то есть чем меньше $|M_i|$, тем больше вероятность взять этот объект;&lt;br /&gt;
* не брать объекты, на которых уже высокая уверенность ($M_i &amp;gt; \mu_+$) либо не брать объекты-выбросы ($M_i&amp;lt;\mu_i$);&lt;br /&gt;
&lt;br /&gt;
Выбирать величину градиентного шага можно следующими способами:&lt;br /&gt;
* $h_t = \dfrac{1}{t}$;&lt;br /&gt;
* метод скорейшего градиентного спуска: $\mathscr{L}_i({\bf w} - h\nabla \mathscr{L}_i({\bf w})) \rightarrow \min\limits_h$;&lt;br /&gt;
* при квадратичной функции потерь можно использовать $h = ||x_i||^2$;&lt;br /&gt;
* иногда можно выполнять пробные шаги, а именно увеличивать $h$ для выбивания процесса из локальных минимумов;&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D0%B1%D0%B5%D1%80%D0%B3%D0%B0_%E2%80%94_%D0%9C%D0%B0%D1%80%D0%BA%D0%B2%D0%B0%D1%80%D0%B4%D1%82%D0%B0 метод Левенберга-Марквардта];&lt;br /&gt;
&lt;br /&gt;
== Регуляризация ==&lt;br /&gt;
Основным способом уменьшить переобучение является [[Регулярищация|регуляризация]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;, т.е. сокращение весов. Будем штрафовать за увеличение нормы вектора весов, для этого перепишем функцию потерь $\tilde{\mathscr{L}}_i({\bf w}) = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2}||w||^2 = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2} \sum\limits_{j=1}^nw_j^2 \rightarrow \min\limits_w$, где $\tau$ $-$ коэффициент регуляризации.&lt;br /&gt;
&lt;br /&gt;
Тогда градиент будет следующим: $\nabla \tilde{\mathscr{L}}_i({\bf w}) = \nabla \mathscr{L}_i({\bf w}) + \tau {\bf w}$, а градиентный шаг будет выглядеть так: ${\bf w} = {\bf w}(1 - h\tau) - h\nabla \mathscr{L}_i({\bf w})$.&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;br /&gt;
&lt;br /&gt;
== Пример кода scikit-learn == &lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/sgd.html sklearn.linear_model.'''SGDClassifier'''] имеет несколько параметров, например: &lt;br /&gt;
&lt;br /&gt;
'''loss''' $-$ функция потерь. По умолчанию используется &amp;quot;hinge&amp;quot;, дающая алгоритм линейного SVM;&lt;br /&gt;
&lt;br /&gt;
'''penalty''' $-$ метод регуляризации. По умолчанию &amp;quot;l2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
'''alpha''' $-$ $\tau$, коэффициент регуляризации;&lt;br /&gt;
&lt;br /&gt;
'''learning_rate''' $-$ алгоритм изменения градиентного шага;&lt;br /&gt;
&lt;br /&gt;
'''eta0''' $-$ начальный градиентный шаг;&lt;br /&gt;
&lt;br /&gt;
'''shuffle''' перемешивать тренировочную выборку после каждой итерации;&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки:&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества:&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение:&lt;br /&gt;
 clf = SGDClassifier(shuffle = True)&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание:&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://www.machinelearning.ru/wiki/images/5/53/Voron-ML-Lin-SG.pdf К.В. Воронцов {{---}} Линейные методы классификации и регрессии: метод стохастического градиента]&lt;br /&gt;
*[https://www.youtube.com/watch?v=4BKQ3GZR32w&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=4 Курс &amp;quot;Машинное обучение&amp;quot; {{---}} Линейные методы классификации: метод стохастического градиента {{---}} К.В. Воронцов]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Logistic_regression Wikipedia {{---}} Logistic regression]&lt;br /&gt;
*[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.decision_function sklearn.linear_model.SGDClassifier {{---}} описание алгоритма]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70367</id>
		<title>Стохастический градиентный спуск</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70367"/>
				<updated>2019-03-13T08:58:19Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Стохастический градиентный спуск''' (англ. ''stochastic gradient descent'') $-$ оптимизационный алгоритм, отличающийся от обычного [https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA градиентного спуска] тем, что градиент оптимизируемой функции считается на каждом шаге не как сумма градиентов от каждого элемента выборки, а как градиент от одного, случайно выбранного элемента.&lt;br /&gt;
&lt;br /&gt;
== Обычный градиентный спуск ==&lt;br /&gt;
Для начала вспомним, как работает обычный градиентный спуск. Пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;\{(x_1,y_1),\dots,(x_l,y_l)\}.&amp;lt;/tex&amp;gt; Пусть семейство алгоритмов $a(x, {\bf w})$ имеет параметр вектор весов $\bf w$. И пускай мы выбрали какую-нибудь функцию потерь. Для $i$-го объекта выборки для алгоритма с весами ${\bf w}$ обозначим ее &amp;lt;tex&amp;gt; \mathscr{L}_i({\bf w}) &amp;lt;/tex&amp;gt;. Необходимо минимизировать эмпирический риск, т.е. &amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^l \mathscr{L}_i(w) \,\to\, \min\limits_{\bf w}&amp;lt;/tex&amp;gt;. Если функция потерь принадлежит классу $C_1(X)$, то можно применить метод градиентного спуска. Выберем ${\bf w}^{(0)}$ $-$ начальное приближение. Тогда каждый следующий вектор параметров будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\sum\limits_{i=1}^{l}\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $h$ - градиентный шаг, смысл которого заключается в том, насколько сильно менять вектор весов в направлении градиента. Остановка алгоритма будет определяться сходимостью $Q$ или $\bf w$.&lt;br /&gt;
&lt;br /&gt;
== Стохастический градиентный спуск ==&lt;br /&gt;
Проблема предыдущего алгоритма заключается в том, что чтобы определить новое приближение вектора весов необходимо вычислить градиент от каждого элемента выборки, что может сильно замедлять алгоритм. Идея ускорения алгоритма заключается в использовании только одного элемента, либо некоторой подвыборки для подсчета нового приближения весов. То есть теперь новое приближение будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $i$ $-$ случайно выбранный индекс. Так как теперь направление изменения $\bf w$ будет определяться за $O(1)$, подсчет $Q$ на каждом шаге будет слишком дорогостоящим. Для того, чтобы ускорить оценку $Q$, будем использовать приближенную рекуррентную формулу. Можно выбрать одну из следующих формул:&lt;br /&gt;
* среднее арифметическое: $\overline{Q}_m = \dfrac{1}{m}\varepsilon_m + \dfrac{1}{m}\varepsilon_{m - 1} + \dfrac{1}{m}\varepsilon_{m - 2} + \dots = \dfrac{1}{m}\varepsilon_m + (1 - \dfrac{1}{m})\overline{Q}_{m-1}$;&lt;br /&gt;
* экспоненциальное скользящее среднее: $\overline{Q}_m = \lambda\varepsilon_m + (1 - \lambda)\varepsilon_{m - 1} + (1 - \lambda)^2\varepsilon_{m - 2} + \dots = \lambda\varepsilon_m + (1-\lambda)\overline{Q}_{m - 1},$ где $\lambda$ $-$ темп забывания предыстории ряда.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
 '''def''' SGD(X, h, $\lambda$)''':''' &amp;lt;font color=green&amp;gt; # где X $-$ выборка, h $-$ градиентный шаг, а $\lambda$ $-$ темп забывания &amp;lt;/font&amp;gt;&lt;br /&gt;
    ${\bf w} =$ initialize_weights() &amp;lt;font color=green&amp;gt; # инициализировать веса &amp;lt;/font&amp;gt;&lt;br /&gt;
    $\overline{Q} = \frac{1}{l} \sum_{i=1}^{l}\mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# инициализировать оценку функционала &amp;lt;/font&amp;gt;&lt;br /&gt;
    '''while''' $Q$ not converges '''or''' ${\bf w}$ not converges''':'''&lt;br /&gt;
        $i =$ rand() % $l$ &amp;lt;font color=green&amp;gt; # случайно выбрать элемент, по которому будет считаться градиент &amp;lt;/font&amp;gt;&lt;br /&gt;
        $\varepsilon = \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt; # вычислить потерю &amp;lt;/font&amp;gt;&lt;br /&gt;
        ${\bf w} = {\bf w} - h \nabla \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# обновить вектор весов в направлении градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
        $\overline{Q} = \lambda\varepsilon + (1 - \lambda)\overline{Q}$ &amp;lt;font color=green&amp;gt;# оценить функционал&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''return''' w&lt;br /&gt;
&lt;br /&gt;
== Эвристики ==&lt;br /&gt;
Существует несколько способов инициализировать веса:&lt;br /&gt;
* ${\bf w} = {\bf 0}$;&lt;br /&gt;
* $w_j = random(-\dfrac{1}{2n}, \dfrac{1}{2n})$. Стоит брать небольшие случайные веса, так как если выбрать их слишком большими, в некоторых случаях (к примеру в случае нейрона с [[Нейронные_сети,_перцептрон|функцией активациии]] равной арктангенсу) большие начальные значения веса могут привести в область с малыми по модулю производными, в связи с чем из такой области будет трудно выбраться;&lt;br /&gt;
* $w_j = \dfrac{\langle y, f_j \rangle}{\langle f_j, f_j \rangle}$, где $f_j = (f_j(x_i))_{i=1}^l$. Оценка оптимальная в случае, если функция потерь квадратична и признаки нескоррелированы, то есть $\langle f_j, f_k \rangle = 0, j \neq k$.&lt;br /&gt;
Так же можно запустить спуск несколько раз с разными начальными приближениями и выбрать лучшее решение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При выборе случайного элемента можно использовать следующие эвристики:&lt;br /&gt;
* брать объекты из разных классов;&lt;br /&gt;
* брать объекты, на которых ошибка больше, то есть чем меньше отступ (в метрических классификаторах расстояние от разделяющей поверхности до объекта) i-го объекта $M_i$, тем больше вероятность взять этот объект;&lt;br /&gt;
* брать объекты, на которых уверенность меньше, то есть чем меньше $|M_i|$, тем больше вероятность взять этот объект;&lt;br /&gt;
* не брать объекты, на которых уже высокая уверенность ($M_i &amp;gt; \mu_+$) либо не брать объекты-выбросы ($M_i&amp;lt;\mu_i$);&lt;br /&gt;
&lt;br /&gt;
Выбирать величину градиентного шага можно следующими способами:&lt;br /&gt;
* $h_t = \dfrac{1}{t}$;&lt;br /&gt;
* метод скорейшего градиентного спуска: $\mathscr{L}_i({\bf w} - h\nabla \mathscr{L}_i({\bf w})) \rightarrow \min\limits_h$;&lt;br /&gt;
* при квадратичной функции потерь можно использовать $h = ||x_i||^2$;&lt;br /&gt;
* иногда можно выполнять пробные шаги, а именно увеличивать $h$ для выбивания процесса из локальных минимумов;&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D0%B1%D0%B5%D1%80%D0%B3%D0%B0_%E2%80%94_%D0%9C%D0%B0%D1%80%D0%BA%D0%B2%D0%B0%D1%80%D0%B4%D1%82%D0%B0 метод Левенберга-Марквардта];&lt;br /&gt;
&lt;br /&gt;
== Регуляризация ==&lt;br /&gt;
Основным способом уменьшить переобучение является [[Регулярищация|регуляризация]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;, т.е. сокращение весов. Будем штрафовать за увеличение нормы вектора весов, для этого перепишем функцию потерь $\tilde{\mathscr{L}}_i({\bf w}) = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2}||w||^2 = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2} \sum\limits_{j=1}^nw_j^2 \rightarrow \min\limits_w$, где $\tau$ $-$ коэффициент регуляризации.&lt;br /&gt;
&lt;br /&gt;
Тогда градиент будет следующим: $\nabla \tilde{\mathscr{L}}_i({\bf w}) = \nabla \mathscr{L}_i({\bf w}) + \tau {\bf w}$, а градиентный шаг будет выглядеть так: ${\bf w} = {\bf w}(1 - h\tau) - h\nabla \mathscr{L}_i({\bf w})$.&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;br /&gt;
&lt;br /&gt;
== Пример кода scikit-learn == &lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/sgd.html sklearn.linear_model.'''SGDClassifier'''] имеет несколько параметров, например: &lt;br /&gt;
&lt;br /&gt;
'''loss''' $-$ функция потерь. По умолчанию используется &amp;quot;hinge&amp;quot;, дающая алгоритм линейного SVM;&lt;br /&gt;
&lt;br /&gt;
'''penalty''' $-$ метод регуляризации. По умолчанию &amp;quot;l2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
'''alpha''' $-$ $\tau$, коэффициент регуляризации;&lt;br /&gt;
&lt;br /&gt;
'''learning_rate''' $-$ алгоритм изменения градиентного шага;&lt;br /&gt;
&lt;br /&gt;
'''eta0''' $-$ начальный градиентный шаг;&lt;br /&gt;
&lt;br /&gt;
'''shuffle''' перемешивать тренировочную выборку после каждой итерации;&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки:&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества:&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение:&lt;br /&gt;
 clf = SGDClassifier(shuffle = True)&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание:&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://www.machinelearning.ru/wiki/images/5/53/Voron-ML-Lin-SG.pdf К.В. Воронцов {{---}} Линейные методы классификации и регрессии: метод стохастического градиента]&lt;br /&gt;
*[https://www.youtube.com/watch?v=4BKQ3GZR32w&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=4 Курс &amp;quot;Машинное обучение&amp;quot; {{---}} Линейные методы классификации: метод стохастического градиента {{---}} К.В. Воронцов]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Logistic_regression Wikipedia {{---}} Logistic regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70366</id>
		<title>Стохастический градиентный спуск</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70366"/>
				<updated>2019-03-13T08:57:05Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Стохастический градиентный спуск''' (англ. ''stochastic gradient descent'') $-$ оптимизационный алгоритм, отличающийся от обычного [https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA градиентного спуска] тем, что градиент оптимизируемой функции считается на каждом шаге не как сумма градиентов от каждого элемента выборки, а как градиент от одного, случайно выбранного элемента.&lt;br /&gt;
&lt;br /&gt;
== Обычный градиентный спуск ==&lt;br /&gt;
Для начала вспомним, как работает обычный градиентный спуск. Пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;\{(x_1,y_1),\dots,(x_l,y_l)\}.&amp;lt;/tex&amp;gt; Пусть семейство алгоритмов $a(x, {\bf w})$ имеет параметр вектор весов $\bf w$. И пускай мы выбрали какую-нибудь функцию потерь. Для $i$-го объекта выборки для алгоритма с весами ${\bf w}$ обозначим ее &amp;lt;tex&amp;gt; \mathscr{L}_i({\bf w}) &amp;lt;/tex&amp;gt;. Необходимо минимизировать эмпирический риск, т.е. &amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^l \mathscr{L}_i(w) \,\to\, \min\limits_{\bf w}&amp;lt;/tex&amp;gt;. Если функция потерь принадлежит классу $C_1(X)$, то можно применить метод градиентного спуска. Выберем ${\bf w}^{(0)}$ $-$ начальное приближение. Тогда каждый следующий вектор параметров будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\sum\limits_{i=1}^{l}\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $h$ - градиентный шаг, смысл которого заключается в том, насколько сильно менять вектор весов в направлении градиента. Остановка алгоритма будет определяться сходимостью $Q$ или $\bf w$.&lt;br /&gt;
&lt;br /&gt;
== Стохастический градиентный спуск ==&lt;br /&gt;
Проблема предыдущего алгоритма заключается в том, что чтобы определить новое приближение вектора весов необходимо вычислить градиент от каждого элемента выборки, что может сильно замедлять алгоритм. Идея ускорения алгоритма заключается в использовании только одного элемента, либо некоторой подвыборки для подсчета нового приближения весов. То есть теперь новое приближение будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $i$ $-$ случайно выбранный индекс. Так как теперь направление изменения $\bf w$ будет определяться за $O(1)$, подсчет $Q$ на каждом шаге будет слишком дорогостоящим. Для того, чтобы ускорить оценку $Q$, будем использовать приближенную рекуррентную формулу. Можно выбрать одну из следующих формул:&lt;br /&gt;
* среднее арифметическое: $\overline{Q}_m = \dfrac{1}{m}\varepsilon_m + \dfrac{1}{m}\varepsilon_{m - 1} + \dfrac{1}{m}\varepsilon_{m - 2} + \dots = \dfrac{1}{m}\varepsilon_m + (1 - \dfrac{1}{m})\overline{Q}_{m-1}$;&lt;br /&gt;
* экспоненциальное скользящее среднее: $\overline{Q}_m = \lambda\varepsilon_m + (1 - \lambda)\varepsilon_{m - 1} + (1 - \lambda)^2\varepsilon_{m - 2} + \dots = \lambda\varepsilon_m + (1-\lambda)\overline{Q}_{m - 1},$ где $\lambda$ $-$ темп забывания предыстории ряда.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
 '''def''' SGD(X, h, $\lambda$)''':''' &amp;lt;font color=green&amp;gt; # где X $-$ выборка, h $-$ градиентный шаг, а $\lambda$ $-$ темп забывания &amp;lt;/font&amp;gt;&lt;br /&gt;
    ${\bf w} =$ initialize_weights() &amp;lt;font color=green&amp;gt; # инициализировать веса &amp;lt;/font&amp;gt;&lt;br /&gt;
    $\overline{Q} = \frac{1}{l} \sum_{i=1}^{l}\mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# инициализировать оценку функционала &amp;lt;/font&amp;gt;&lt;br /&gt;
    '''while''' $Q$ not converges '''or''' ${\bf w}$ not converges''':'''&lt;br /&gt;
        $i =$ rand() % $l$ &amp;lt;font color=green&amp;gt; # случайно выбрать элемент, по которому будет считаться градиент &amp;lt;/font&amp;gt;&lt;br /&gt;
        $\varepsilon = \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt; # вычислить потерю &amp;lt;/font&amp;gt;&lt;br /&gt;
        ${\bf w} = {\bf w} - h \nabla \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# обновить вектор весов в направлении градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
        $\overline{Q} = \lambda\varepsilon + (1 - \lambda)\overline{Q}$ &amp;lt;font color=green&amp;gt;# оценить функционал&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''return''' w&lt;br /&gt;
&lt;br /&gt;
== Эвристики ==&lt;br /&gt;
Существует несколько способов инициализировать веса:&lt;br /&gt;
* ${\bf w} = {\bf 0}$;&lt;br /&gt;
* $w_j = random(-\dfrac{1}{2n}, \dfrac{1}{2n})$. Стоит брать небольшие случайные веса, так как если выбрать их слишком большими, в некоторых случаях (к примеру в случае нейрона с [[Нейронные_сети,_перцептрон|функцией активациии]] равной арктангенсу) большие начальные значения веса могут привести в область с малыми по модулю производными, в связи с чем из такой области будет трудно выбраться;&lt;br /&gt;
* $w_j = \dfrac{\langle y, f_j \rangle}{\langle f_j, f_j \rangle}$, где $f_j = (f_j(x_i))_{i=1}^l$. Оценка оптимальная в случае, если функция потерь квадратична и признаки нескоррелированы, то есть $\langle f_j, f_k \rangle = 0, j \neq k$.&lt;br /&gt;
Так же можно запустить спуск несколько раз с разными начальными приближениями и выбрать лучшее решение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При выборе случайного элемента можно использовать следующие эвристики:&lt;br /&gt;
* брать объекты из разных классов;&lt;br /&gt;
* брать объекты, на которых ошибка больше, то есть чем меньше отступ (в метрических классификаторах расстояние от разделяющей поверхности до объекта) i-го объекта $M_i$, тем больше вероятность взять этот объект;&lt;br /&gt;
* брать объекты, на которых уверенность меньше, то есть чем меньше $|M_i|$, тем больше вероятность взять этот объект;&lt;br /&gt;
* не брать объекты, на которых уже высокая уверенность ($M_i &amp;gt; \mu_+$) либо не брать объекты-выбросы ($M_i&amp;lt;\mu_i$);&lt;br /&gt;
&lt;br /&gt;
Выбирать величину градиентного шага можно следующими способами:&lt;br /&gt;
* $h_t = \dfrac{1}{t}$;&lt;br /&gt;
* метод скорейшего градиентного спуска: $\mathscr{L}_i({\bf w} - h\nabla \mathscr{L}_i({\bf w})) \rightarrow \min\limits_h$;&lt;br /&gt;
* при квадратичной функции потерь можно использовать $h = ||x_i||^2$;&lt;br /&gt;
* иногда можно выполнять пробные шаги, а именно увеличивать $h$ для выбивания процесса из локальных минимумов;&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D0%B1%D0%B5%D1%80%D0%B3%D0%B0_%E2%80%94_%D0%9C%D0%B0%D1%80%D0%BA%D0%B2%D0%B0%D1%80%D0%B4%D1%82%D0%B0 метод Левенберга-Марквардта];&lt;br /&gt;
&lt;br /&gt;
== Регуляризация ==&lt;br /&gt;
Основным способом уменьшить переобучение является [[Регулярищация|регуляризация]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;, т.е. сокращение весов. Будем штрафовать за увеличение нормы вектора весов, для этого перепишем функцию потерь $\tilde{\mathscr{L}}_i({\bf w}) = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2}||w||^2 = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2} \sum\limits_{j=1}^nw_j^2 \rightarrow \min\limits_w$, где $\tau$ $-$ коэффициент регуляризации.&lt;br /&gt;
&lt;br /&gt;
Тогда градиент будет следующим: $\nabla \tilde{\mathscr{L}}_i({\bf w}) = \nabla \mathscr{L}_i({\bf w}) + \tau {\bf w}$, а градиентный шаг будет выглядеть так: ${\bf w} = {\bf w}(1 - h\tau) - h\nabla \mathscr{L}_i({\bf w})$.&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;br /&gt;
&lt;br /&gt;
== Пример кода scikit-learn == &lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/sgd.html sklearn.linear_model.'''SGDClassifier'''] имеет несколько параметров, например: &lt;br /&gt;
&lt;br /&gt;
'''loss''' $-$ функция потерь. По умолчанию используется &amp;quot;hinge&amp;quot;, дающая алгоритм линейного SVM;&lt;br /&gt;
&lt;br /&gt;
'''penalty''' $-$ метод регуляризации. По умолчанию &amp;quot;l2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
'''alpha''' $-$ $\tau$, коэффициент регуляризации;&lt;br /&gt;
&lt;br /&gt;
'''learning_rate''' $-$ алгоритм изменения градиентного шага;&lt;br /&gt;
&lt;br /&gt;
'''eta0''' $-$ начальный градиентный шаг;&lt;br /&gt;
&lt;br /&gt;
'''shuffle''' перемешивать тренировочную выборку после каждой итерации;&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки:&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества:&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение:&lt;br /&gt;
 clf = SGDClassifier(shuffle = True)&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание:&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://www.machinelearning.ru/wiki/images/5/53/Voron-ML-Lin-SG.pdf К.В. Воронцов {{---}} Линейные методы классификации и регрессии: метод стохастического градиента]&lt;br /&gt;
*[https://www.youtube.com/watch?v=4BKQ3GZR32w&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=4 Курс &amp;quot;Машинное обучение&amp;quot; {{---}} Линейные методы классификации: метод стохастического градиента {{---}} К.В. Воронцов]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Logistic_regression Wikipedia {{---}} Logistic regression]&lt;br /&gt;
*[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.decision_function sklearn.linear_model.SGDClassifier] $-$ описание алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B8%D1%80%D0%B0&amp;diff=70258</id>
		<title>Поиск ближайших соседей с помощью иерархического маленького мира</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BC%D0%B8%D1%80%D0%B0&amp;diff=70258"/>
				<updated>2019-03-10T14:51:34Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Иерархический маленький мир''' (англ. ''Hierarchical Navigable Small World'') {{---}} структура данных, позволяющая эффективно искать &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; почти что ближайших соседей на больших множествах вершин.&lt;br /&gt;
Поиск ближайших соседей нужен в задачах [[Общие понятия|классификации]] и [[кластеризация|кластеризации]].&lt;br /&gt;
&lt;br /&gt;
По своей концепции напоминает [[список с пропусками]].&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Представим себе ситуацию:&lt;br /&gt;
* У социальной сети есть &amp;lt;tex&amp;gt;10^{11}&amp;lt;/tex&amp;gt; пользовательских фотографий с отмеченными лицами на них.&lt;br /&gt;
* По новой фотографии требуется быстро узнать кто на ней и предложить пользователю отметить этого человека.&lt;br /&gt;
&lt;br /&gt;
Возможный процесс:&lt;br /&gt;
# Обучаем [https://github.com/davidsandberg/facenet FaceNet] выдавать &amp;lt;tex&amp;gt;128&amp;lt;/tex&amp;gt;-мерные вектора по изображению лица, такие, что у фотографий одного человека похожие значения векторов.&lt;br /&gt;
# Добавляем &amp;lt;tex&amp;gt;10^{11}&amp;lt;/tex&amp;gt; векторов в иерархический маленький мир.&lt;br /&gt;
# При добавлении новой фотографии, вычисляем соответствующий лицу вектор.&lt;br /&gt;
# Ищем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; его ближайших соседей.&lt;br /&gt;
# Классифицируем лицо с использованием [[Метрический классификатор и метод ближайших соседей#Использование ядер сглаживания|ядер сглаживания]].&lt;br /&gt;
# Если пользователь подтвердил нашу догадку, добавляем этот вектор в иерархический маленький мир.&lt;br /&gt;
&lt;br /&gt;
==Маленький мир==&lt;br /&gt;
[[Файл:SmallWorld_Greedy.png|мини|500px|Жадный поиск ближайшего соседа. &lt;br /&gt;
Чёрные ребра {{---}} короткие связи с соседями в небольшом радиусе &amp;lt;tex&amp;gt;R&amp;lt;/tex&amp;gt;, красные рёбра {{---}} длинные связи, созданные по какой-то эвристике, обеспечивающие логарифмическое мат. ожидание длины пути.&lt;br /&gt;
[https://www.hse.ru/mirror/pubs/lib/data/access/ram/ticket/30/1551306415713d428dca7fd05f3d108fe8e66042c4/Approximate%20nearest%20neighbor%20algorithm%20based%20on%20navigable%20(Information%20Systems).pdf Оригинал]]]&lt;br /&gt;
'''Маленький мир''' (англ. ''Small World'') {{---}} граф, в котором мат. ожидание кратчайшего пути между двумя случайно выбранными вершинами растёт пропорционально &amp;lt;tex&amp;gt;\log{N}&amp;lt;/tex&amp;gt;. Но при этом средняя степень вершины мала.&lt;br /&gt;
&lt;br /&gt;
Для маленького мира на точках в Евклидовом пространстве жадный поиск &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей будет выглядеть так:&lt;br /&gt;
 '''knn'''(V, E, request, m, k)''':'''&lt;br /&gt;
     W = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшие к q вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     C = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Вершины, которые предстоит посетить. &amp;lt;/font&amp;gt;&lt;br /&gt;
     V = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Посещённые вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''for''' i = 1 '''to''' m&lt;br /&gt;
         C = С &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;random_v&amp;lt;/tex&amp;gt; v &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; G&lt;br /&gt;
         TN = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшие вершины в этом проходе.&amp;lt;/font&amp;gt;&lt;br /&gt;
         '''while''' ''true''&lt;br /&gt;
             u = {q1 | &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; q2 &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; C, |q - q1| &amp;lt;= |q - q2|} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшая к q вершина из C. &amp;lt;/font&amp;gt;&lt;br /&gt;
             C = C &amp;lt;tex&amp;gt;\setminus&amp;lt;/tex&amp;gt; u&lt;br /&gt;
             '''if''' u дальше чем k-й элемент W&lt;br /&gt;
                 '''break'''&lt;br /&gt;
             '''for''' e: (u, e) '''in''' G&lt;br /&gt;
                 '''if''' e &amp;lt;tex&amp;gt;{\notin}&amp;lt;/tex&amp;gt; V&lt;br /&gt;
                     C = C &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
                     V = V &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
                     TN = TN &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
         W = W &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; TN&lt;br /&gt;
     '''return''' k ближайших к q вершин из W&lt;br /&gt;
&lt;br /&gt;
Расстояние между вершинами графа может измеряться [[Метрический классификатор и метод ближайших соседей#Использование различных метрик расстояния|различными метриками]]. &amp;lt;br/&amp;gt;&lt;br /&gt;
Очевидный недостаток этого алгоритма {{---}} опасность свалиться в локальный минимум, остановившись в каком-то кластере. С увеличением числа &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, вероятность такого застревания экспоненциально падает.&lt;br /&gt;
&lt;br /&gt;
==Описание структуры==&lt;br /&gt;
'''Иерархический Маленький мир''' {{---}} слоистая структура графов. На нулевом слое представлены все &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; вершин из исходной выборки. Вершина, присутствующая на уровне &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; так же присутствует на уровне &amp;lt;tex&amp;gt;L + 1&amp;lt;/tex&amp;gt; с вероятностью &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Т.е. кол-во слоёв растет как &amp;lt;tex&amp;gt;O(\log N)&amp;lt;/tex&amp;gt;. Количество соседей каждой вершины на каждом уровне ограниченно константой, что позволяет делать запросы на добавление и удаление вершины за &amp;lt;tex&amp;gt;O(\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:HNSW.png|мини|500px|Иерархический маленький мир. [https://arxiv.org/abs/1603.09320 Источник]]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Операции над структурой==&lt;br /&gt;
&lt;br /&gt;
===Поиск ближайших соседей в слое===&lt;br /&gt;
Жадно идём по уровню в сторону запроса.   &lt;br /&gt;
 '''searchLayer'''(q, ep, ef, layer)''':'''&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Входные данные: иерархия графов hnsw, запрос q, входные точки ep, искомое количество ближайших соседей ef, номер слоя layer.&amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Возвращает: ef ближайших соседей q в слое layer.&amp;lt;/font&amp;gt;&lt;br /&gt;
     W = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшие к q вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     C = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Вершины, которые предстоит посетить. &amp;lt;/font&amp;gt;&lt;br /&gt;
     V = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Посещённые вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''while''' C != &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
         u = {q1 | &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; q2 &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; C, |q - q1| &amp;lt;= |q - q2|} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшая к q вершина из C. &amp;lt;/font&amp;gt;&lt;br /&gt;
         f = {q1 | &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; q2 &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; W, |q - q1| &amp;gt;= |q - q2|} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Самая дальняя от q вершина из W. &amp;lt;/font&amp;gt;&lt;br /&gt;
         '''if''' |u - q| &amp;gt; |f - q|&lt;br /&gt;
             '''break''' &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Мы в локальном минимуме. &amp;lt;/font&amp;gt;&lt;br /&gt;
         '''for''' e : (u, e) '''in''' G&lt;br /&gt;
             '''if''' e &amp;lt;tex&amp;gt;{\notin}&amp;lt;/tex&amp;gt; V&lt;br /&gt;
                 V = V &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
                 f = {q1 | &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt; q2 &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; W, |q - q1| &amp;gt;= |q - q2|} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Самая дальняя от q вершина из W. &amp;lt;/font&amp;gt;&lt;br /&gt;
                 '''if''' |e - q| &amp;lt; |f - q| or |W| &amp;lt; ef&lt;br /&gt;
                     C = C &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
                     W = W &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; e&lt;br /&gt;
                     if |W| &amp;gt; ef&lt;br /&gt;
                         W = W \ f&lt;br /&gt;
     '''return''' W&lt;br /&gt;
&lt;br /&gt;
===Поиск ближайших соседей во всей структуре===&lt;br /&gt;
[[Файл:HnswSearch.png|мини|500px|Жадный поиск вершины.&lt;br /&gt;
[https://arxiv.org/abs/1603.09320 Оригинал]]]&lt;br /&gt;
# Идём с верхнего уровня до первого:&lt;br /&gt;
## Жадно ищем ближайшую к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; вершину на текущем уровне.&lt;br /&gt;
## Спускаемся в соответствующую соседу вершине на уровень ниже.&lt;br /&gt;
# На нулевом уровне жадно ищем &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей.&lt;br /&gt;
 '''knn'''(hnsw, q, k, ef)''':'''&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Входные данные: иерархия графов hnsw, запрос q, искомое количество ближайших соседей  k, количество кандидатов при поиске ef. &amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Возвращает: k ближайших соседей q. &amp;lt;/font&amp;gt;&lt;br /&gt;
     W = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшие к q вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     mL = |hnsw| - 1&lt;br /&gt;
     ep = &amp;lt;tex&amp;gt;random_v&amp;lt;/tex&amp;gt; v &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; hnsw[mL]&lt;br /&gt;
     '''for''' level = mL to 1&lt;br /&gt;
         W = searchLayer(hnsw, q, ep, ef=1, level) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// На каждом уровне, кроме нижнего мы ищем всего одну ближайшую вершину. &amp;lt;/font&amp;gt;&lt;br /&gt;
         ep = W&lt;br /&gt;
     W = searchLayer(hnsw, q, ep, ef, lc=0)&lt;br /&gt;
     '''return''' k ближайших к q вершин из W&lt;br /&gt;
&lt;br /&gt;
===Вставка элемента===&lt;br /&gt;
# Случайным образом выбираем максимальный слой, на котором будет представлена &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# На каждом уровне, где будет представлена &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, сверху вниз:&lt;br /&gt;
## Жадно ищем &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ближайших к &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; вершин.&lt;br /&gt;
## Добавляем связи &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; с ними.&lt;br /&gt;
## Удаляем лишние связи у новообразовавшихся соседей.&lt;br /&gt;
 '''insert'''(hnsw, q, m, mMax, ef, mL)''':'''&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Входные данные: иерархия графов hnsw, запрос на добавление q, желаемое количество связей m, максимальное количество связей вершины &amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;//       на одном слое mMax, количество кандидатов при поиске ef, коэффициент выбора высоты mL. &amp;lt;/font&amp;gt;&lt;br /&gt;
     &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Возвращает: hnsw с вставленным элементом q. &amp;lt;/font&amp;gt;&lt;br /&gt;
     W = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ближайшие к q вершины. &amp;lt;/font&amp;gt;&lt;br /&gt;
     mL = |hnsw| - 1&lt;br /&gt;
     ep = &amp;lt;tex&amp;gt;random_v&amp;lt;/tex&amp;gt; v &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; hnsw[mL]&lt;br /&gt;
     qL = -ln(rand(eps, 1.0)) * mL &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Верхний слой для вершины q. &amp;lt;/font&amp;gt;&lt;br /&gt;
     '''for''' level = mL to qL + 1&lt;br /&gt;
         W = searchLayer(q, ep, ef=1, level)&lt;br /&gt;
         ep = W&lt;br /&gt;
     '''for''' level = min(mL, qL) to 0&lt;br /&gt;
         W = searchLayer(q, ep, ef, level)&lt;br /&gt;
         neighbours = M ближайших к q вершин из W&lt;br /&gt;
         '''for''' n &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; neighbours:&lt;br /&gt;
             &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Добавляем двусторонние связи между n и q. &amp;lt;/font&amp;gt;&lt;br /&gt;
             hnsw[level] = hnsw[level] &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; (n, q)&lt;br /&gt;
             hnsw[level] = hnsw[level] &amp;lt;tex&amp;gt;\bigcup&amp;lt;/tex&amp;gt; (q, n)&lt;br /&gt;
             &lt;br /&gt;
             nNeighbours = {v| (v, n) '''in''' hnsw[level]} &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Ищем всех соседей n на уровне level. &amp;lt;/font&amp;gt;&lt;br /&gt;
             &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Убираем лишние связи, если требуется. &amp;lt;/font&amp;gt;&lt;br /&gt;
             '''if''' nNeighbours.Count() &amp;gt; mMax&lt;br /&gt;
                 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;// Самая дальняя от n вершина, смежняя с ней. &amp;lt;/font&amp;gt;&lt;br /&gt;
                 v = {q1 | (q2, n) &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; nNeighbours &amp;amp; &amp;lt;tex&amp;gt;\forall&amp;lt;/tex&amp;gt;q2 &amp;lt;tex&amp;gt;\in&amp;lt;/tex&amp;gt; hnsw[level], |q - q1| &amp;gt;= |q - q2|}&lt;br /&gt;
                 hnsw[level] = hnsw[level] &amp;lt;tex&amp;gt;\setminus&amp;lt;/tex&amp;gt; (n, v)&lt;br /&gt;
                 hnsw[level] = hnsw[level] &amp;lt;tex&amp;gt;\setminus&amp;lt;/tex&amp;gt; (v, n)&lt;br /&gt;
         ep = W&lt;br /&gt;
     '''if''' qL &amp;gt; mL&lt;br /&gt;
         '''for''' level = mL to qL&lt;br /&gt;
             hnsw.append({q, {}})&lt;br /&gt;
&lt;br /&gt;
== Практическое использование ==&lt;br /&gt;
В библиотеке [https://github.com/nmslib/hnswlib Hnswlib] есть реализация иерархического маленького мира. Эта библиотека написана на C++, с биндингами на python.&lt;br /&gt;
Пример использования:&lt;br /&gt;
 '''import''' hnswlib&lt;br /&gt;
 '''import''' numpy '''as''' np&lt;br /&gt;
 &lt;br /&gt;
 dim = 128&lt;br /&gt;
 num_elements = 10000&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаём тестовые данные.&amp;lt;/font&amp;gt;&lt;br /&gt;
 data = np.float32(np.random.random((num_elements, dim)))&lt;br /&gt;
 data_labels = np.arange(num_elements)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаём иерархический маленький мир в L2.&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Возможные метрики {{---}} l2, cosine, ip (L2, косинус угла между векторами, скалярное произведение).&amp;lt;/font&amp;gt;&lt;br /&gt;
 p = hnswlib.Index(space = 'l2', dim = dim)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Инициализируем структуру.&amp;lt;/font&amp;gt;&lt;br /&gt;
 p.init_index(max_elements = num_elements, ef_construction = 200, M = 16)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем данные (можно вызывать много раз).&amp;lt;/font&amp;gt;&lt;br /&gt;
 p.add_items(data, data_labels)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Настраиваем качество, выставляя ef:&amp;lt;/font&amp;gt;&lt;br /&gt;
 p.set_ef(50) &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# ef должно быть &amp;gt; k&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Делаем запрос.&amp;lt;/font&amp;gt;&lt;br /&gt;
 &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# k - количество ближайших вершин&amp;lt;/font&amp;gt;&lt;br /&gt;
 labels, distances = p.knn_query(data, k = 1)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://arxiv.org/abs/1603.09320 Yu. A. Malkov, D. A. Yashunin {{---}} Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D1%80_%D1%82%D0%B5%D1%81%D0%B5%D0%BD_(%D0%B3%D1%80%D0%B0%D1%84) Википедия {{---}} Мир тесен (граф)]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Small-world_network Wikipedia {{---}} Small-world network]&lt;br /&gt;
* [https://github.com/sgjurano/ysda-celebrity-faces Поиск знаменитостей на фотографии с помощью иерархического маленького мира]&lt;br /&gt;
* [https://m.habr.com/ru/company/mailru/blog/338360/ Статья от Mail.ru об использовании иерархического маленького мира]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70236</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70236"/>
				<updated>2019-03-06T18:38:57Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере [[Линейная регрессия | линейной регрессии]] ===&lt;br /&gt;
Представьте задачу линейной регрессии. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Wikipedia {{---}} Learning curve]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
* ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
* ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
* ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70235</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70235"/>
				<updated>2019-03-06T18:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Кривые обучения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере [[Линейная регрессия | линейной регрессии]] ===&lt;br /&gt;
Представьте задачу линейной регрессии. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Wikipedia {{---}} Learning curve]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
# [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
# ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
# ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
# ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70234</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70234"/>
				<updated>2019-03-06T18:22:46Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Примечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере [[Линейная регрессия | линейной регрессии]] ===&lt;br /&gt;
Представьте задачу линейной регрессии. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Learning curve, Wikipedia]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
# [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
# ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
# ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
# ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70233</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70233"/>
				<updated>2019-03-06T18:21:39Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* На примере линейной регрессии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере [[Линейная регрессия | линейной регрессии]] ===&lt;br /&gt;
Представьте задачу линейной регрессии. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Learning curve, Wikipedia]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
# [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
# ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
# ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
# ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70232</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70232"/>
				<updated>2019-03-06T18:20:34Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* На примере  линейной регрессии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере линейной регрессии ===&lt;br /&gt;
Представьте задачу [[Линейная регрессия | линейной регрессии]]. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Learning curve, Wikipedia]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
# [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
# ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
# ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
# ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70231</id>
		<title>Переобучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=70231"/>
				<updated>2019-03-06T18:20:09Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* На примере  линейной регрессии[на 28.01.19 не создан] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Переобучение''' (англ. overfitting) {{---}} негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям.&lt;br /&gt;
&lt;br /&gt;
'''Недообучение''' (англ. underfitting) {{---}} негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== На примере [[Линейная регрессия | линейной регрессии]] ===&lt;br /&gt;
Представьте задачу [[Линейная регрессия | линейной регрессии]]. Красные точки представляют исходные данные. Синии линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_reg.png|200px|thumb|Рис 1. Недообучение. M=1]]&lt;br /&gt;
 |[[Файл:Normal_bias_reg.png|200px|thumb|Рис 2. Норма. M=2]]&lt;br /&gt;
 |[[Файл:High_variance_reg.png|200px|thumb|Рис 3. Переобучение. M=4]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Как видно из Рис. 1, данные не поддаются линейной зависимости при небольшой степени полинома и по этой причине модель, представленная на данном рисунке, не очень хороша.&lt;br /&gt;
&lt;br /&gt;
На Рис. 2 представленна ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.&lt;br /&gt;
&lt;br /&gt;
Рис. 3 иллюстрирует случай, когда высокая степень полинома ведет к тому, что модель слишком заточена на данные обучающего датасета.&lt;br /&gt;
&lt;br /&gt;
=== На примере [[Логистическая регрессия | логистической регрессии]] ===&lt;br /&gt;
Представьте задачу классификации размеченых точек. Красные точки представляют данные класса 1. Голубые круглые точки {{---}} класса 2. Синии линии являются представлением различных моделей, которыми производится классификация данных. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_cla.png|200px|thumb|Рис 4. Недообучение]]&lt;br /&gt;
 |[[Файл:Normal_bias_cla.png|200px|thumb|Рис 5. Подходящая модель]]&lt;br /&gt;
 |[[Файл:High_variance_cla.png|200px|thumb|Рис 6. Переобучение]]&lt;br /&gt;
 |}&lt;br /&gt;
Рис. 4 показывает результат использования слишком простой модели для представленного датасета. Как видно из рисунка, данные плохо классифицируются такой моделью.&lt;br /&gt;
&lt;br /&gt;
При выявлении недообучения следует выбрать более сложную модель (Рис. 5), которая бы смогла лучше описать представленные данные.&lt;br /&gt;
&lt;br /&gt;
Выбор слишком сложной модели приводит к ситуации, когда модель максимально точно классифицирует обучающую выборку, но сильно ошибается на новых измерениях. Данная ситуация представлена на Рис. 6.&lt;br /&gt;
&lt;br /&gt;
== Кривые обучения ==&lt;br /&gt;
'''Кривая обучения''' {{---}} графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Learning_curve Learning curve, Wikipedia]&amp;lt;/ref&amp;gt;. Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при переобучении ===&lt;br /&gt;
При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_variance_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 7. Кривые обучения при переобучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 7 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при переобучении.&lt;br /&gt;
&lt;br /&gt;
=== Кривые обучения при недообучении ===&lt;br /&gt;
При недообучении независимо от объема обучающего датасета как на обучающей выборке, так и на тестовой выборке небольшая средняя ошибка не достигается. &lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias_learning_curve.png|border|400px|Кривые обучения при переобучении|thumb|Рис 8. Кривые обучения при недообучении]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Рис. 8 демонстрирует зависимость средней ошибки для обучающей и тестовой выборок от объема датасета при недообучении.&lt;br /&gt;
&lt;br /&gt;
== High variance и high bias ==&lt;br /&gt;
'''Bias''' {{---}} ошибка неверных предположений в алгоритме обучения. Высокий '''bias''' может привести к недообучению.&lt;br /&gt;
&lt;br /&gt;
'''Variance''' {{---}} ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:High_bias.jpg|border|300px|thumb|right|Рис 9. High variance и high bias]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При использовании нейронных сетей '''variance''' увеличивается, а '''bias''' уменьшается с увеличением количества скрытых слоев.&lt;br /&gt;
&lt;br /&gt;
Для устранения '''high variance''' и '''high bias''' можно использовать смеси и ансамбли. Например, можно составить ансамбль ('''boosting''') из нескольких моделей с высоким '''bias''' и получить модель с небольшим '''bias'''. В другом случае при '''bagging''' соединяются несколько моделей с низким '''bias''', а результирующая модель позволяет уменьшить '''variance'''.&lt;br /&gt;
&lt;br /&gt;
===Дилемма bias–variance ===&lt;br /&gt;
'''Дилемма bias–variance''' {{---}} конфликт в попытке одновременно минимизировать '''bias''' и '''variance''', тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[Файл:Bias-Variance-Tradeoff.png|border|400px|thumb|right|Рис 10. Дилемма bias–variance]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
При небольшой сложности модели мы наблюдаем '''high bias'''. При усложнении модели '''bias''' уменьшается, но '''variance''' увеличится, что приводит к проблеме '''high variance'''.&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;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задачах классификации и регрессии]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting on Coursera, Andrew Ng]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
* [http://blog.lokad.com/journal/2009/4/22/overfitting-when-accuracy-measure-goes-wrong.html Overfitting: when accuracy measure goes wrong]&lt;br /&gt;
* [http://www3.cs.stonybrook.edu/~skiena/jaialai/excerpts/node16.html The Problem of Overfitting Data]&lt;br /&gt;
* [https://elitedatascience.com/overfitting-in-machine-learning Overfitting in Machine Learning]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Overfitting Overfitting] - статься на Википедии&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=Переобучение Переобучение] - вводная статься на MachineLearning.ru&lt;br /&gt;
# [https://www.coursera.org/lecture/machine-learning/the-problem-of-overfitting-ACpTQ The Problem of Overfitting] - курс Andrew Ng&lt;br /&gt;
# ''Hastie, T., Tibshirani, R., Friedman, J. '' [http://www-stat.stanford.edu/~tibs/ElemStatLearn The Elements of Statistical Learning, 2nd edition.] — Springer, 2009. — 533 p.&lt;br /&gt;
# ''Vapnik V.N. '' [http://lib.mexmat.ru/books/9220 Statistical learning theory.] — N.Y.: John Wiley &amp;amp; Sons, Inc., 1998. &lt;br /&gt;
# ''Воронцов, К. В. '' [http://www.machinelearning.ru/wiki/images/b/b6/Voron10doct.pdf Комбинаторная теория надёжности обучения по прецедентам]: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70224</id>
		<title>Стохастический градиентный спуск</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=70224"/>
				<updated>2019-03-05T19:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Стохастический градиентный спуск''' (англ. ''stochastic gradient descent'') $-$ оптимизационный алгоритм, отличающийся от обычного [https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA градиентного спуска] тем, что градиент оптимизируемой функции считается на каждом шаге не как сумма градиентов от каждого элемента выборки, а как градиент от одного, случайно выбранного элемента.&lt;br /&gt;
&lt;br /&gt;
== Обычный градиентный спуск ==&lt;br /&gt;
Для начала вспомним, как работает обычный градиентный спуск. Пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;\{(x_1,y_1),\dots,(x_l,y_l)\}.&amp;lt;/tex&amp;gt; Пусть семейство алгоритмов $a(x, {\bf w})$ имеет параметр вектор весов $\bf w$. И пускай мы выбрали какую-нибудь функцию потерь. Для $i$-го объекта выборки для алгоритма с весами ${\bf w}$ обозначим ее &amp;lt;tex&amp;gt; \mathscr{L}_i({\bf w}) &amp;lt;/tex&amp;gt;. Необходимо минимизировать эмпирический риск, т.е. &amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^l \mathscr{L}_i(w) \,\to\, \min\limits_{\bf w}&amp;lt;/tex&amp;gt;. Если функция потерь принадлежит классу $C_1(X)$, то можно применить метод градиентного спуска. Выберем ${\bf w}^{(0)}$ $-$ начальное приближение. Тогда каждый следующий вектор параметров будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\sum\limits_{i=1}^{l}\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $h$ - градиентный шаг, смысл которого заключается в том, насколько сильно менять вектор весов в направлении градиента. Остановка алгоритма будет определяться сходимостью $Q$ или $\bf w$.&lt;br /&gt;
&lt;br /&gt;
== Стохастический градиентный спуск ==&lt;br /&gt;
Проблема предыдущего алгоритма заключается в том, что чтобы определить новое приближение вектора весов необходимо вычислить градиент от каждого элемента выборки, что может сильно замедлять алгоритм. Идея ускорения алгоритма заключается в использовании только одного элемента, либо некоторой подвыборки для подсчета нового приближения весов. То есть теперь новое приближение будет вычисляться как ${\bf w}^{(t+1)}={\bf w}^{(t)} - h\nabla \mathscr{L}_i({\bf w}^{(t)})$, где $i$ $-$ случайно выбранный индекс. Так как теперь направление изменения $\bf w$ будет определяться за $O(1)$, подсчет $Q$ на каждом шаге будет слишком дорогостоящим. Для того, чтобы ускорить оценку $Q$, будем использовать приближенную рекуррентную формулу. Можно выбрать одну из следующих формул:&lt;br /&gt;
* среднее арифметическое: $\overline{Q}_m = \dfrac{1}{m}\varepsilon_m + \dfrac{1}{m}\varepsilon_{m - 1} + \dfrac{1}{m}\varepsilon_{m - 2} + \dots = \dfrac{1}{m}\varepsilon_m + (1 - \dfrac{1}{m})\overline{Q}_{m-1}$;&lt;br /&gt;
* экспоненциальное скользящее среднее: $\overline{Q}_m = \lambda\varepsilon_m + (1 - \lambda)\varepsilon_{m - 1} + (1 - \lambda)^2\varepsilon_{m - 2} + \dots = \lambda\varepsilon_m + (1-\lambda)\overline{Q}_{m - 1},$ где $\lambda$ $-$ темп забывания предыстории ряда.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
 '''def''' SGD(X, h, $\lambda$)''':''' &amp;lt;font color=green&amp;gt; # где X $-$ выборка, h $-$ градиентный шаг, а $\lambda$ $-$ темп забывания &amp;lt;/font&amp;gt;&lt;br /&gt;
    ${\bf w} =$ initialize_weights() &amp;lt;font color=green&amp;gt; # инициализировать веса &amp;lt;/font&amp;gt;&lt;br /&gt;
    $\overline{Q} = \frac{1}{l} \sum_{i=1}^{l}\mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# инициализировать оценку функционала &amp;lt;/font&amp;gt;&lt;br /&gt;
    '''while''' $Q$ not converges '''or''' ${\bf w}$ not converges''':'''&lt;br /&gt;
        $i =$ rand() % $l$ &amp;lt;font color=green&amp;gt; # случайно выбрать элемент, по которому будет считаться градиент &amp;lt;/font&amp;gt;&lt;br /&gt;
        $\varepsilon = \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt; # вычислить потерю &amp;lt;/font&amp;gt;&lt;br /&gt;
        ${\bf w} = {\bf w} - h \nabla \mathscr{L}_i({\bf w})$ &amp;lt;font color=green&amp;gt;# обновить вектор весов в направлении градиента&amp;lt;/font&amp;gt;&lt;br /&gt;
        $\overline{Q} = \lambda\varepsilon + (1 - \lambda)\overline{Q}$ &amp;lt;font color=green&amp;gt;# оценить функционал&amp;lt;/font&amp;gt;&lt;br /&gt;
    '''return''' w&lt;br /&gt;
&lt;br /&gt;
== Эвристики ==&lt;br /&gt;
Существует несколько способов инициализировать веса:&lt;br /&gt;
* ${\bf w} = {\bf 0}$;&lt;br /&gt;
* $w_j = random(-\dfrac{1}{2n}, \dfrac{1}{2n})$. Стоит брать небольшие случайные веса, так как если выбрать их слишком большими, в некоторых случаях (к примеру в случае нейрона с [[Нейронные_сети,_перцептрон|функцией активациии]] равной арктангенсу) большие начальные значения веса могут привести в область с малыми по модулю производными, в связи с чем из такой области будет трудно выбраться;&lt;br /&gt;
* $w_j = \dfrac{\langle y, f_j \rangle}{\langle f_j, f_j \rangle}$, где $f_j = (f_j(x_i))_{i=1}^l$. Оценка оптимальная в случае, если функция потерь квадратична и признаки нескоррелированы, то есть $\langle f_j, f_k \rangle = 0, j \neq k$.&lt;br /&gt;
Так же можно запустить спуск несколько раз с разными начальными приближениями и выбрать лучшее решение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При выборе случайного элемента можно использовать следующие эвристики:&lt;br /&gt;
* брать объекты из разных классов;&lt;br /&gt;
* брать объекты, на которых ошибка больше, то есть чем меньше отступ (в метрических классификаторах расстояние от разделяющей поверхности до объекта) i-го объекта $M_i$, тем больше вероятность взять этот объект;&lt;br /&gt;
* брать объекты, на которых уверенность меньше, то есть чем меньше $|M_i|$, тем больше вероятность взять этот объект;&lt;br /&gt;
* не брать объекты, на которых уже высокая уверенность ($M_i &amp;gt; \mu_+$) либо не брать объекты-выбросы ($M_i&amp;lt;\mu_i$);&lt;br /&gt;
&lt;br /&gt;
Выбирать величину градиентного шага можно следующими способами:&lt;br /&gt;
* $h_t = \dfrac{1}{t}$;&lt;br /&gt;
* метод скорейшего градиентного спуска: $\mathscr{L}_i({\bf w} - h\nabla \mathscr{L}_i({\bf w})) \rightarrow \min\limits_h$;&lt;br /&gt;
* при квадратичной функции потерь можно использовать $h = ||x_i||^2$;&lt;br /&gt;
* иногда можно выполнять пробные шаги, а именно увеличивать $h$ для выбивания процесса из локальных минимумов;&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D0%B1%D0%B5%D1%80%D0%B3%D0%B0_%E2%80%94_%D0%9C%D0%B0%D1%80%D0%BA%D0%B2%D0%B0%D1%80%D0%B4%D1%82%D0%B0 метод Левенберга-Марквардта];&lt;br /&gt;
&lt;br /&gt;
== Регуляризация ==&lt;br /&gt;
Основным способом уменьшить переобучение является [[Регулярищация|регуляризация]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;, т.е. сокращение весов. Будем штрафовать за увеличение нормы вектора весов, для этого перепишем функцию потерь $\tilde{\mathscr{L}}_i({\bf w}) = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2}||w||^2 = \mathscr{L}_i({\bf w}) + \dfrac{\tau}{2} \sum\limits_{j=1}^nw_j^2 \rightarrow \min\limits_w$, где $\tau$ $-$ коэффициент регуляризации.&lt;br /&gt;
&lt;br /&gt;
Тогда градиент будет следующим: $\nabla \tilde{\mathscr{L}}_i({\bf w}) = \nabla \mathscr{L}_i({\bf w}) + \tau {\bf w}$, а градиентный шаг будет выглядеть так: ${\bf w} = {\bf w}(1 - h\tau) - h\nabla \mathscr{L}_i({\bf w})$.&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;br /&gt;
&lt;br /&gt;
== Пример кода scikit-learn == &lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/sgd.html sklearn.linear_model.'''SGDClassifier'''] имеет несколько параметров, например: &lt;br /&gt;
&lt;br /&gt;
'''loss''' $-$ функция потерь. По умолчанию используется &amp;quot;hinge&amp;quot;, дающая алгоритм линейного SVM;&lt;br /&gt;
&lt;br /&gt;
'''penalty''' $-$ метод регуляризации. По умолчанию &amp;quot;l2&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
'''alpha''' $-$ $\tau$, коэффициент регуляризации;&lt;br /&gt;
&lt;br /&gt;
'''learning_rate''' $-$ алгоритм изменения градиентного шага;&lt;br /&gt;
&lt;br /&gt;
'''eta0''' $-$ начальный градиентный шаг;&lt;br /&gt;
&lt;br /&gt;
'''shuffle''' перемешивать тренировочную выборку после каждой итерации;&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки:&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' SGDClassifier&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества:&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение:&lt;br /&gt;
 clf = SGDClassifier(shuffle = True)&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание:&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[http://www.machinelearning.ru/wiki/images/5/53/Voron-ML-Lin-SG.pdf Метод стохастического градиента] $-$ презентация Воронцова&lt;br /&gt;
*[https://www.youtube.com/watch?v=4BKQ3GZR32w&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=4 Метод стохастического градиента] $-$ запись лекции Воронцова&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
*[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.decision_function sklearn.linear_model.SGDClassifier] $-$ описание алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70223</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70223"/>
				<updated>2019-03-05T19:26:17Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
====[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса] ====&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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf machinelearning.ru {{---}} Задачи выбора модели]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Wikipedia {{---}} Hyperparameter]&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ What is the Difference Between a Parameter and a Hyperparameter?]&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
* [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
* Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70222</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70222"/>
				<updated>2019-03-05T19:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Мета-обучение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
====[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса] ====&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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70221</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70221"/>
				<updated>2019-03-05T19:12:56Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Мета-обучение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
====[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса] ====&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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70220</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70220"/>
				<updated>2019-03-05T19:12:05Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Теория Вапника-ЧервоненкисаТеория Вапника-Червоненкинса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
====[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса] ====&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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70219</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70219"/>
				<updated>2019-03-05T19:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: Отмена правки 70212, сделанной Penguinni (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70218</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70218"/>
				<updated>2019-03-05T19:08:17Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: Отмена правки 70215, сделанной Penguinni (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70217</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70217"/>
				<updated>2019-03-05T19:07:23Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: Отмена правки 70216, сделанной Penguinni (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке Tree-base Pipeline Optimization Tool (TPOT)&amp;lt;ref&amp;gt;[https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)]&amp;lt;/ref&amp;gt; для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70216</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70216"/>
				<updated>2019-03-05T18:56:40Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Автоматизированный выбор модели в библиотеке auto-sklearn для Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке Tree-base Pipeline Optimization Tool (TPOT)&amp;lt;ref&amp;gt;[https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)]&amp;lt;/ref&amp;gt; для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-sklearn&amp;lt;ref&amp;gt;[https://automl.github.io/auto-sklearn/stable/ auto-sklearn]&amp;lt;/ref&amp;gt; для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70215</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70215"/>
				<updated>2019-03-05T18:55:43Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Автоматизированный выбор модели в библиотеке Tree-base Pipeline Optimization Tool (TPOT) для Python. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке Tree-base Pipeline Optimization Tool (TPOT)&amp;lt;ref&amp;gt;[https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)]&amp;lt;/ref&amp;gt; для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70214</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70214"/>
				<updated>2019-03-05T18:54:54Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Мета-обучение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие&amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70213</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70213"/>
				<updated>2019-03-05T18:54:08Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Теория Вапника-Червоненкиса Теория Вапника-Червоненкинса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70212</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70212"/>
				<updated>2019-03-05T18:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Автоматизированный выбор модели в библиотеке auto-WEKA для Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса &amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке auto-WEKA&amp;lt;ref&amp;gt;[https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA]&amp;lt;/ref&amp;gt; для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма SMAC&amp;lt;ref&amp;gt;[https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&amp;lt;/ref&amp;gt;. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70211</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70211"/>
				<updated>2019-03-05T18:52:19Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Теория Вапника-Червоненкиса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. После этого вычисляется эмпирический риск, на основе которого формируются метки классов. Затем мета-классификатор обучается на полученных результатах. В качестве описания набора данных выступает вектор мета-признаков, а в качестве метки — алгоритм, оказавшийся самым эффективным с точки зрения заранее выбранной меры качества. &lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки мета-обучения:&lt;br /&gt;
# Алгоритм, обучающийся большое время, запускается меньшее количество раз, что сокращает время работы;&lt;br /&gt;
# Точность алгоритма может быть ниже, чем при кросс-валидации.&lt;br /&gt;
&lt;br /&gt;
==== Теория Вапника-Червоненкиса &amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&amp;lt;/ref&amp;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;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70210</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70210"/>
				<updated>2019-03-05T18:51:07Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Примечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70209</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70209"/>
				<updated>2019-03-05T18:50:14Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
* [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
* [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70208</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70208"/>
				<updated>2019-03-05T18:49:48Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70207</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70207"/>
				<updated>2019-03-05T18:48:35Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Мета-обучение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче обучения с учителем &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и многие другие &amp;lt;ref&amp;gt;[https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets meta-feature description for recommending feature selection algorithm]&amp;lt;/ref&amp;gt;. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70206</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70206"/>
				<updated>2019-03-05T18:40:50Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* См. также */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и [https://ieeexplore.ieee.org/document/7382962 многие другие], а еще эту статью можно найти вот [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf тут]. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70205</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70205"/>
				<updated>2019-03-05T18:40:11Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Методы выбора модели */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|center|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
{{main|Мета-обучение}}&lt;br /&gt;
&lt;br /&gt;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и [https://ieeexplore.ieee.org/document/7382962 многие другие], а еще эту статью можно найти вот [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf тут]. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70204</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70204"/>
				<updated>2019-03-05T18:34:33Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и [https://ieeexplore.ieee.org/document/7382962 многие другие], а еще эту статью можно найти вот [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf тут]. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
'''Емкость модели для задачи классификации''' {{---}} максимальное число объектов обучающей выборки, для которых при любом их разбиении на классы найдется хотя бы одно решающее правило, безошибочно их классифицирующее.&lt;br /&gt;
&lt;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70203</id>
		<title>Модель алгоритма и её выбор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0_%D0%B8_%D0%B5%D1%91_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80&amp;diff=70203"/>
				<updated>2019-03-05T18:31:50Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Кросс-валидация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Понятие модели==&lt;br /&gt;
Пусть дана обучающая выборка &amp;lt;tex&amp;gt;(X, Y)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество признаков, описывающих объекты, а &amp;lt;tex&amp;gt; Y &amp;lt;/tex&amp;gt; {{---}} конечное множество меток.&lt;br /&gt;
&lt;br /&gt;
Пусть задана функция &amp;lt;tex&amp;gt; g: X \times \Theta \rightarrow Y &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; {{---}} множество дополнительных параметров (весов) функции.&lt;br /&gt;
&lt;br /&gt;
Описанная выше функция &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt; для фиксированного значения весов &amp;lt;tex&amp;gt; \theta \in \Theta &amp;lt;/tex&amp;gt; называется '''решающим правилом'''.&lt;br /&gt;
&lt;br /&gt;
'''Модель''' {{---}} совокупность всех решающих правил, которые получаются путем присваивания весам всех возможных допустимых значений. &lt;br /&gt;
&lt;br /&gt;
Формально модель &amp;lt;tex&amp;gt; A = \{g(x, \theta) | \theta \in \Theta\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Модель определяется множеством допустимых весов &amp;lt;tex&amp;gt; \Theta &amp;lt;/tex&amp;gt; и структурой решающего правила &amp;lt;tex&amp;gt; g(x,\theta) &amp;lt;/tex&amp;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;
Для нахождения оптимальных гиперпараметров модели могут применяться различные алгоритмы [[Настройка гиперпараметров | настройки гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
[[Файл:Linear-regression.png|300px|thumb|[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 Рис 1. Пример линейной регрессии]]]&lt;br /&gt;
В качестве примера модели приведем [[Линейная регрессия | линейную регрессию]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан].&lt;br /&gt;
&lt;br /&gt;
Линейная регрессия задается следующей формулой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; g(x, \theta) = \theta_0 + \theta_1x_1 + ... + \theta_kx_k = \theta_0 + \sum_{i=1}^k \theta_ix_i = \theta_0 + x^T\theta&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; x^T = (x_1, x_2, ..., x_k) &amp;lt;/tex&amp;gt; {{---}} вектор признаков, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \theta = (\theta_1, \theta_2, ..., \theta_k)&amp;lt;/tex&amp;gt; {{---}} веса модели, настраиваемые в процессе обучения.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметром модели является число слагаемых в функции &amp;lt;tex&amp;gt; g(x, \theta) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Более подробный пример линейной регрессии можно посмотреть в статье [[Переобучение | переобучение]].&lt;br /&gt;
&lt;br /&gt;
== Задача выбора модели ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} модель алгоритма, характеризующаяся гиперпараметрами &amp;lt;tex&amp;gt; \lambda = \{\lambda_1, ..., \lambda_m\}, \lambda_1 \in \Lambda_1, ..., \lambda_m \in \Lambda_m &amp;lt;/tex&amp;gt;. Тогда с ней связано пространство гиперпараметров &amp;lt;tex&amp;gt; \Lambda = \Lambda_1 \times ... \times \Lambda_m &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
За &amp;lt;tex&amp;gt; A_{\lambda}&amp;lt;/tex&amp;gt; обозначим алгоритм, то есть модель алгоритма, для которой задан вектор гиперпараметров &amp;lt;tex&amp;gt; \lambda \in \Lambda &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для выбора наилучшего алгоритма необходимо зафиксировать меру качества работы алгоритма. Назовем эту меру &amp;lt;tex&amp;gt; Q(A_{\lambda}, D) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу выбора наилучшего алгоритма можно разбить на две подзадачи: подзадачу выбора лучшего алгоритма из портфолио и подзадачу настройки гиперпараметров.&lt;br /&gt;
&lt;br /&gt;
==== Подзадача выбора лучшего алгоритма из портфолио ====&lt;br /&gt;
Дано некоторое множество алгоритмов с фиксированными структурными параметрами &amp;lt;tex&amp;gt; \mathcal{A} = \{A^1_{\lambda_1}, ..., A^m_{\lambda_m}\}&amp;lt;/tex&amp;gt; и обучающая выборка &amp;lt;tex&amp;gt; D = \{d_1, ..., d_n\}&amp;lt;/tex&amp;gt;. Здесь &amp;lt;tex&amp;gt; d_i = (x_i, y_i) \in (X, Y)&amp;lt;/tex&amp;gt;. Требуется выбрать алгоритм &amp;lt;tex&amp;gt; A^*_{\lambda_*} &amp;lt;/tex&amp;gt;, который окажется наиболее эффективным с точки зрения меры качества &amp;lt;tex&amp;gt; Q &amp;lt;/tex&amp;gt;.&lt;br /&gt;
==== Подзадача оптимизации гиперпараметров ====&lt;br /&gt;
Подзадача оптимизации гиперпараметров заключается в подборе таких &amp;lt;tex&amp;gt; \lambda^* \in \Lambda &amp;lt;/tex&amp;gt;, при которых заданная модель алгоритма &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; будет наиболее эффективна.&lt;br /&gt;
&lt;br /&gt;
Гиперпараметры могут выбираться из ограниченного множества или с помощью перебора из неограниченного множества гиперпараметров, это зависит от непосредственной задачи. Во втором случае актуален вопрос максимального времени, которое можно потратить на поиск наилучших гиперпараметров, так как чем больше времени происходит перебор, тем лучше гиперпараметры можно найти, но при этом может быть ограничен временной бюджет, из-за чего перебор придется прервать.&lt;br /&gt;
&lt;br /&gt;
=== Методы выбора модели ===&lt;br /&gt;
Модель можно выбрать из некоторого множества моделей, проверив результат работы каждой модели из множества с помощью ручного тестирования, но ручное тестирование серьезно ограничивает количество моделей, которые можно перебрать, а также требует больших трудозатрат. Поэтому в большинстве случаев используются алгоритмы, позволяющие автоматически выбирать модель. Далее будут рассмотрены некоторые из таких алгоритмов.&lt;br /&gt;
[[Файл:Scikit-learn-scheme.png|900px|thumb|[https://www.codeastar.com/choose-machine-learning-models-python/ Рис 2. Схема выбора модели в библиотеке scikit-learn для Python]]]&lt;br /&gt;
==== Кросс-валидация ====&lt;br /&gt;
{{main|Кросс-валидация}}&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;
Целью мета-обучения является решение задачи выбора алгоритма из портфолио алгоритмов для решения поставленной задачи без непосредственного применения каждого из них. Решение этой задачи в рамках мета-обучения сводится к задаче [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC обучения с учителем]. Для этого используется заранее отобранное множество наборов данных &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;gt;. Для каждого набора данных &amp;lt;tex&amp;gt; d \in D &amp;lt;/tex&amp;gt; вычисляется вектор мета-признаков, которые описывают свойства этого набора данных. Ими могут быть: число категориальных или численных признаков объеков в &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt;, число возможных меток, размер &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; и [https://ieeexplore.ieee.org/document/7382962 многие другие], а еще эту статью можно найти вот [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf тут]. Каждый алгоритм запускается на всех наборах данных из &amp;lt;tex&amp;gt; D &amp;lt;/tex&amp;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;br /&gt;
'''Емкость модели для задачи классификации''' {{---}} максимальное число объектов обучающей выборки, для которых при любом их разбиении на классы найдется хотя бы одно решающее правило, безошибочно их классифицирующее.&lt;br /&gt;
&lt;br /&gt;
По аналогии емкость обобщается на другие задачи машинного обучения.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что чем больше емкость, тем более «гибкой» является модель и, соответственно, тем хуже. Значит нужно добиваться минимально возможного количества ошибок на обучении при минимальной возможной емкости.&lt;br /&gt;
&lt;br /&gt;
Существует формула Вапника, связывающая ошибку на обучении &amp;lt;tex&amp;gt; P_{train}(\theta) &amp;lt;/tex&amp;gt;, емкость &amp;lt;tex&amp;gt; h(\theta) &amp;lt;/tex&amp;gt; и ошибку на генеральной совокупности &amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; P_{test}(\theta) &amp;lt;= P_{train}(\theta) + \sqrt{\frac{h(\Theta) * (\log{(\frac{2d}{h(\Theta)})} + 1) - \log{(\frac{\eta}{4})}}{n}} &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; d &amp;lt;/tex&amp;gt; {{---}} размерность пространства признаков.&lt;br /&gt;
&lt;br /&gt;
Неравенство верно с вероятностью &amp;lt;tex&amp;gt; 1 - \eta &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \forall \theta \in \Theta &amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
== Существующие системы автоматического выбора модели ==&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://www.ml4aad.org/wp-content/uploads/2018/07/automl_book_draft_auto-weka.pdf auto-WEKA] для Java===&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задач классификации и регрессии (начиная с версии 2.0).&lt;br /&gt;
&lt;br /&gt;
Библиотека позволяет автоматически выбирать из 27 базовых алгоритмов, 10 мета-алгоритмов и 2 ансамблевых алгоритмов лучший, одновременно настраивая его гиперпараметры при помощи алгоритма [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]. Решение достигается полным перебором: оптимизация гиперпараметров запускается на всех алгоритмах по очереди. Недостатком такого подхода является слишком большое время выбора модели.&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://epistasislab.github.io/tpot/ Tree-base Pipeline Optimization Tool (TPOT)] для Python.===&lt;br /&gt;
[[Файл:TPOT-scheme.jpeg|500px|thumb|[https://raw.githubusercontent.com/EpistasisLab/tpot/master/images/tpot-ml-pipeline.png Рис 3. Схема выбора модели в библиотеке TPOT]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Выбор модели осуществляется на основе конвейера, организованного в древовидной структуре. Каждая вершина дерева {{---}} один из четырех операторов конвейера (preprocessing, decomposition, feature selection, modelling). Каждый конвейер начинается с одной или нескольких копий входного набора данных, которые являются листьями дерева и которые подаются в операторы в соответствии со структурой конвейера. Данные модифицируются оператором в вершине и поступают на вход следующей вершины. В библиотеке используются генетические алгоритмы для нахождения лучших конвейеров.&lt;br /&gt;
&lt;br /&gt;
После поиска конвейера его также можно экспортировать в файл Python.&lt;br /&gt;
&lt;br /&gt;
===Автоматизированный выбор модели в библиотеке [https://automl.github.io/auto-sklearn/stable/ auto-sklearn] для Python===&lt;br /&gt;
[[Файл:Auto-sklearn-scheme.png|500px|thumb|[https://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf Рис 4. Схема выбора модели в библиотеке auto-sklearn]]]&lt;br /&gt;
Библиотека используется для одновременного поиска оптимальной модели и оптимальных гиперпараметров модели для задачи классификации.&lt;br /&gt;
&lt;br /&gt;
Сначала используется мета-обучение на основе различных признаков и мета-признаков набора данных, чтобы найти наилучшие модели. После этого используется подход [https://en.wikipedia.org/wiki/Bayesian_optimization Байесовской оптимизации], чтобы найти наилучшие гиперпараметры для наилучших моделей.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Настройка гиперпараметров]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Мета-обучение]]&lt;br /&gt;
* [[Линейная регрессия]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%92%D0%B0%D0%BF%D0%BD%D0%B8%D0%BA%D0%B0-%D0%A7%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B5%D0%BD%D0%BA%D0%B8%D1%81%D0%B0 Теория Вапника-Червоненкинса]&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Cross-validation_(statistics) Кросс-валидация]&lt;br /&gt;
# [https://link.springer.com/article/10.1023/B:MACH.0000015878.60765.42 Мета-обучение]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&lt;br /&gt;
# [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Линейная регрессия]&lt;br /&gt;
# [https://www.fruct.org/publications/ainl-fruct/files/Fil.pdf Datasets Meta-Feature Description for Recommending Feature Selection Algorithm]&lt;br /&gt;
# [https://www.ml4aad.org/automated-algorithm-design/algorithm-configuration/smac/ SMAC]&lt;br /&gt;
# [https://7bce9816-a-62cb3a1a-s-sites.googlegroups.com/site/automl2017icml/accepted-papers/AutoML_2017_paper_23.pdf?attachauth=ANoY7cr6uPaUoNh3gc3A-A1UbLXQgNEATEkfZmKD8kozB3hpCYtM9JwnOevEsW9W42CwurzJKrxxEatcB4DCjWNB_Ndvy1uC0lbQyCTlDIfrW6eYJXvdbFJPilYfmf8_ryilH0IwG0ddntLYy-VA3Fm1JeM495fTZxorYth0DDKiqtKvSR92dGl8CM_mUB7sun0R6wurCxM36QqcYEaf5kIm13MM0reWlR3aPZVNe_-AefOCpoXznR-wH04mSWjH8jmlk5Bw51AN&amp;amp;attredirects=0 Fast Automated Selection of Learning Algorithm And its Hyperparameters by Reinforcement Learning]&lt;br /&gt;
# Shalamov V., Efimova V., Muravyov S., and Filchenkov A. &amp;quot;Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization.&amp;quot; Procedia Computer Science 136 (2018): 144-153.&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
# [http://www.machinelearning.ru/wiki/images/0/05/BMMO11_4.pdf Выбор модели] - презентация на MachineLearning.ru&lt;br /&gt;
# [https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning) Гиперпараметры] - статья на Википедии&lt;br /&gt;
# [https://machinelearningmastery.com/difference-between-a-parameter-and-a-hyperparameter/ Разница между параметрами и гиперпараметрами] - описание разницы между параметрами и гиперпараметрами модели&lt;br /&gt;
# [http://jmlda.org/papers/doc/2016/no2/Efimova2016Reinforcement.pdf Применение обучения с подкреплением для одновременного выбора модели алгоритма классификации и ее структурных параметров]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Автоматическое машинное обучение]]&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=70182</id>
		<title>Общие понятия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=70182"/>
				<updated>2019-03-03T19:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Понятие машинного обучения в искусственном интеллекте ==&lt;br /&gt;
Одним из первых, кто использовал термин &amp;quot;машинное обучение&amp;quot;, был изобретатель первой самообучающейся компьютерной программы игры в шашки А. Л. Самуэль в 1959 г. &amp;lt;ref&amp;gt;[https://www.cs.virginia.edu/~evans/greatworks/samuel.pdf A.L. Samuel &amp;quot;Some Studies in Machine Learning Using the Game of Checkers&amp;quot; (IBM Journal. July 1959. P. 210–229)]&amp;lt;/ref&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Машинное обучение''' (англ. ''Machine learning'') {{---}} процесс, который даёт возможность компьютерам обучаться выполнять что-то без явного написания кода.&lt;br /&gt;
}}&lt;br /&gt;
Это определение не выдерживает критики, так как не понятно, что означает наречие &amp;quot;явно&amp;quot;. Более точное определение дал намного позже Т. М. Митчелл. &amp;lt;ref&amp;gt;[https://www.cs.ubbcluj.ro/~gabis/ml/ml-books/McGrawHill%20-%20Machine%20Learning%20-Tom%20Mitchell.pdf T.M. Mitchell &amp;quot;Machine Learning&amp;quot; (McGraw-Hill, 1997) ]&amp;lt;/ref&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Компьютерная '''программа обучается''' на основе опыта $E$ по отношению к некоторому классу задач $T$ и меры качества $P$, если качество решения задач из $T$, измеренное на основе $P$, улучшается с приобретением опыта $E$. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Задача обучения ==&lt;br /&gt;
$X$ {{---}} множество объектов (англ. '''object set''', or ''input set'') &amp;lt;br /&amp;gt;&lt;br /&gt;
$Y$ {{---}} множество меток классов (англ. '''label set''', or ''output set'') &amp;lt;br /&amp;gt;&lt;br /&gt;
$\hat y∶ X → Y$ {{---}} неизвестная зависимость  (англ. '''unknown target function''' ''(dependency)'') &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Дано''' &amp;lt;br /&amp;gt;&lt;br /&gt;
${x_1, . . . , x_l} ⊂ X$ {{---}} обучающая выбока (англ. ''training sample set'') &amp;lt;br /&amp;gt;&lt;br /&gt;
$y_i = \hat y(x_i), i = 1, . . . , l $ {{---}} известные метки классов &amp;lt;br /&amp;gt;&lt;br /&gt;
'''Найти''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Найти $ a ∶ X → Y $ {{---}} алгоритм, решающую функцию (англ. '''decision function'''), приближающую $y$ на всём множестве $X$.&lt;br /&gt;
=== Признаки ===&lt;br /&gt;
Компьютер всегда имеет дело с признаковым описанием объектов. ''Например,'' пациента можно описать признаками: имя, возраст, номер полиса, жалобы, давление, температура, результаты анализов. &amp;lt;br /&amp;gt;&lt;br /&gt;
$f_j∶ X → D_j,j = 1, ... , n$ {{---}} признаки (англ. '''features''', or ''attributes'').&lt;br /&gt;
&lt;br /&gt;
Типы признаков:&lt;br /&gt;
* бинарный (''binary''): $D_j = \{0, 1\}$;&lt;br /&gt;
* номинальный, или категориальный (''categorical): $D_j$ конечно;&lt;br /&gt;
* упорядоченный (''ordinal''): $D_j$ конечно и упорядоченно;&lt;br /&gt;
* числовой (''numerical''): $D_j = \mathbb{R}$.&lt;br /&gt;
&lt;br /&gt;
т.е. объект представляется как набор признаков $(f_1(x),... ,f_n(x))$. Данные обычно представляются в виде матрицы объектов-признаков &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
F = ||f_j(x_i)||_{[l \times n]} = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
f_1(x_1) &amp;amp; \cdots &amp;amp; f_n(x_1) \\&lt;br /&gt;
\cdots &amp;amp; \cdots &amp;amp; \cdots \\&lt;br /&gt;
f_1(x_l) &amp;amp; \cdots &amp;amp; f_n(x_l) \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Типы задач ===&lt;br /&gt;
'''Задачи классификации''' (англ. ''classification''):&lt;br /&gt;
* $Y = \{−1, +1\}$ — классификация на 2 класса;&lt;br /&gt;
* $Y = \{1, . . . , M\}$ — на $M$ непересекающихся классов;&lt;br /&gt;
* $Y = \{0, 1\}^M$— на $M$ классов, которые могут пересекаться.&lt;br /&gt;
''Примеры:'' распознавание текста по рукописному вводу, определение того, находится на фотографии человек или кот.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Задачи восстановления регрессии''' (англ. ''regression''):&lt;br /&gt;
{{main|Восстановление регрессии|l1=Восстановление регрессии&amp;lt;sup&amp;gt;[на 28.01.2019 не создан]&amp;lt;/sup&amp;gt;}}&lt;br /&gt;
* $Y = \mathbb{R}$ или $Y = \mathbb{R}^m$.&lt;br /&gt;
''Примеры:'' предсказание стоимости акции через полгода, предсказание прибыли магазина в следующем месяце, предсказание качества вина на слепом тестировании.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Задачи ранжирования''' (англ. ''ranking''):&lt;br /&gt;
* $Y$ {{---}} конечное упорядоченное множество.&lt;br /&gt;
''Пример:'' выдача поискового запроса.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Задачи уменьшения размерности'''  (англ. ''dimensionality reduction'') &amp;lt;br/&amp;gt;&lt;br /&gt;
{{main|Уменьшение размерности}}&lt;br /&gt;
Научиться описывать данные не $N$ признаками, а меньшим числом для повышения точности модели или последующей визуализации. В качестве примера помимо необходимости для визуализации можно привести сжатие данных. &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Задачи кластеризации'''  (англ. ''cluster analysis'')&amp;lt;br/&amp;gt;&lt;br /&gt;
{{main|Кластеризация}}&lt;br /&gt;
Разбиение данных множества объектов на подмножества ('''кластеры''') таким образом, чтобы объекты из одного кластера были более похожи друг на друга, чем на объекты из других кластеров по какому-либо критерию.  &amp;lt;br/&amp;gt;&lt;br /&gt;
''Примеры:'' разбиение клиентов сотового оператора по платёжеспособности, разбиение космических объектов на похожие (галактики, планеты, звезды и так далее). &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Задачи выявления аномалий''' (англ. ''anomaly detection'')&amp;lt;br/&amp;gt;&lt;br /&gt;
{{main|Выброс}}&lt;br /&gt;
На основании признаков научиться различать отличать аномалии. Кажется, что от задачи классификации эта задача ничем не отличается. Но особенность выявления аномалий состоит в том, что примеров аномалий для тренировки модели у нас либо очень мало, либо нет совсем, поэтому мы не можем решать такую задачу как задачу классификации. &amp;lt;br/&amp;gt;&lt;br /&gt;
''Пример:'' определение мошеннических транзакций по банковской карте.&lt;br /&gt;
&lt;br /&gt;
== Классификация задач машинного обучения ==&lt;br /&gt;
&lt;br /&gt;
==== Обучение с учителем (англ. ''Supervised learning'' &amp;lt;ref&amp;gt; [http://www.machinelearning.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BC Обучение с учителем]&amp;lt;/ref&amp;gt;) ====&lt;br /&gt;
Метки классов $y_i$ доступны все сразу (известны ответы для поставленной задачи).&amp;lt;br/&amp;gt;&lt;br /&gt;
''Задачи которые могут решаться этим способом:'' классификация, регрессия.&lt;br /&gt;
&lt;br /&gt;
==== Обучение без учителя (англ. ''Unsupervised learning'') ====&lt;br /&gt;
Изучает широкий класс задач обработки данных, в которых известны только описания множества объектов (обучающей выборки), и требуется обнаружить внутренние взаимосвязи, зависимости, закономерности, существующие между объектами. Т.е. тренировочные данные доступны все сразу, но ответы для поставленной задачи неизвестны. &lt;br /&gt;
&lt;br /&gt;
''Задачи, которые могут решаться этим способом:'' кластеризация, нахождение ассоциативных правил, выдача рекомендаций (например, реклама), уменьшение размерности датасета.&lt;br /&gt;
&lt;br /&gt;
==== Обучение с частичным привлечением учителя (англ. ''Semi-supervised learning''&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%A7%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Semi-supervised learning]&amp;lt;/ref&amp;gt;) ====&lt;br /&gt;
{{main|Обучение с частичным привлечением учителя}}&lt;br /&gt;
Занимает промежуточное положение между обучением с учителем и без учителя. Каждый прецедент представляет собой пару «объект, ответ», но ответы известны только на части прецедентов (Размечено мало, либо малоинформативная часть).&amp;lt;br/&amp;gt;&lt;br /&gt;
''Примером частичного обучения может послужить сообучение:'' два или более обучаемых алгоритма используют один и тот же набор данных, но каждый при обучении использует различные — в идеале некоррелирующие — наборы признаков объектов.&lt;br /&gt;
&lt;br /&gt;
==== Обучение с подкреплением (англ. ''Reinforcement learning'') ====&lt;br /&gt;
{{main|Обучение с подкреплением}}&lt;br /&gt;
Частный случай обучения с учителем, сигналы подкрепления (правильности ответа) выдаются не учителем, а некоторой средой, с которой взаимодействует программа. Размеченность данных зависит от среды.&lt;br /&gt;
&lt;br /&gt;
Окружение обычно формулируется как марковский процесс принятия решений (МППР) с конечным множеством состояний, и в этом смысле алгоритмы обучения с подкреплением тесно связаны с динамическим программированием. Вероятности выигрышей и перехода состояний в МППР обычно являются величинами случайными, но стационарными в рамках задачи.&lt;br /&gt;
&lt;br /&gt;
При обучении с подкреплением, в отличие от обучения с учителем, не предоставляются верные пары &amp;quot;входные данные-ответ&amp;quot;, а принятие суб оптимальных решений (дающих локальный экстремум) не ограничивается явно. Обучение с подкреплением пытается найти компромисс между исследованием неизученных областей и применением имеющихся знаний.&lt;br /&gt;
&lt;br /&gt;
==== Активное обучение (англ. ''Active learning'') ====&lt;br /&gt;
{{main|Активное обучение}}&lt;br /&gt;
Отличается тем, что обучаемый имеет возможность самостоятельно назначать следующий прецедент, который станет известен. Применяется когда получение истиной метки для объекта затруднительно. Поэтому алгоритм должен уметь определять, на каких объектах ему надо знать ответ,&lt;br /&gt;
чтобы лучше всего обучиться, построить наилучшую модель.&lt;br /&gt;
&lt;br /&gt;
==== Обучение в реальном времени (англ. ''Online learning'') ====&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;
&lt;br /&gt;
''Обучающая выборка'' состоит из двух классов:&lt;br /&gt;
* районы известных месторождений; &lt;br /&gt;
* похожие районы, в которых интересующее ископаемое обнаружено не было.&lt;br /&gt;
&lt;br /&gt;
При поиске редких полезных ископаемых количество объектов может оказаться намного меньше, чем количество признаков. В этой ситуации плохо работают классические статистические методы. Задача решается путём поиска закономерностей в имеющемся массиве данных. В процессе решения выделяются короткие наборы признаков, обладающие наибольшей ''информативностью'' — способностью наилучшим образом разделять классы (''&amp;quot;синдромы&amp;quot;'' месторождений). &lt;br /&gt;
* '''Оценивание кредитоспособности заёмщиков''' &amp;lt;br/&amp;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;br /&gt;
* ''Числовые признаки:''сумма кредита, возраст, стаж работы, доход семьи, размер задолженностей в других банках.&lt;br /&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;
* ''Порядковый признак'': тяжесть состояния (удовлетворительное, средней тяжести, тяжёлое, крайне тяжёлое);&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;br /&gt;
Ценность такого рода систем в том, что они способны мгновенно анализировать и обобщать огромное количество прецедентов — возможность, недоступная специалисту-врачу. &lt;br /&gt;
&lt;br /&gt;
* '''Задача классификации видов ириса (Фишер 1936)''' &amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/%D0%98%D1%80%D0%B8%D1%81%D1%8B_%D0%A4%D0%B8%D1%88%D0%B5%D1%80%D0%B0 Задача классификации видов ириса]&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;[http://edu.mmcs.sfedu.ru/pluginfile.php/17198/mod_resource/content/1/01%20%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5%20%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F.pdf Презентация &amp;quot;Основные понятия машинного обучения&amp;quot;]&amp;lt;/ref&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
[[Файл:Iris_classification.png|650px]]&lt;br /&gt;
&lt;br /&gt;
== Открытые наборы данных для обучения ==&lt;br /&gt;
{{main|Известные наборы данных|l1=Известные наборы данных&amp;lt;sup&amp;gt;[на 28.01.2019 не создан]&amp;lt;/sup&amp;gt;}}&lt;br /&gt;
==== Компьютерное зрение ====&lt;br /&gt;
*  [https://pjreddie.com/projects/mnist-in-csv/ MNIST]: один из самых востребованных наборов для проверки работоспособности. Есть датасеты 25x25, отцентрованные, рукописные чёрно-былые цифры;&lt;br /&gt;
*  [https://www.cs.toronto.edu/~kriz/cifar.html CIFAR10 &amp;amp; CIFAR100]: цветные изображения 32x32. Сегодня используется нечасто, но может быть хорошим вариантов для проверки работоспособности;&lt;br /&gt;
*  [http://image-net.org/ ImageNet]: датасет изображений для проверки новых алгоритмов.&lt;br /&gt;
&lt;br /&gt;
==== Естественные языки ====&lt;br /&gt;
* [https://blog.einstein.ai/the-wikitext-long-term-dependency-language-modeling-dataset/ WikiText]: большой свод данных для языкового моделирования из статей Википедии, собранный Salesforce MetaMind.&lt;br /&gt;
==== Речь ====&lt;br /&gt;
*  [http://www.openslr.org/12/ LibriSpeech]: около 500 часов начитки аудиокниг, в исполнении разных людей. Данные организованы по главам книг, содержат текст и записи.&lt;br /&gt;
==== Системы рекомендаций и ранжирования ====&lt;br /&gt;
* [https://www.kaggle.com/c/msdchallenge Million Song Dataset]: большой open source-датасет [https://www.kaggle.com/ Kaggle], насыщенный метаданными. Хороший вариант для тех, кто экспериментирует с гибридными системами рекомендаций.&lt;br /&gt;
==== Сети и графы ====&lt;br /&gt;
* [http://snap.stanford.edu/data/#amazon Amazon Co-Purchasing] и [http://snap.stanford.edu/data/amazon-meta.html Amazon Reviews]: данные, собранные из раздела «Пользователи, купившие это, также выбирают…» на Amazon, а также обзоры сопутствующих товаров. Хорош для экспериментов рекомендательными системами в соцсетях.&lt;br /&gt;
==== Геопространственные данные ====&lt;br /&gt;
* [http://wiki.openstreetmap.org/wiki/Planet.osm OpenStreetMap]: векторные картографические данные для всей планеты, с бесплатной лицензией. Включает в себя старую версию данных TIGER Бюро переписи США.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Переобучение]]&lt;br /&gt;
* [[Модель алгоритма и ее выбор]]&lt;br /&gt;
* [[Оценка качества в задаче кластеризации]]&lt;br /&gt;
* [[Кросс-валидация]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Machine_learning Wikipedia {{---}} Machine learning]&lt;br /&gt;
*[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 machinelearning.ru {{---}} Машинное обучение (курс лекций, К.В.Воронцов)]&lt;br /&gt;
*[https://newtonew.com/tech/machine-learning-novice Машинное обучение для чайников]&lt;br /&gt;
*[https://golos.io/ru--programmirovanie/@randall/kak-ii-nauchit-vsemu-luchshie-otkrytye-nabory-dannykh-dlya-obucheniya Лучшие наборы данных для обучения]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70178</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70178"/>
				<updated>2019-03-03T17:57:51Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Логическая регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления [[Определение булевой функции|булевой функции]] от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.&amp;lt;br/&amp;gt;Элементы, появившиеся в результате применения операции, выделены черным фоном.]]&lt;br /&gt;
&lt;br /&gt;
Может показаться не совсем понятным, как же применить регрессию к булевым выражениям. Рассмотрим в общих чертах алгоритм логической регрессии. &lt;br /&gt;
Логическая регрессия, как и другие методы регрессии, перебирает различные выражения в попытках минимизировать функцию потерь. Для &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; переменных можно составить &amp;lt;tex&amp;gt;2^{2^k}&amp;lt;/tex&amp;gt; различных выражений. Нужно найти более эффективный метод для поиска наилучшего выражения, чем простой перебор всех вариантов. &lt;br /&gt;
&lt;br /&gt;
Любое логическое выражение можно представить в виде дерева, где в узлах расположены операции, а листья представляют собой переменные. Будем называть такие деревья '''логическими деревьями''' (англ. ''logic trees''). Будем называть '''соседями''' (англ. ''neighbours'') логического дерева такие деревья, которые могут быть получены из него за один шаг. Допустимые шаги проиллюстрированы на рисунке 3.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим самый простой алгоритм поиска наилучшего дерева {{---}} '''жадный поиск''' (англ. ''greedy search'').&lt;br /&gt;
# В качестве стартового дерева выберем одну переменную, которая дает минимальное значение функции потерь среди всех остальных переменных. &lt;br /&gt;
# Перебираем соседей текущего дерева и выбираем такое, что оно уменьшает значение функции потерь по сравнению с текущим, а также дает наименьший результат среди остальных соседей.&lt;br /&gt;
# Если такого дерева не существует, алгоритм завершается. Если оно все же есть, выбираем его в качестве текущего и повторяем второй шаг.&lt;br /&gt;
&lt;br /&gt;
Этот алгоритм склонен к переобучению, а также в некоторых ситуациях может остановиться преждевременно, так и не дойдя до наилучшего дерева. Существует также алгоритм под названием '''имитация отжига''' (англ. ''simulated annealing'') который показывает лучшие результаты, чем описанный жадный поиск.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70177</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70177"/>
				<updated>2019-03-03T17:46:39Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Логическая регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления [[Определение булевой функции|булевой функции]] от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.&amp;lt;br/&amp;gt;Элементы, появившиеся в результате применения операции, выделены черным фоном.]]&lt;br /&gt;
&lt;br /&gt;
Может показаться не совсем понятным, как же применить регрессию к булевым выражениям. Рассмотрим в общих чертах алгоритм логической регрессии. &lt;br /&gt;
Логическая регрессия, как и другие методы регрессии, перебирает различные выражения в попытках минимизировать функцию потерь. Для &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; переменных можно составить &amp;lt;tex&amp;gt;2^{2^k}&amp;lt;/tex&amp;gt; различных выражений. Нужно найти более эффективный метод для поиска наилучшего выражения, чем простой перебор всех вариантов. &lt;br /&gt;
&lt;br /&gt;
Любое логическое выражение можно представить в виде дерева, где в узлах расположены операции, а листья представляют собой переменные. Будем называть такие деревья '''логическими деревьями''' (англ. ''logic trees''). Будем называть '''соседями''' (англ. ''neighbours'') логического дерева такие деревья, которые могут быть получены из него за один шаг. Допустимые шаги проиллюстрированы на рисунке 3.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим самый простой алгоритм поиска наилучшего дерева {{---}} '''жадный поиск''' (англ. ''greedy search'').&lt;br /&gt;
# В качестве стартового дерева выберем одну переменную, которая дает минимальное значение функции потерь среди всех остальных переменных. &lt;br /&gt;
# Перебираем соседей текущего дерева и выбираем такое, что оно уменьшает значение функции потерь по сравнению с текущим, а также дает наименьший результат среди остальных соседей.&lt;br /&gt;
# Если такого дерева не существует, алгоритм завершается. Если оно все же есть, выбираем его в качестве текущего и повторяем второй шаг.&lt;br /&gt;
&lt;br /&gt;
Этот алгоритм склонен к переобучению, а также в некоторых ситуациях может остановиться преждевременно, так и не дойдя до наилучшего дерева. Существует также алгоритм под названием '''имитация отжига''' (''simulated annealing'') который показывает лучшие результаты, чем описанный жадный поиск.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70176</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70176"/>
				<updated>2019-03-03T16:44:39Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70175</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70175"/>
				<updated>2019-03-03T16:43:58Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Лассо-регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70174</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70174"/>
				<updated>2019-03-03T16:43:04Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Описание */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70173</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70173"/>
				<updated>2019-03-03T16:42:40Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Мотивация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно.&lt;br /&gt;
&lt;br /&gt;
==Описание==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70041</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=70041"/>
				<updated>2019-03-01T09:43:24Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Логическая регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
==Мотивация==&lt;br /&gt;
Обычно в методах регрессии не учитывается связь между переменными. Предполагается, что влияние каждой переменной на результат не зависит от значений других переменных. Однако это предположение зачастую неверно. &lt;br /&gt;
&lt;br /&gt;
==Описание==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Алгоритм==&lt;br /&gt;
&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=70040</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=70040"/>
				<updated>2019-03-01T08:54:11Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ {{---}} конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ {{---}} сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
*выборка прецедентов $\mathrm{X}^l=\{\left(x_1, y_1\right), ... ,\left(x_l, y_l\right)\}$  получена согласно вероятностному распределению с плотностью &lt;br /&gt;
&amp;lt;tex&amp;gt;p\left(x, y\right)=\mathrm{P}_yp_y\left(x\right)=\mathrm{P}\left(y|x\right)p\left(x\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
где $\mathrm{P}_y$ {{---}} ''априорные вероятности'',&lt;br /&gt;
$p_y(x)$ $-$ ''функции правдоподобия'', принадлежащие экспонентному семейству плотностей (т.е. $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ $-$ произвольные функции);&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$;&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$;&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором;&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Напомним, что оптимальный байесовский классификатор для двух классов выглядит следущим образом:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a\left(x\right)=&lt;br /&gt;
\mathrm{sign}\left(\lambda_+\mathrm{P}\left(+1|x\right)-\lambda_-\mathrm{P}\left(-1|x\right)\right)=&lt;br /&gt;
\mathrm{sign}\left(\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)}-\frac{\lambda_-}{\lambda_+}\right)&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
и распишем функции правдоподобия, используя экспонентную формулу с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим получившуюся под экспонентой сумму: &lt;br /&gt;
*$\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle = \langle w, x\rangle$. Вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов(весов) при константных признаках;&lt;br /&gt;
*$b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-} = \mathrm{const}\left(x\right)$. Можно считать данные слагаемые аддитивной добавкой к коэффициенту при признаке. Но так как свободные коэффициенты настраиваются по обучающей выборке, вычислять эту добавку не имеет смысла и ее можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \mathrm{e}^{\langle w, x\rangle}&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно, разделяющая поверхность линейна и первый пункт теоремы доказан.&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] получаем следующее равенство&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = \sigma\left(+\langle w ,x\rangle\right) + \sigma\left(-\langle w ,x\rangle\right) = 1&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда следует:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right), y = \{-1, +1\}&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt;&lt;br /&gt;
Таким образом, второй пункт теоремы доказан.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== scikit-learn ====&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации;&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки:&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества:&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение:&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание:&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
==== [[Примеры кода на Scala#Логистическая регрессия|Пример кода на Scala]] ====&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Линейная регрессия]]&amp;lt;sup&amp;gt;[на 28.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Логистическая регрессия]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Logistic_regression Wikipedia {{---}} Logistic regression]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html scikit-learn.org {{---}} документация по sklearn.linear_model.LogisticRegression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69977</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69977"/>
				<updated>2019-02-27T18:21:26Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
[[Файл: Logic_tree_moves.jpg|400px|thumb|Рис.3. Допустимые действия в процессе роста дерева.]]&lt;br /&gt;
&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Logic_tree_moves.jpg&amp;diff=69976</id>
		<title>Файл:Logic tree moves.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Logic_tree_moves.jpg&amp;diff=69976"/>
				<updated>2019-02-27T18:18:09Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9&amp;diff=69970</id>
		<title>Метрический классификатор и метод ближайших соседей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9&amp;diff=69970"/>
				<updated>2019-02-25T18:10:48Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Метрический классификатор''' (англ. similarity-based classifier) {{---}} алгоритм классификации, основанный на вычислении оценок сходства между объектами.&lt;br /&gt;
&lt;br /&gt;
Для формализации понятия сходства вводится функция расстояния между объектами &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. Как правило, не требуется, чтобы были выполнены все три аксиомы метрики {{---}} неравенство треугольника может нарушаться.&lt;br /&gt;
&lt;br /&gt;
'''Метод ближайших соседей''' {{---}} простейший метрический классификатор, основанный на оценивании сходства объектов. Классифицируемый объект относится к тому классу, которому принадлежат ближайшие к нему объекты обучающей выборки.&lt;br /&gt;
&lt;br /&gt;
'''Метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей''' (англ. kNN {{---}} &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; Nearest Neighbours) {{---}} Для повышения надёжности классификации объект относится к тому классу, которому принадлежит большинство из его соседей {{---}} &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших к нему объектов обучающей выборки &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;. В задачах с двумя классами число соседей берут нечётным, чтобы не возникало ситуаций неоднозначности, когда одинаковое число соседей принадлежат разным классам.&lt;br /&gt;
&lt;br /&gt;
'''Метод взвешенных ближайших соседей''' {{---}} в задачах с числом классов 3 и более нечётность уже не помогает и ситуации неоднозначности всё равно могут возникать. Тогда &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-му соседу приписывается вес &amp;lt;tex&amp;gt;w_i&amp;lt;/tex&amp;gt;, как правило, убывающий с ростом ранга соседа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;. Объект относится к тому классу, который набирает больший суммарный вес среди &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей.&lt;br /&gt;
&lt;br /&gt;
== Описание алгоритма ==&lt;br /&gt;
Пусть задана обучающая выборка пар &amp;quot;объект-ответ&amp;quot; &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть на множестве объектов задана функция расстояния &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. Эта функция должна быть достаточно адекватной моделью сходства объектов. Чем больше значение этой функции, тем менее схожими являются два объекта &amp;lt;tex&amp;gt;x, x'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для произвольного объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; расположим объекты обучающей выборки &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; в порядке возрастания расстояний до &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\rho(u,x_{1; u}) \leq  \rho(u,x_{2; u}) \leq \cdots \leq \rho(u,x_{m; u})&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где через &amp;lt;tex&amp;gt;x_{i; u}&amp;lt;/tex&amp;gt; обозначается тот объект обучающей выборки, который является &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м соседом объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Аналогичное обозначение введём и для ответа на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м соседе: &amp;lt;tex&amp;gt;y_{i; u}&amp;lt;/tex&amp;gt;. Таким образом, произвольный объект &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; порождает свою перенумерацию выборки. В наиболее общем виде алгоритм ближайших соседей есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;a(u) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] w(i,u)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;w(i,u)&amp;lt;/tex&amp;gt; {{---}} заданная весовая функция, которая оценивает степень важности &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-го соседа для классификации объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Естественно полагать, что эта функция не отрицательна и не возрастает по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; (поскольку чем дальше объект, тем меньший вклад он должен вносить в пользу своего класса).&lt;br /&gt;
&lt;br /&gt;
По-разному задавая весовую функцию, можно получать различные варианты метода ближайших соседей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i=1]&amp;lt;/tex&amp;gt; {{---}} простейший метод ближайшего соседа;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i\leq k]&amp;lt;/tex&amp;gt; {{---}} метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i\leq k] q^i&amp;lt;/tex&amp;gt; {{---}} метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; экспоненциально взвешенных ближайших соседей, где предполагается константа &amp;lt;tex&amp;gt;q &amp;lt; 1&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SimpleKnnExample.png|frame|none|super|upright=1|Пример классификации, методом 5 ближайших соседей]]&lt;br /&gt;
&lt;br /&gt;
== Использование ядер сглаживания ==&lt;br /&gt;
При использовании линейной функции в качестве &amp;lt;tex&amp;gt;w(i, u)&amp;lt;/tex&amp;gt; возможно совпадение суммарного веса для нескольких классов. Это приводит к неоднозначности ответа при классификации. Чтобы такого не происходило, используют функцию [[Ядра]]&amp;lt;sup&amp;gt;[на 28.01.18 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем обозначать функцию ядра &amp;lt;tex&amp;gt;K(r)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ядер ===&lt;br /&gt;
&lt;br /&gt;
Triangular: &amp;lt;tex&amp;gt;{\displaystyle K(r)=(1-|r|)}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Parabolic: &amp;lt;tex&amp;gt;{\displaystyle K(r)={\frac {3}{4}}(1-r^{2})}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Tricube: &amp;lt;tex&amp;gt;{\displaystyle K(r)={\frac {70}{81}}(1-{\left|r\right|}^{3})^{3}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Метод парзеновского окна ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей можно обобщить с помощью функции ядра. Рассмотрим два способа, которыми это можно сделать.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)&amp;lt;/tex&amp;gt; {{---}} метод парзеновского окна фиксированной ширины &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)&amp;lt;/tex&amp;gt; {{---}} метод парзеновского окна переменной ширины;&lt;br /&gt;
&lt;br /&gt;
Сравним два этих метода. Сперва запишем классификаторы, полученные при использовании этих методов, в явном виде:&lt;br /&gt;
&lt;br /&gt;
Фиксированной ширины: &amp;lt;tex&amp;gt;a_h = a(u, X^m, \boldsymbol{h}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Переменной ширины: &amp;lt;tex&amp;gt;a_k = a(u, X^m, \boldsymbol{k}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_h&amp;lt;/tex&amp;gt; не будет учитывать соседей на расстояние больше чем &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, а всех остальных учтет в соответствии с функций ядра &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt; является аналогом метода &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей (т.к. для всех &amp;lt;tex&amp;gt;k+i&amp;lt;/tex&amp;gt;-ых соседей функция &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; вернет 0), но при этом чем ближе &amp;lt;tex&amp;gt;k-i&amp;lt;/tex&amp;gt;-ый сосед, тем больший вклад в сторону своего класса он даст.&lt;br /&gt;
&lt;br /&gt;
Часто используют окно переменной ширины т.е. классификатор &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;, по следующим причинам:&lt;br /&gt;
&lt;br /&gt;
# Удобнее оптимизировать целочисленный параметр &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, чем вещественный параметр &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; по некоторой сетке;&lt;br /&gt;
&lt;br /&gt;
# Существует большое количество задач, где точки разбросаны неравномерно. В них могут существовать области, где достаточно брать небольшую &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; и области, где в окно ширины &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; попадает только одна точка. Тогда для классификатора &amp;lt;tex&amp;gt;a_h&amp;lt;/tex&amp;gt; будут существовать области в которых не будет ни одного объекта (кроме того, который нужно классифицировать). Для таких областей не понятно как классифицировать объекты. &lt;br /&gt;
&lt;br /&gt;
[[Файл:KnnExample.png|frame|none|super|upright=1|Пример классификации, методом с постоянной шириной окна, и неравномерным разбросом точек]]&lt;br /&gt;
&lt;br /&gt;
== Использование различных метрик расстояния ==&lt;br /&gt;
Очень редко известна хорошая функция расстояния &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. В качестве нее обычно использую следующие функции:&lt;br /&gt;
&lt;br /&gt;
=== Примеры метрик ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} объекты, а &amp;lt;tex&amp;gt;(x_1, x_2,..., x_n)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(y_1, y_2,..., y_n)&amp;lt;/tex&amp;gt; их признаковые описания.&lt;br /&gt;
&lt;br /&gt;
Евклидова метрика: &amp;lt;tex&amp;gt;\rho(x,y) = \sqrt {\sum _{i=1}^{n}(x_{i}-y_{i})^{2}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Расстояние Чебышёва: &amp;lt;tex&amp;gt;\rho(x,y)=\max _{i=1,\dots ,n}|x_{i}-y_{i}|&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Манхэттенское Расстояние: &amp;lt;tex&amp;gt;\rho(x,y)=\sum _{i=1}^{n}|x_{i}-y_{i}|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При их использовании важно нормировать значения признаков, иначе один признак с максимальным значением может стать преобладающим, а признаки с маленькими значениями не будут учитываться при классификации. Чтобы отсеять лишние признаки (т.е. не влияющие на класс объекта) можно использовать [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 feature selection].&lt;br /&gt;
&lt;br /&gt;
== Пример использования (через scikit-learn) ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим использование алгоритма &amp;lt;tex&amp;gt;kNN&amp;lt;/tex&amp;gt; на примере [https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29 реального набора данных].&lt;br /&gt;
Предположим, что мы загрузили &amp;lt;tex&amp;gt;wdbc.data&amp;lt;/tex&amp;gt; и сохранили как &amp;lt;tex&amp;gt;tr.csv&amp;lt;/tex&amp;gt; с заголовком {{---}} описанием признаков.&lt;br /&gt;
&lt;br /&gt;
* Загружаем данные&lt;br /&gt;
&lt;br /&gt;
  '''import''' pandas '''as''' pd    &lt;br /&gt;
  '''from''' sklearn.preprocessing '''import''' StandardScaler    &lt;br /&gt;
&lt;br /&gt;
  '''def''' load_data(data_path):&lt;br /&gt;
      ds = pd.read_csv(data_path, names=[&amp;quot;id&amp;quot;, &amp;quot;diagnosis&amp;quot;, &amp;quot;radius_mean&amp;quot;, &amp;quot;texture_mean&amp;quot;, &amp;quot;perimeter_mean&amp;quot;, &amp;quot;area_mean&amp;quot;,&lt;br /&gt;
                                       &amp;quot;smoothness_mean&amp;quot;, &amp;quot;compactness_mean&amp;quot;, &amp;quot;concavity_mean&amp;quot;, &amp;quot;concave points_mean&amp;quot;,&lt;br /&gt;
                                       &amp;quot;symmetry_mean&amp;quot;, &amp;quot;fractal_dimension_mean&amp;quot;, &amp;quot;radius_se&amp;quot;, &amp;quot;texture_se&amp;quot;,&lt;br /&gt;
                                       &amp;quot;perimeter_se&amp;quot;, &amp;quot;area_se&amp;quot;, &amp;quot;smoothness_se&amp;quot;, &amp;quot;compactness_se&amp;quot;, &amp;quot;concavity_se&amp;quot;,&lt;br /&gt;
                                       &amp;quot;concave points_se&amp;quot;, &amp;quot;symmetry_se&amp;quot;, &amp;quot;fractal_dimension_se&amp;quot;, &amp;quot;radius_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;texture_worst&amp;quot;, &amp;quot;perimeter_worst&amp;quot;, &amp;quot;area_worst&amp;quot;, &amp;quot;smoothness_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;compactness_worst&amp;quot;, &amp;quot;concavity_worst&amp;quot;, &amp;quot;concave points_worst&amp;quot;, &amp;quot;symmetry_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;fractal_dimension_worst&amp;quot;])&lt;br /&gt;
      y = ds['diagnosis']&lt;br /&gt;
      X = ds.drop('diagnosis', axis=1)&lt;br /&gt;
      X = X.drop('id', axis=1)&lt;br /&gt;
      i = len(X.columns)&lt;br /&gt;
      X = X.drop(X.columns[i - 1], axis=1)&lt;br /&gt;
      y.replace(('M', 'B'), (1, 0), inplace=True)&lt;br /&gt;
      sc = StandardScaler()&lt;br /&gt;
      sc.fit(X)&lt;br /&gt;
      X_ans = sc.transform(X)&lt;br /&gt;
      return X_ans, y&lt;br /&gt;
&lt;br /&gt;
  X, y = load_data(&amp;quot;tr.csv&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Теперь &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} нормированные значения признаков и соответствующие им классы.&lt;br /&gt;
&lt;br /&gt;
* Делим данные на тренировочное и тестовое множество:&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)&lt;br /&gt;
&lt;br /&gt;
* Создаем классификатор:&lt;br /&gt;
 '''from''' sklearn.neighbors '''import''' KNeighborsClassifier&lt;br /&gt;
&lt;br /&gt;
 best_model = KNeighborsClassifier(&lt;br /&gt;
    '''n_neighbors'''=10, &lt;br /&gt;
    '''weights'''=’distance’,&lt;br /&gt;
    '''algorithm'''=’auto’,&lt;br /&gt;
    '''leaf_size'''=30,&lt;br /&gt;
    '''metric'''=’euclidean’,&lt;br /&gt;
    '''metric_params'''=None,&lt;br /&gt;
    '''n_jobs'''=4&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
* Обучаемся:&lt;br /&gt;
&lt;br /&gt;
 best_model.fit(X_train, y_train)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* Используем скользящий контроль для поиска лучших параметров (англ. cross validation):&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' GridSearchCV&lt;br /&gt;
&lt;br /&gt;
 model_params = best_model.get_params()&lt;br /&gt;
 tuned_params = {}&lt;br /&gt;
 for k, v in model_params.items():&lt;br /&gt;
     tuned_params[k] = [v]&lt;br /&gt;
 tuned_params['n_neighbors'] = range(1, 30)&lt;br /&gt;
 clf = GridSearchCV(KNeighborsClassifier(), tuned_params, cv=10, n_jobs=-1)&lt;br /&gt;
 clf.fit(X_train, y_train)&lt;br /&gt;
 best_params = clf.best_params_&lt;br /&gt;
&lt;br /&gt;
* Оценка классификатора:&lt;br /&gt;
 '''from''' sklearn '''import''' metrics&lt;br /&gt;
&lt;br /&gt;
 best_model = KNeighborsClassifier(**best_params)&lt;br /&gt;
 best_model.fit(X_train, y_train)&lt;br /&gt;
 predicted = best_model.predict(X_test)&lt;br /&gt;
&lt;br /&gt;
* Выводим результат:&lt;br /&gt;
 print('Used params:', best_params)&lt;br /&gt;
 print('Evaluation:\n', metrics.classification_report(y_test, predicted))&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; '''Used params''': {'metric_params': None, 'metric': 'euclidean', 'weights': 'distance', 'n_neighbors': 9, 'leaf_size': 30, 'n_jobs': 4, 'p': 2, 'algorithm': 'auto'}&lt;br /&gt;
   '''Evaluation:'''&lt;br /&gt;
                   precision    recall  f1-score   support&lt;br /&gt;
               0       0.90      1.00      0.95        69&lt;br /&gt;
               1       1.00      0.82      0.90        45&lt;br /&gt;
       micro avg       0.93      0.93      0.93       114&lt;br /&gt;
       macro avg       0.95      0.91      0.92       114&lt;br /&gt;
    weighted avg       0.94      0.93      0.93       114&lt;br /&gt;
&lt;br /&gt;
==Пример на языке Scala==&lt;br /&gt;
SBT зависимость:&lt;br /&gt;
  libraryDependencies '''+=''' &amp;quot;com.github.haifengl&amp;quot; '''%%''' &amp;quot;smile-scala&amp;quot; '''%''' &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
Пример классификации датасета и вычисления F1 меры&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/F1_score F1 мера]&amp;lt;/ref&amp;gt; используя smile.classification.knn&amp;lt;ref&amp;gt;[https://haifengl.github.io/smile/classification.html#knn Smile, KNN]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  '''import '''smile.classification._&lt;br /&gt;
  '''import '''smile.data._&lt;br /&gt;
  '''import '''smile.plot._&lt;br /&gt;
  '''import '''smile.read&lt;br /&gt;
  '''import '''smile.validation.FMeasure&lt;br /&gt;
&lt;br /&gt;
  '''val '''toy: AttributeDataset = read.table(&amp;quot;iris.csv&amp;quot;, delimiter = &amp;quot;,&amp;quot;, response = Some(('''new '''NumericAttribute(&amp;quot;class&amp;quot;), 2)))&lt;br /&gt;
  '''val '''x: Array[Array['''Double''']] = toy.x()&lt;br /&gt;
  '''val '''y: Array['''Int'''] = toy.y().map(_.toInt)&lt;br /&gt;
  '''val '''KNN: KNN[Array['''Double''']] = knn(x, y, 3)&lt;br /&gt;
  '''val '''predictions: Array['''Int'''] = x.map(KNN.predict)&lt;br /&gt;
  '''val '''f1Score = '''new '''FMeasure().measure(predictions, y)&lt;br /&gt;
  plot(x, y, KNN)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80 machinelearning.ru {{---}} Метрический классификатор]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=KNN machinelearning.ru {{---}} Метод ближайших соседей (kNN)]&lt;br /&gt;
* [https://www.youtube.com/watch?v=l1xGQMowWA4&amp;amp;t=0s&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=3 Лекция &amp;quot;Метрические методы классификации&amp;quot; К.В. Воронцов, курс &amp;quot;Машинное обучение&amp;quot; 2014]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Kernel_(statistics) Wikipedia {{---}} Kernel (statistics)]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html Документация по scikit-learn]&lt;br /&gt;
* [https://www.kaggle.com/jeffbrown/knn-classifier/data Пример по работе с датасетом с kaggle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Метрический классификатор]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9&amp;diff=69969</id>
		<title>Метрический классификатор и метод ближайших соседей</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80_%D0%B8_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%B1%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D1%85_%D1%81%D0%BE%D1%81%D0%B5%D0%B4%D0%B5%D0%B9&amp;diff=69969"/>
				<updated>2019-02-25T18:08:38Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Метрический классификатор''' (англ. similarity-based classifier) {{---}} алгоритм классификации, основанный на вычислении оценок сходства между объектами.&lt;br /&gt;
&lt;br /&gt;
Для формализации понятия сходства вводится функция расстояния между объектами &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. Как правило, не требуется, чтобы были выполнены все три аксиомы метрики {{---}} неравенство треугольника может нарушаться.&lt;br /&gt;
&lt;br /&gt;
'''Метод ближайших соседей''' {{---}} простейший метрический классификатор, основанный на оценивании сходства объектов. Классифицируемый объект относится к тому классу, которому принадлежат ближайшие к нему объекты обучающей выборки.&lt;br /&gt;
&lt;br /&gt;
'''Метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей''' (англ. kNN {{---}} &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; Nearest Neighbours) {{---}} Для повышения надёжности классификации объект относится к тому классу, которому принадлежит большинство из его соседей {{---}} &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших к нему объектов обучающей выборки &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt;. В задачах с двумя классами число соседей берут нечётным, чтобы не возникало ситуаций неоднозначности, когда одинаковое число соседей принадлежат разным классам.&lt;br /&gt;
&lt;br /&gt;
'''Метод взвешенных ближайших соседей''' {{---}} в задачах с числом классов 3 и более нечётность уже не помогает и ситуации неоднозначности всё равно могут возникать. Тогда &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-му соседу приписывается вес &amp;lt;tex&amp;gt;w_i&amp;lt;/tex&amp;gt;, как правило, убывающий с ростом ранга соседа &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;. Объект относится к тому классу, который набирает больший суммарный вес среди &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей.&lt;br /&gt;
&lt;br /&gt;
== Описание алгоритма ==&lt;br /&gt;
Пусть задана обучающая выборка пар &amp;quot;объект-ответ&amp;quot; &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть на множестве объектов задана функция расстояния &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. Эта функция должна быть достаточно адекватной моделью сходства объектов. Чем больше значение этой функции, тем менее схожими являются два объекта &amp;lt;tex&amp;gt;x, x'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для произвольного объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; расположим объекты обучающей выборки &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; в порядке возрастания расстояний до &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\rho(u,x_{1; u}) \leq  \rho(u,x_{2; u}) \leq \cdots \leq \rho(u,x_{m; u})&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где через &amp;lt;tex&amp;gt;x_{i; u}&amp;lt;/tex&amp;gt; обозначается тот объект обучающей выборки, который является &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м соседом объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Аналогичное обозначение введём и для ответа на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-м соседе: &amp;lt;tex&amp;gt;y_{i; u}&amp;lt;/tex&amp;gt;. Таким образом, произвольный объект &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; порождает свою перенумерацию выборки. В наиболее общем виде алгоритм ближайших соседей есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;a(u) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] w(i,u)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex&amp;gt;w(i,u)&amp;lt;/tex&amp;gt; {{---}} заданная весовая функция, которая оценивает степень важности &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-го соседа для классификации объекта &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Естественно полагать, что эта функция не отрицательна и не возрастает по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; (поскольку чем дальше объект, тем меньший вклад он должен вносить в пользу своего класса).&lt;br /&gt;
&lt;br /&gt;
По-разному задавая весовую функцию, можно получать различные варианты метода ближайших соседей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i=1]&amp;lt;/tex&amp;gt; {{---}} простейший метод ближайшего соседа;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i\leq k]&amp;lt;/tex&amp;gt; {{---}} метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = [i\leq k] q^i&amp;lt;/tex&amp;gt; {{---}} метод &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; экспоненциально взвешенных ближайших соседей, где предполагается константа &amp;lt;tex&amp;gt;q &amp;lt; 1&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
[[Файл:SimpleKnnExample.png|frame|none|super|upright=1|Пример классификации, методом 5 ближайших соседей]]&lt;br /&gt;
&lt;br /&gt;
== Использование ядер сглаживания ==&lt;br /&gt;
При использовании линейной функции в качестве &amp;lt;tex&amp;gt;w(i, u)&amp;lt;/tex&amp;gt; возможно совпадение суммарного веса для нескольких классов. Это приводит к неоднозначности ответа при классификации. Чтобы такого не происходило, используют функцию [[Ядра]]&amp;lt;sup&amp;gt;[на 28.01.18 не создан]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем обозначать функцию ядра &amp;lt;tex&amp;gt;K(r)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ядер ===&lt;br /&gt;
&lt;br /&gt;
Triangular: &amp;lt;tex&amp;gt;{\displaystyle K(r)=(1-|r|)}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Parabolic: &amp;lt;tex&amp;gt;{\displaystyle K(r)={\frac {3}{4}}(1-r^{2})}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Tricube: &amp;lt;tex&amp;gt;{\displaystyle K(r)={\frac {70}{81}}(1-{\left|r\right|}^{3})^{3}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Метод парзеновского окна ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей можно обобщить с помощью функции ядра. Рассмотрим два способа, которыми это можно сделать.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)&amp;lt;/tex&amp;gt; {{---}} метод парзеновского окна фиксированной ширины &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;w(i,u) = K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)&amp;lt;/tex&amp;gt; {{---}} метод парзеновского окна переменной ширины;&lt;br /&gt;
&lt;br /&gt;
Сравним два этих метода. Сперва запишем классификаторы, полученные при использовании этих методов, в явном виде:&lt;br /&gt;
&lt;br /&gt;
Фиксированной ширины: &amp;lt;tex&amp;gt;a_h = a(u, X^m, \boldsymbol{h}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{h}\biggr)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Переменной ширины: &amp;lt;tex&amp;gt;a_k = a(u, X^m, \boldsymbol{k}, K) = \mathrm{arg}\max_{y\in Y} \sum_{i=1}^m \bigl[ y_{i; u}=y \bigr] K\biggl(\frac{\rho(u,x_{i; u})}{\rho(u,x_{k+1; u})}\biggr)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a_h&amp;lt;/tex&amp;gt; не будет учитывать соседей на расстояние больше чем &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt;, а всех остальных учтет в соответствии с функций ядра &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt; является аналогом метода &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; ближайших соседей (т.к. для всех &amp;lt;tex&amp;gt;k+i&amp;lt;/tex&amp;gt;-ых соседей функция &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt; вернет 0), но при этом чем ближе &amp;lt;tex&amp;gt;k-i&amp;lt;/tex&amp;gt;-ый сосед, тем больший вклад в сторону своего класса он даст.&lt;br /&gt;
&lt;br /&gt;
Часто используют окно переменной ширины т.е. классификатор &amp;lt;tex&amp;gt;a_k&amp;lt;/tex&amp;gt;, по следующим причинам:&lt;br /&gt;
&lt;br /&gt;
# Удобнее оптимизировать целочисленный параметр &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, чем вещественный параметр &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; по некоторой сетке;&lt;br /&gt;
&lt;br /&gt;
# Существует большое количество задач, где точки разбросаны неравномерно. В них могут существовать области, где достаточно брать небольшую &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; и области, где в окно ширины &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; попадает только одна точка. Тогда для классификатора &amp;lt;tex&amp;gt;a_h&amp;lt;/tex&amp;gt; будут существовать области в которых не будет ни одного объекта (кроме того, который нужно классифицировать). Для таких областей не понятно как классифицировать объекты. &lt;br /&gt;
&lt;br /&gt;
[[Файл:KnnExample.png|frame|none|super|upright=1|Пример классификации, методом с постоянной шириной окна, и неравномерным разбросом точек]]&lt;br /&gt;
&lt;br /&gt;
== Использование различных метрик расстояния ==&lt;br /&gt;
Очень редко известна хорошая функция расстояния &amp;lt;tex&amp;gt;\rho(x,x')&amp;lt;/tex&amp;gt;. В качестве нее обычно использую следующие функции:&lt;br /&gt;
&lt;br /&gt;
=== Примеры метрик ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} объекты, а &amp;lt;tex&amp;gt;(x_1, x_2,..., x_n)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;(y_1, y_2,..., y_n)&amp;lt;/tex&amp;gt; их признаковые описания.&lt;br /&gt;
&lt;br /&gt;
Евклидова метрика: &amp;lt;tex&amp;gt;\rho(x,y) = \sqrt {\sum _{i=1}^{n}(x_{i}-y_{i})^{2}}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Расстояние Чебышёва: &amp;lt;tex&amp;gt;\rho(x,y)=\max _{i=1,\dots ,n}|x_{i}-y_{i}|&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
Манхэттенское Расстояние: &amp;lt;tex&amp;gt;\rho(x,y)=\sum _{i=1}^{n}|x_{i}-y_{i}|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При их использовании важно нормировать значения признаков, иначе один признак с максимальным значением может стать преобладающим, а признаки с маленькими значениями не будут учитываться при классификации. Чтобы отсеять лишние признаки (т.е. не влияющие на класс объекта) можно использовать [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8 feature selection].&lt;br /&gt;
&lt;br /&gt;
== Пример использования (через scikit-learn) ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим использование алгоритма &amp;lt;tex&amp;gt;kNN&amp;lt;/tex&amp;gt; на примере [https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29 реального набора данных].&lt;br /&gt;
Предположим, что мы загрузили &amp;lt;tex&amp;gt;wdbc.data&amp;lt;/tex&amp;gt; и сохранили как &amp;lt;tex&amp;gt;tr.csv&amp;lt;/tex&amp;gt; с заголовком {{---}} описанием признаков.&lt;br /&gt;
&lt;br /&gt;
* Загружаем данные&lt;br /&gt;
&lt;br /&gt;
  '''import''' pandas '''as''' pd    &lt;br /&gt;
  '''from''' sklearn.preprocessing '''import''' StandardScaler    &lt;br /&gt;
&lt;br /&gt;
  '''def''' load_data(data_path):&lt;br /&gt;
      ds = pd.read_csv(data_path, names=[&amp;quot;id&amp;quot;, &amp;quot;diagnosis&amp;quot;, &amp;quot;radius_mean&amp;quot;, &amp;quot;texture_mean&amp;quot;, &amp;quot;perimeter_mean&amp;quot;, &amp;quot;area_mean&amp;quot;,&lt;br /&gt;
                                       &amp;quot;smoothness_mean&amp;quot;, &amp;quot;compactness_mean&amp;quot;, &amp;quot;concavity_mean&amp;quot;, &amp;quot;concave points_mean&amp;quot;,&lt;br /&gt;
                                       &amp;quot;symmetry_mean&amp;quot;, &amp;quot;fractal_dimension_mean&amp;quot;, &amp;quot;radius_se&amp;quot;, &amp;quot;texture_se&amp;quot;,&lt;br /&gt;
                                       &amp;quot;perimeter_se&amp;quot;, &amp;quot;area_se&amp;quot;, &amp;quot;smoothness_se&amp;quot;, &amp;quot;compactness_se&amp;quot;, &amp;quot;concavity_se&amp;quot;,&lt;br /&gt;
                                       &amp;quot;concave points_se&amp;quot;, &amp;quot;symmetry_se&amp;quot;, &amp;quot;fractal_dimension_se&amp;quot;, &amp;quot;radius_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;texture_worst&amp;quot;, &amp;quot;perimeter_worst&amp;quot;, &amp;quot;area_worst&amp;quot;, &amp;quot;smoothness_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;compactness_worst&amp;quot;, &amp;quot;concavity_worst&amp;quot;, &amp;quot;concave points_worst&amp;quot;, &amp;quot;symmetry_worst&amp;quot;,&lt;br /&gt;
                                       &amp;quot;fractal_dimension_worst&amp;quot;])&lt;br /&gt;
      y = ds['diagnosis']&lt;br /&gt;
      X = ds.drop('diagnosis', axis=1)&lt;br /&gt;
      X = X.drop('id', axis=1)&lt;br /&gt;
      i = len(X.columns)&lt;br /&gt;
      X = X.drop(X.columns[i - 1], axis=1)&lt;br /&gt;
      y.replace(('M', 'B'), (1, 0), inplace=True)&lt;br /&gt;
      sc = StandardScaler()&lt;br /&gt;
      sc.fit(X)&lt;br /&gt;
      X_ans = sc.transform(X)&lt;br /&gt;
      return X_ans, y&lt;br /&gt;
&lt;br /&gt;
  X, y = load_data(&amp;quot;tr.csv&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Теперь &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} нормированные значения признаков и соответствующие им классы.&lt;br /&gt;
&lt;br /&gt;
* Делим данные на тренировочное и тестовое множество:&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)&lt;br /&gt;
&lt;br /&gt;
* Создаем классификатор:&lt;br /&gt;
 '''from''' sklearn.neighbors '''import''' KNeighborsClassifier&lt;br /&gt;
&lt;br /&gt;
 best_model = KNeighborsClassifier(&lt;br /&gt;
    '''n_neighbors'''=10, &lt;br /&gt;
    '''weights'''=’distance’,&lt;br /&gt;
    '''algorithm'''=’auto’,&lt;br /&gt;
    '''leaf_size'''=30,&lt;br /&gt;
    '''metric'''=’euclidean’,&lt;br /&gt;
    '''metric_params'''=None,&lt;br /&gt;
    '''n_jobs'''=4&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
* Обучаемся:&lt;br /&gt;
&lt;br /&gt;
 best_model.fit(X_train, y_train)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* Используем скользящий контроль для поиска лучших параметров (англ. cross validation):&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' GridSearchCV&lt;br /&gt;
&lt;br /&gt;
 model_params = best_model.get_params()&lt;br /&gt;
 tuned_params = {}&lt;br /&gt;
 for k, v in model_params.items():&lt;br /&gt;
     tuned_params[k] = [v]&lt;br /&gt;
 tuned_params['n_neighbors'] = range(1, 30)&lt;br /&gt;
 clf = GridSearchCV(KNeighborsClassifier(), tuned_params, cv=10, n_jobs=-1)&lt;br /&gt;
 clf.fit(X_train, y_train)&lt;br /&gt;
 best_params = clf.best_params_&lt;br /&gt;
&lt;br /&gt;
* Оценка классификатора:&lt;br /&gt;
 '''from''' sklearn '''import''' metrics&lt;br /&gt;
&lt;br /&gt;
 best_model = KNeighborsClassifier(**best_params)&lt;br /&gt;
 best_model.fit(X_train, y_train)&lt;br /&gt;
 predicted = best_model.predict(X_test)&lt;br /&gt;
&lt;br /&gt;
* Выводим результат:&lt;br /&gt;
 print('Used params:', best_params)&lt;br /&gt;
 print('Evaluation:\n', metrics.classification_report(y_test, predicted))&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; '''Used params''': {'metric_params': None, 'metric': 'euclidean', 'weights': 'distance', 'n_neighbors': 9, 'leaf_size': 30, 'n_jobs': 4, 'p': 2, 'algorithm': 'auto'}&lt;br /&gt;
   '''Evaluation:'''&lt;br /&gt;
                   precision    recall  f1-score   support&lt;br /&gt;
               0       0.90      1.00      0.95        69&lt;br /&gt;
               1       1.00      0.82      0.90        45&lt;br /&gt;
       micro avg       0.93      0.93      0.93       114&lt;br /&gt;
       macro avg       0.95      0.91      0.92       114&lt;br /&gt;
    weighted avg       0.94      0.93      0.93       114&lt;br /&gt;
&lt;br /&gt;
==Пример на языке Scala==&lt;br /&gt;
SBT зависимость:&lt;br /&gt;
  libraryDependencies '''+=''' &amp;quot;com.github.haifengl&amp;quot; '''%%''' &amp;quot;smile-scala&amp;quot; '''%''' &amp;quot;1.5.2&amp;quot;&lt;br /&gt;
Пример классификации датасета и вычисления F1 меры&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/F1_score F1 мера]&amp;lt;/ref&amp;gt; используя smile.classification.knn&amp;lt;ref&amp;gt;[https://haifengl.github.io/smile/classification.html#knn Smile, KNN]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
  '''import '''smile.classification._&lt;br /&gt;
  '''import '''smile.data._&lt;br /&gt;
  '''import '''smile.plot._&lt;br /&gt;
  '''import '''smile.read&lt;br /&gt;
  '''import '''smile.validation.FMeasure&lt;br /&gt;
&lt;br /&gt;
  '''val '''toy: AttributeDataset = read.table(&amp;quot;iris.csv&amp;quot;, delimiter = &amp;quot;,&amp;quot;, response = Some(('''new '''NumericAttribute(&amp;quot;class&amp;quot;), 2)))&lt;br /&gt;
  '''val '''x: Array[Array['''Double''']] = toy.x()&lt;br /&gt;
  '''val '''y: Array['''Int'''] = toy.y().map(_.toInt)&lt;br /&gt;
  '''val '''KNN: KNN[Array['''Double''']] = knn(x, y, 3)&lt;br /&gt;
  '''val '''predictions: Array['''Int'''] = x.map(KNN.predict)&lt;br /&gt;
  '''val '''f1Score = '''new '''FMeasure().measure(predictions, y)&lt;br /&gt;
  plot(x, y, KNN)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80 machinelearning.ru {{---}} Метрический классификатор]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=KNN machinelearning.ru {{---}} Метод ближайших соседей (kNN)]&lt;br /&gt;
* [https://www.youtube.com/watch?v=l1xGQMowWA4&amp;amp;t=0s&amp;amp;list=PLJOzdkh8T5kp99tGTEFjH_b9zqEQiiBtC&amp;amp;index=3 Лекция &amp;quot;Метрические методы классификации&amp;quot; К.В. Воронцов, курс «Машинное обучение» 2014]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Kernel_(statistics) Wikipedia {{---}} Kernel (statistics)]&lt;br /&gt;
* [https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html Документация по scikit-learn]&lt;br /&gt;
* [https://www.kaggle.com/jeffbrown/knn-classifier/data Пример по работе с датасетом с kaggle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Метрический классификатор]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69940</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69940"/>
				<updated>2019-02-24T16:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69937</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69937"/>
				<updated>2019-02-24T12:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Байесовская регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена предсказанная функция, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(x \beta, \sigma^2)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2)&amp;lt;/tex&amp;gt; {{---}} плотность распределения значения &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; из датасета, которая, как мы ранее предположили, соответствует нормальному распределению с центром в точке &amp;lt;tex&amp;gt;x \beta&amp;lt;/tex&amp;gt; (значение для &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, предсказанное алгоритмом).&lt;br /&gt;
&lt;br /&gt;
Будем также предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(x_i \beta, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку нас интересует только максимум, положим &amp;lt;tex&amp;gt;\sigma = 1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max p(y|x, \beta) = \arg\max \prod\limits_{i=1}^n N(x_i \beta, 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\arg\max \ln p(y|x, \beta) = \arg\max \ln \prod\limits_{i=1}^n N(x_i \beta, 1) \\&lt;br /&gt;
 = \arg\max \ln {\left( \frac{1}{(\sqrt{2 \pi})^n} \exp{\left(-\frac{1}{2} \sum\limits_{i-1}^n (y_i - x_i \beta)^2\right)}\right )} \\&lt;br /&gt;
 = \arg\max - \sum\limits_{i=1}^n (y_i - x_i \beta)^2 \\&lt;br /&gt;
 = \arg\min \sum\limits_{i=1}^n (y_i - x_i \beta)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, оказывается, что метод максимального правдоподобия с учетом шума в данных сводится к оценке по методу наименьших квадратов, которую мы уже видели в обынчой линейной регрессии.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B5%D0%B0%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia {{---}} Мультиколлинеарность]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69934</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69934"/>
				<updated>2019-02-24T11:28:22Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Байесовская регрессия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена функция, предсказанная алгоритмом регрессиии, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(y|\beta x, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ln p(y|x, \beta, \sigma^2) \\ = \ln \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2) \\ = \ln {\left( \frac{1}{(\sigma \sqrt{2 \pi})^n} \exp{(-\frac{1}{2 \sigma^2} \sum\limits_{i-1}^n (y_i - \beta x_i)^2)}\right )} \\ = -\frac{n}{2} \ln{2 \pi \sigma^2} - \frac{1}{2\sigma^2} \sum\limits_{i=1}^n (y_i - \beta x_i)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Из оценки максимального правдоподобия мы получили оценку по методу наименьших квадратов.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B5%D0%B0%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia {{---}} Мультиколлинеарность]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69933</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69933"/>
				<updated>2019-02-24T11:27:47Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Описание */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена функция, предсказанная алгоритмом регрессиии, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(y|\beta x, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ln p(y|x, \beta, \sigma^2) \\ = \ln \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2) \\ = \ln {\left( \frac{1}{(\sigma \sqrt{2 \pi})^n} \exp{(-\frac{1}{2 \sigma^2} \sum\limits_{i-1}^n (y_i - \beta x_i)^2)}\right )} \\ = -\frac{n}{2} \ln{2 \pi \sigma^2} - \frac{1}{2\sigma^2} \sum\limits_{i=1}^n (y_i - \beta x_i)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Из оценки максимального правдоподобия мы получили оценку по методу наименьших квадратов.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B5%D0%B0%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia {{---}} Мультиколлинеарность]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69932</id>
		<title>Вариации регрессии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8&amp;diff=69932"/>
				<updated>2019-02-24T11:27:07Z</updated>
		
		<summary type="html">&lt;p&gt;Penguinni: /* Описание */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Регрессия''' (англ. ''Regression'') {{---}} метод моделирования зависимости между зависимой переменной &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и одной или несколькими независимыми переменными &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_n&amp;lt;/tex&amp;gt;. В случае нескольких независимых переменных регрессия называется '''множественной''' (англ. ''multivariate regression''). Цель регрессионного анализа состоит в том, чтобы оценить значение непрерывной выходной переменной по значениям входных переменных.&lt;br /&gt;
&lt;br /&gt;
==Линейная регрессия==&lt;br /&gt;
{{main|Линейная регрессия}}&lt;br /&gt;
&lt;br /&gt;
'''Линейная регрессия''' (англ. ''linear regression'') {{---}} разновидность регрессии для моделирования линейной зависимости между зависимой и независимой переменными.&lt;br /&gt;
&lt;br /&gt;
==Логистическая регрессия==&lt;br /&gt;
{{main|Логистическая регрессия}}&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') {{---}} разновидность регрессии для прогнозирования вероятности некоторого события по значениям независимых переменных. Зависимая переменная &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в этом случае принимает значения &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (рассматриваемое событие не произошло или произошло соответственно).&lt;br /&gt;
&lt;br /&gt;
==Гребневая регрессия (ридж-регрессия)==&lt;br /&gt;
'''Гребневая регрессия или ридж-регрессия''' (англ. ''ridge regression'') {{---}} один из методов [[Уменьшение размерности|понижения размерности]]. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии. &lt;br /&gt;
&lt;br /&gt;
===Мотивация===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Мультиколлинеарность''' (англ. ''multicollinearity'') {{---}} наличие линейной зависимости между независимыми переменными регрессионной модели. Различают ''полную коллинеарность'' и ''частичную'' или просто ''мультиколлинеарность'' {{---}} наличие сильной корреляции между независимыми переменными.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим пример линейной модели: &amp;lt;tex&amp;gt;y = b_1 x_1 + b_2 x_2 + b_3 x_3 + \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть имеет место зависимость &amp;lt;tex&amp;gt;x_1 = x_2 + x_ 3&amp;lt;/tex&amp;gt;. Добавим к первому коэффициенту произвольное число &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, а из двух других коэффициентов это же число вычтем.&lt;br /&gt;
Получаем (без случайной ошибки):&lt;br /&gt;
:&amp;lt;tex&amp;gt;y = (b_1 + a)x_1 + (b_2 - a)x_2 + (b_3 - a)x_3 = b_1 x_1 + b_2 x_2 + b_3 x_3 + a(x_1 - x_2 - x_3) = b_1 x_1 + b_2 x_2 + b_3 x_3&amp;lt;/tex&amp;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;
Рассматривается линейная зависимость &amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Находим вектор &amp;lt;tex&amp;gt;\beta^*&amp;lt;/tex&amp;gt;, при котором достигается минимум среднего квадрата ошибки:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q(\beta) = ||F \beta - y||^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^*=\arg \min\limits_\beta Q(\beta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Методом наименьших квадратов находим решение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В условиях мультиколлинеарности матрица &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt; становится плохо обусловленной.&lt;br /&gt;
&lt;br /&gt;
Для решения этой проблемы наложим ограничение на величину коэффициентов &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_2^2 \leq t^2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; с учетом ограничения принимает вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||^2&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; {{---}} неотрицательный параметр.&lt;br /&gt;
&lt;br /&gt;
Решением в этом случае будет&lt;br /&gt;
:&amp;lt;tex&amp;gt;\beta^* = (F^T F + \lambda I_n)^{-1} F^T y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это изменение увеличивает собственные значения матрицы &amp;lt;tex&amp;gt;F^T F&amp;lt;/tex&amp;gt;, но не изменяет ее собственные вектора. В результате имеем хорошо обусловленную матрицу.&lt;br /&gt;
&lt;br /&gt;
Диагональная матрица &amp;lt;tex&amp;gt;\lambda I_n&amp;lt;/tex&amp;gt; называется '''гребнем'''.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Ridge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 ridge_regression = Ridge(alpha=0.1)  &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 ridge_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(ridge_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8171822749108134&lt;br /&gt;
&lt;br /&gt;
==Лассо-регрессия==&lt;br /&gt;
===Описание===&lt;br /&gt;
[[Файл: Ridge_and_Lasso_Regression.png|400px|thumb|Рис.1. Сравнение Лассо- и Ридж- регрессии, пример для двумерного пространства независимых переменных.&amp;lt;br/&amp;gt;Бирюзовые области изображают ограничения на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;, эллипсы {{---}} некоторые значения функции наименьшей квадратичной ошибки.]]&lt;br /&gt;
&lt;br /&gt;
'''Метод регрессии лассо''' (англ. ''LASSO, Least Absolute Shrinkage and Selection Operator'') похож на гребневую регрессию, но он использует другое ограничение на коэффициенты &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;||\overrightarrow{\beta}||_1 \leq t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; принимает следующий вид:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q_{\lambda}(\beta) = ||F \beta - y||^2 + \lambda ||\beta||&amp;lt;/tex&amp;gt;,&amp;lt;/center&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Основное различие лассо- и ридж-регрессии заключается в том, что первая может приводить к обращению некоторых независимых переменных в ноль, тогда как вторая уменьшает их до значений, близких к нулю. Рассмотрим для простоты двумерное пространство независимых переменных. В случае лассо-регрессии органичение на коэффициенты представляет собой ромб (&amp;lt;tex&amp;gt;|\beta_1| + |\beta_2| \leq t&amp;lt;/tex&amp;gt;), в случае ридж-регрессии {{---}} круг (&amp;lt;tex&amp;gt;\beta_1^2 + \beta_2^2 \leq t^2&amp;lt;/tex&amp;gt;). Необходимо минимизировать функцию ошибки, но при этом соблюсти ограничения на коэффициенты. С геометрической точки зрения задача состоит в том, чтобы найти точку касания линии, отражающей функцию ошибки с фигурой, отражающей ограничения на &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt;. Из рисунка 1 интуитивно понятно, что в случае лассо-регрессии эта точка с большой вероятностью будет находиться на углах ромба, то есть лежать на оси, тогда как в случае ридж-регрессии такое происходит очень редко. Если точка пересечения лежит на оси, один из коэффициентов будет равен нулю, а значит, значение соответствующей независимой переменной не будет учитываться.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' Lasso&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 lasso_regression = Lasso(alpha=0.1) &amp;lt;font color = green&amp;gt;# alpha {{---}} величина регуляризации&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 lasso_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(lasso_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8173906804156383&lt;br /&gt;
&lt;br /&gt;
==Байесовская регрессия==&lt;br /&gt;
Описанные выше методы никак не учитывали наличие в данных шума, тогда как в реальных данных он скорее всего будет присутствовать. Предположим, что в данных все же есть некоторый шум, и что он распределен нормально. Тогда задачу линейной регрессии можно записать в следующем виде:&lt;br /&gt;
:&amp;lt;tex&amp;gt;f(x, \beta) = \langle \beta, x \rangle + \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\varepsilon \sim N(0, \sigma^2)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Решением этой задачи мы и будем заниматься в этом разделе.&lt;br /&gt;
&lt;br /&gt;
'''Байесовская линейная регрессия''' (англ. ''Bayesian linear regression'') {{---}} подход в линейной регрессии, в котором предполагается что шум распределен нормально.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bayessian_regression_noise.jpg|250px|thumb|Рис.2. Регрессия и шум в данных.&amp;lt;br/&amp;gt;Синяя точка {{---}} значение из датасета, красная {{---}} значение, полученное в результате работы алгоритма регрессии. Также на рисунке зеленой линией изображена функция, предсказанная алгоритмом регрессиии, а черной {{---}} гауссово распределение шума.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 2 синяя точка показывает значения из датасета, красная {{---}} значение, предсказанное регрессией. Поскольку центр гауссианы находится в красной точке, маленькие отклонения синей точки от красной более вероятны, а большие менее вероятны.&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи регрессии воспользуемся методом максимального правдоподобия.&lt;br /&gt;
&lt;br /&gt;
Запишем правдоподобие:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = N(y|\beta x, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будем предполагать, что данные независимы:&lt;br /&gt;
:&amp;lt;tex&amp;gt;p(y|x, \beta, \sigma^2) = \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Прологарифмируем это выражение:&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ln p(y|x, \beta, \sigma^2) \\ = \ln \prod\limits_{i=1}^n N(y_i|\beta x_i, \sigma^2) \\ = \ln {\left( \frac{1}{(\sigma \sqrt{2 \pi})^n} \exp{(-\frac{1}{2 \sigma^2} \sum\limits_{i-1}^n (y_i - \beta x_i)^2)}\right )} \\ = -\frac{n}{2} \ln{2 \pi \sigma^2} - \frac{1}{2\sigma^2} \sum\limits_{i=1}^n (y_i - \beta x_i)^2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Из оценки максимального правдоподобия мы получили оценку по методу наименьших квадратов.&lt;br /&gt;
&lt;br /&gt;
===Пример кода для Scikit-learn===&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# импорт библиотек&amp;lt;/font&amp;gt;&lt;br /&gt;
 '''from''' sklearn.datasets '''import''' make_regression&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' BayesianRidge&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# генерируем данные для X и y&amp;lt;/font&amp;gt;&lt;br /&gt;
 X, y = make_regression(n_samples=10000, noise=100, random_state=0)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# разделение данных на train и test&amp;lt;/font&amp;gt;&lt;br /&gt;
 train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=3)&lt;br /&gt;
 &lt;br /&gt;
 bayesian_regression = BayesianRidge()&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# обучение&amp;lt;/font&amp;gt;&lt;br /&gt;
 bayesian_regression.fit(train_X, train_y)&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# предсказание результата&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.predict(test_X))&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color = green&amp;gt;# вывод точности предсказания&amp;lt;/font&amp;gt;&lt;br /&gt;
 ''print''(bayesian_regression.score(test_X, test_y))&lt;br /&gt;
&lt;br /&gt;
Точность предсказания для данного датасета и параметров:&lt;br /&gt;
 &amp;lt;font color = green&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;/font&amp;gt; 0.8170548749907206&lt;br /&gt;
&lt;br /&gt;
==Логическая регрессия==&lt;br /&gt;
'''Логическая регрессия''' (англ. ''logic regression'') {{---}} обобщенный метод регрессии, применяемый в основном в случае, когда независимые переменные имеют двоичную природу (при этом зависимая переменная не обязательно двоичная). Задачей логической регрессии является определение независимых переменных, которые могут быть выражены как результат вычисления булевой функции от других независимых переменных.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;x_1, x_2, \dots, x_k&amp;lt;/tex&amp;gt; {{---}} двоичные независимые переменные, и пусть &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} зависимая переменная. Будем пытаться натренировать модели регрессии вида &amp;lt;tex&amp;gt;g(E(y)) = b_0 + b_1 L_1 + \dots + b_n L_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt; {{---}} булева функция от переменных &amp;lt;tex&amp;gt;x_i&amp;lt;/tex&amp;gt; (например &amp;lt;tex&amp;gt;L_j = (x_2 \lor \overline{x_4}) \land x_7&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Для каждого типа модели необходимо определить функцию, которая отражает качество рассматриваемой модели. Например, для линейной регрессии такой функцией может быть остаточная сумма квадратов. Целью метода логической регрессии является минимизация выбранной функции качества посредством настройки параметров &amp;lt;tex&amp;gt;b_j&amp;lt;/tex&amp;gt; одновременно с булевыми выражениями &amp;lt;tex&amp;gt;L_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Логистическая регрессия]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/ 10 типов регрессии {{---}} какой выбрать?]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%29 machinelearning.ru {{---}} Линейная регрессия (пример)]&lt;br /&gt;
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B8%D0%B4%D0%B6-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F machinelearning.ru {{---}} Ридж-регрессия]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%BE%D0%BB%D0%BB%D0%B8%D0%BD%D0%B5%D0%B0%D1%80%D0%BD%D0%BE%D1%81%D1%82%D1%8C Wikipedia {{---}} Мультиколлинеарность]&lt;br /&gt;
* [http://www.ccas.ru/voron/download/Regression.pdf Лекции по алгоритмам восстановления регрессии К. В. Воронцов]&lt;br /&gt;
* [https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b Ridge and Lasso Regression: A Complete Guide with Python Scikit-Learn]&lt;br /&gt;
* [https://habr.com/ru/company/ods/blog/322076/ Habr {{---}} Базовые принципы машинного обучения на примере линейной регрессии]&lt;br /&gt;
* [http://kooperberg.fhcrc.org/logic/documents/documents.html Documents on Logic Regression]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Регрессия]]&lt;/div&gt;</summary>
		<author><name>Penguinni</name></author>	</entry>

	</feed>