23
правки
Изменения
Нет описания правки
=== Линейно неразделимая выборка ===
На практике линейно разделимые выборки практически не встречаются: в данных возможны выбросы и нечёткие границы между классами. В таком случае поставленная выше задача не имеет решений, и необходимо ослабить ограничения, позволив некоторым объектам попадать на "территорию" другого класса. Для каждого объекта отнимем от отступа некоторую положительную величину $\xi_i$, но потребуем чтобы эти введённые поправки были минимальны. Это приведёт к следующей постановке задачи, называемой также ''SVM с мягким отступом'' (англ. ''soft-margin SVM''):
$\begin{cases}
\frac{1}{2} \lVert \vec{w} \rVert^2 \color{redbrown}{+ C \sum\limits_{i=1}^\ell \xi_i} \to \min\limits_{w, b, \color{redbrown}{\xi}} \\M_i(\vec{w}, b) \geq 1 \color{redbrown}{- \xi_i}, \quad i = 1, \ldots, \ell \\\color{redbrown}{\xi_i \geq 0, \quad i = 1, \ldots, \ell} \\
\end{cases}$
}}
По теореме Каруша—Куна—Таккера, поставленная нами задача минимизации эквивалентна двойственной задаче для поиска седловой точки функции Лагранжа:
$\mathscr{L}(\vec{w},b,\xi; \lambda, \eta) = \frac{1}{2} \lVert w \rVert^2 - \sum\limits_{i=1}^\ell \lambda_i \left(M_i(\vec{w}, b) - 1\right) - \sum\limits_{i=1}^\ell \xi_i \left(\lambda_i + \eta_i - C\right)$
Диапазон значений $\lambda_i$ (которые, как указано выше, соответствуют ограничениям на величину отступа) позволяет нам разделить объекты обучающей выборки на три типа:
# $\lambda_i = 0 \; \Rightarrow \; \eta_i = C; \; \xi_i = 0; \; M_i \geq 1 \;$ — периферийные (неинформативные) объекты — <br> Эти объекты лежат в своём классе, классифицируются верно и не влияют на выбор разделяющей гиперплоскости (см. ограничение на уравнение для $\vec{w}$)# $0 < \lambda_i < C \; \Rightarrow \; 0 < \eta_i < C; \; \xi_i = 0; \; M_i = 1 \;$ — опорные граничные объекты — <br> Эти объекты лежат ровно на границе разделяющей полосына стороне своего класса# $\lambda_i = C \; \Rightarrow \; \eta_i = 0; \; \xi_i > 0; \; M_i < 1 \;$ — опорные объекты-нарушители — <br> Эти объекты лежат внутри разделяющей полосы либо или на стороне другого чужого класса
{{Определение
\end{cases}$
Это также задача квадратичного программирования. Решение задачи лежит в пересечении $\ell$-мерного куба с ребром $C$ и гиперплоскости $\langle \lambda, y \rangle = 0$, что является выпуклым многогранником размерности $\ell-1$. И в В этом многограннике нужно найти минимум выпуклого квадратичного функционала. Следовательно, данная задача имеет единственное решение.
Существуют различные методы поиска решения: можно воспользоваться универсальным солвером задачи квадратичного программирования ([[CPLEX]], [[Gurobi]]), либо алгоритмом, специально заточенным под поставленную задачу учитывающим специфические особенности SVM ([[SMO]], [[INCAS]]).
После того, как мы получили вектор коэффициентов $\vec{\lambda}$, можем выразить решение прямой задачи через решение двойственной:
\end{cases}$
На практике для повышения вычислительной устойчивости рекомендуется при расчёте $b$ брать медиану по опорным граничным объектам:
$a(x) = sign \left(\sum\limits_{i=1}^\ell \lambda_i y_i \langle \vec{x}_i, \vec{x} \rangle - b\right)$
=== Нелинейное обобщение, kernel trick ===
{{Определение
|definition=
'''Ядро''' (англ. ''kernel'') — функция $K: X \times X \to \mathbb{R}$, которая является скалярным произведением в некотором гильбертовом спрямляющем пространстве: $K(\vec{x}_1, \vec{x}_2) = \langle \psi(\vec{x}_1), \psi(\vec{x}_2) \rangle$ при некотором $\psi : X \to H$, где $H$ — гильбертово пространствосо скалярным произведением.
}}
Более того, можно вообще не строить спрямляющее пространство $H$ в явном виде, и вместо подбора $\psi$ подбирать непосредственно ядро. Теорема Мерсера определяет условия, при которых функция может являться ядром:
{{Теорема
|id=kernel
|author=Мерсер
|statement=
Функция $K(\vec{x}_1, \vec{x}_2)$ является ядром тогда и только тогда, когда выполнены условия: <br><br>
}}
Конструктивные методы синтеза ядер:
# $K(\vec{x}_1, \vec{x}_2) = K_1(\vec{x}_1, \vec{x}_2) * K_2(\vec{x}_1, \vec{x}_2) \quad$ (произведение ядер)
# $K(\vec{x}_1, \vec{x}_2) = \psi(\vec{x}_1) * \psi(\vec{x}_2) \quad$ (произведение функций $\psi : X \to \mathbb{R}$)
# $K(\vec{x}_1, \vec{x}_2) = K_1(\phi(\vec{x}_1), \phi(\vec{x}_2)) \quad$ (ядро от функций композиция ядра и функции $\phi : X \to X$)
# $K(\vec{x}_1, \vec{x}_2) = \int\limits_X s(\vec{x}_1, \vec{z}) s(\vec{x}_2, \vec{z}) d \vec{z} \quad$ ($s : X \times X \to \mathbb{R}$ — симметричная интегрируемая функция)
# $K(\vec{x}_1, \vec{x}_2) = f(K_1(\vec{x}_1, \vec{x}_2)) \quad$ ($f: \mathbb{R} \to \mathbb{R}$ представима в виде сходящегося степенного ряда с неотрицательными коэффициентами)
* $K(\vec{x}_1, \vec{x}_2) = (\langle \vec{x}_1, \vec{x}_2 \rangle + c)^d, \quad c, d \in \mathbb{R}$ — полиномиальное ядро
* $K(\vec{x}_1, \vec{x}_2) = \sigma(\langle \vec{x}_1, \vec{x}_2 \rangle)$ — нейросеть с заданной функцией активации $\sigma(z)$ (не при всех $\sigma$ является ядром)
* $K(\vec{x}_1, \vec{x}_2) = \exp(-\beta \lVert \vec{x}_1 - \vec{x}_2 \rVert^2)$ — сеть радиальных базисных функций (англ. ''RBF'')
== Преимущества и недостатки SVM ==
Преимущества SVM перед методом стохастического градиента и нейронными сетями:
* Задача выпуклого квадратичного программирования хорошо изучена и имеет единственное решение
* Метод опорных векторов эквивалентен двухслойной нейронной сети, где число нейронов на скрытом слое определяется автоматически как число опорных векторов
* Принцип оптимальной разделяющей гиперплоскости приводит к максимизации ширины разделяющей полосы, а следовательно, к более уверенной классификации
Недостатки классического SVM:
* Неустойчивость к шуму: выбросы в исходных данных становятся опорными объектами-нарушителями и напрямую влияют на построение разделяющей гиперплоскости* Нет общих подходов к оптимизации ядра под задачуНе описаны общие методы построения ядер и спрямляющих пространств, наиболее подходящих для конкретной задачи
* Нет отбора признаков
* Необходимо подбирать константу $C$при помощи кросс-валидации
== Модификации ==