В этой статье объясняется, как работает алгоритм машины опорных векторов (SVM) в задачах регрессии и классификации.

Прежде всего, Машины опорных векторов — это интуитивно понятные алгоритмы для задач классификации. Я хочу сказать, что идея SVM легко объяснима, когда вам нужно различать два класса. Однако это не означает, что этот алгоритм предназначен только для классификации, наоборот, он может хорошо работать для любой регрессии, но логика немного изменится!

Давайте углубимся в концепцию машины опорных векторов…

SVM в линейно разделимых случаях

SVM – это алгоритм, используемый для бинарной классификации (конечно, если ваша проблема связана с классификацией). Следовательно, даже если сегодня можно использовать SVM в задачах с несколькими классами, математика изначально разделяет только два класса.

Лучший и простой способ понять SVM — это использовать случай, когда два класса линейно разделимы, что означает, что вы можете провести линию между точками данных обоих классов:

Можно разделить план разными способами, но логика алгоритма SVM заключается в том, чтобы найти границу , которая находится дальше всего от двух классов:

Непрерывная синяя линия — это граница, линия, четко разделяющая два класса. Пунктирные линии — это поля, а пространство между двумя полями можно назвать путем (или гиперплоскостью). Обе границы равноудалены от границы.

Как указано на рисунке, точки данных, расположенные на полях, называются опорными векторами (отсюда и название «Машина опорных векторов»).

Что интересно, если у вас было больше наблюдений (из любого класса) на графике, пока они не находятся в пути, поля не изменятся, и эта ситуация останется оптимальной.

Цель алгоритма SVM — найти наибольший путь, разделяющий два класса.

Давайте посмотрим, как это работает математически…

Для всех математических обозначений мы используем векторы, потому что они обозначают все наблюдения/функции набора данных.

граница может быть объявлена ​​как любые входные данные (x), удовлетворяющие следующему уравнению:

Это также решающая функция алгоритма с w в качестве весов признаков (параметры другими терминами ), x в качестве входных данных и b в качестве постоянного члена .

Оба поля определяются следующим образом:

Наконец, решающая функция алгоритма даст оценочный выход (ŷ): 0 или 1 в соответствии с значение функции:

→ Линейный SVM имеет целью найти веса и постоянный член, которые оптимизируют решающую функцию.

Как найти параметры (w и b), оптимизирующие решающую функцию?

Давайте помнить: решение проблемы классификации с помощью логистической регрессии в основном минимизирует функцию потерь целевой функции.

Что касается метода опорных векторов, поиск оптимальных параметров (w и b) решается путем минимизации наклон функции решения функции:

Поскольку мы хотим, чтобы два класса были максимально разделены, а точки данных не находились внутри гиперплоскости, мы должны объявить это ограничение во время минимизации:

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

Наконец, мы получили эту цель минимизировать в конце:

  • Минимизация модифицированного наклона решающей функции
  • При ограничении полей (функция решения = 1 и функция решения = -1, ничего между 1 и -1)

→ SVM максимизирует расстояние между двумя границами (между опорными векторами обоих классов).

Давайте быстро проиллюстрируем это:

Наклон решающей функции выглядит так для уникального наблюдения:

Ось Y — это функция решения, а ось X — это наблюдение. Наклон функции говорит нам, что расстояние между 1 и -1 (полями) равно 2 (x1 между 1 и -1).

Если мы разделим наклон на 2, получится следующее:

Мы отмечаем, что расстояние между 1 и -1 увеличивается с уменьшением наклона (x1 от 2 до -2).

Это то, что ищет SVM, веса (и постоянный член), которые максимизируют расстояние между полями (функция решения между 1 и -1).

Жесткая маржа против мягкой маржи

Я не указал, что предыдущее объяснение касалось классификации Linear SVM с жесткими границами. Однако разница с Soft Margin проста:

Мягкая классификация полей в основном позволяет некоторым точкам данных находиться в гиперплоскости (за пределами полей), чего нельзя сказать о жесткой классификации полей.

Математически нам нужно добавить переменную ζ (Zêta) и гиперпараметр C в уравнение минимизации.

  • ζ: измерить, насколько i-е наблюдение может выходить за границы.
  • C: определите компромисс между увеличением гиперплоскости (расстояния между полями), которое является 1-й целью, и уменьшением посягательств на границы (2-я цель) .

Что происходит, когда данные не являются линейно разделимыми?

Нелинейная классификация SVM использует преобразование полиномиальных признаков для создания более сложных отношений между признаками и позволяет SVM разделить два класса, как это было линейно:

Чтобы избежать недостатков, связанных с добавлением полиномиальных функций (которые могли бы работать), существует уловка: уловка ядра.

По сути, это то же самое, что и добавление полиномиальных функций, но без их реального выполнения.

Если вы хотите узнать больше об этом трюке, я рекомендую вам эту статью от Дрю Уиллимитиса.

SVM-регрессия

Для задач регрессии идея алгоритма SVM заключается не в разделении классов, а в том, чтобы иметь наибольшее количество точек данных внутри пути (гиперплоскости):

Мягкая маржа также может быть реализована путем определения гиперпараметра: ε.

Заключение

В заключение, SVM — это алгоритм, основанный на расстоянии между данными точками различных классы (или просто точки данных в случае проблем с регрессией). Он работает только при наблюдениях из двух классов или линейно разделимых. Однако можно преобразовать отношение отношения между данными и создайте способ их разделения.
Мы называем опорными векторами точки данных на полях, обеспечивающие максимальное расстояние между двумя классами. гиперплоскость/путь – это пространство между этими опорными векторами.

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

Ссылочные источники: