ПОДДЕРЖКА ВЕКТОРНЫХ МАШИН

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

РАБОТА SVM

Векторы поддержки
Прежде чем перейти к работе, давайте сначала разберемся, что такое векторы поддержки.

Слева вы можете видеть, что есть два класса точек (розовые и синие или + ve и -ve), разделенные гиперплоскостью π.
Есть две другие гиперплоскости π + и π-, идущие параллельно π.
Обратите внимание на точки, соприкасающиеся с π + и π-. Эти точки называются опорными векторами.
Кроме того, эти точки являются ближайшими точками к нашей разделяющей гиперплоскости π.

Точки, через которые проходят π + и π-, или точки, ближайшие к π (разделяющая гиперплоскость), называются опорными векторами.

Идеология SVM.
Ключевая идея SVM - найти гиперплоскость, которая разделяет два класса как можно шире.

Посмотрите на картинку ниже -

Если вас попросят нарисовать гиперплоскость так, чтобы она разделяла два класса, вы можете получить много гиперплоскостей. Правильно? Возьмем две такие гиперплоскости π1 и π2.

В π1 мы видим, что он очень близко к точкам как класса, так и в π2, оба класса находятся на разумном расстоянии.

Итак, SVM пытается найти такую ​​гиперплоскость, которая максимизирует маргинальное расстояние между точками или разделяет классы настолько широко, насколько это возможно.
Маргинальное расстояние - это расстояние между π + и π-.
По мере увеличения маржи повышается точность обобщения.

ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ И SVM

Основное различие между логистической регрессией и SVM состоит в том, что SVM пытается найти гиперплоскость, максимизирующую маржу, тогда как логистическая регрессия этого не делает.
На приведенном выше рисунке LR также дал бы π1 в качестве разделяющей гиперплоскости. Но SVM дает нам наиболее подходящую гиперплоскость - π2.

Вот почему на SVM не влияют выбросы, потому что выбор гиперплоскости зависит только от опорных векторов, в отличие от логистической регрессии.

Математический вывод

Пусть
π: w’x + b
π +: w’x + b = 1
π-: wx + b = -1
w - перпендикулярно всем гиперплоскостям.

пусть d = расстояние между π + и π-.
d = 2 / || w || , || w || 1
Наша цель - максимизировать d.
Следовательно,
(w *, b *) = argmax (2 / || w ||)

Но приведенное выше уравнение работает только тогда, когда наши данные линейно разделимы, то есть нет точки данных между π- и π +.

Следовательно, приведенное выше уравнение становится,

(w *, b *) = argmax (2 / || w ||), такое, что yi (w’xi + b) ≥ 1 для всех xi

Для опорных векторов yi (w’xi + b) = 1
Вышеупомянутое условие также известно как Hard Margin SVM.

SVM В СЛУЧАЕ НЕЛИНЕЙНО ОТДЕЛЬНЫХ ДАННЫХ

Рассмотрим тип распределения точек данных, приведенных слева, и обратите внимание на неправильно классифицированные точки здесь.
Для неправильно классифицированной точки пусть уравнение будет следующим:
yi (w’xi + b) = k
где k: расстояние со знаком до точки от π.

Давайте перепишем уравнение как
yi (w’xi + b) = 1-Z
здесь Z: расстояние xi от его правильной гиперплоскости (π + или π-).

Можно сделать вывод,
если Z = 0, yi (w'xi + b) ≥ 1, что означает правильную классификацию по π + и π-.
Z ›0, неправильно классифицировано и равно расстояние от правильной гиперплоскости (π + и π-) в неправильном направлении.

Итак, окончательное уравнение
(w *, b *) argmin (|| w || / 2) + c / n Σ Zi, такое, что yi (w'xi + b) ≥ 1- Zi и Zi ≥0

Вышеупомянутый тип SVM известен как Soft Margin SVM.
Уравнение также называется Первичная форма SVM.

ДВОЙНАЯ ФОРМА SVM

Выше приведено уравнение, известное как двойная форма SVM.

Давайте подробно рассмотрим это уравнение: -

  • αi ›0 для опорных векторов, αi = 0 для неопорных векторов.
  • В приведенном выше уравнении xi’xj можно заменить на матрицу подобия (xi, xj), которая в конечном итоге будет заменена на K (xi, xj), k означает «трюк с ядром».

ЯДЕРНЫЙ ТРЮК

Уловка с ядром - это, по сути, метод, при котором сходство между точками данных вычисляется путем преобразования их в другое пространство. Уловка с ядром позволяет избежать необходимости явного преобразования точек данных в более высокое измерение.
Это уловка ядра, благодаря которой SVM могут обрабатывать нелинейные данные, используя правильное ядро. Такой тип SVM также известен как SVM ядра.
Давайте посмотрим на 2 таких ядра: -

  1. Полиномиальное ядро ​​
    Учитывая две точки данных x1 и x2, полиномиальное ядро ​​можно записать как: -
    K (x1, x2) = (x1 'x2 + c) ^ d
    Здесь d обычно представляет собой измерение, в котором точки данных будут внутренне преобразованы. Например, если d = 2, это называется квадратичным ядром и так далее.
  2. Ядро RBF
    Учитывая две точки данных x1 и x2, ядро ​​RBF можно записать как: -
    K (x1, x2) = exp ( - || x1-x2 || ² / 2σ²)
    В приведенном выше уравнении || x1-x2 || ² фактически представляет собой расстояние между двумя точками.
    По мере увеличения || x1-x2 || ², т.е. расстояние между двумя точками данных увеличивается, сходство уменьшается, и, следовательно, K (x1, x2) уменьшается экспоненциально.

СЛОЖНОСТЬ ПОЕЗДКИ И ВРЕМЕНИ БЕГА

Время обучения: -
O (n²) для SVM ядра
O (nd²), если d ‹n (более оптимизировано)
d = Dimension и n = no точек данных.

Вот почему, когда n велико, SVM избегают.

Время выполнения: -
O (kd), где k = количество опорных векторов и d = размер.
Значение k варьируется от 1≤k≤n.

ВНЕДРЕНИЕ SVM

Я снова буду использовать набор данных Titanic от Kaggle, где задача состоит в том, чтобы создать модель, которая предсказывает, какие пассажиры выжили при кораблекрушении Titanic. Набор данных можно скачать здесь.
Это также проблема бинарной классификации, когда цель Выжившие имеет 0 для людей, которые не пережили катастрофу, и 1 для тех, кто выжил.

Мы предварительно обработали наши данные в x_train и y_train и импортировали SVM из sklearn.

  • Параметр C здесь равен 2. Это C из первичной формы SVM.
    Если C увеличивается, склонность к ошибкам уменьшается, что приводит к переобучению.
    Если C уменьшается, это приводит к недообучению.
    Оптимальное C можно найти, используя методы настройки гиперпараметров.
  • используемое здесь ядро ​​является линейным

Для более детальной реализации и понимания данных обратитесь здесь.

Удачного кодирования! :)