Геометрическое исследование SVM

Это моя вторая статья из серии Разоблачение мистики. Вы можете ознакомиться с первой статьей здесь -



В этой статье я сосредоточусь на машинах опорных векторов или SVM. Это один из самых популярных алгоритмов машинного обучения, который пользовался статусом Numero Uno почти десять лет (с начала 1990-х до 2000-х годов). Тем не менее, это все еще очень простой и важный алгоритм, который вам обязательно стоит иметь в своем арсенале. Итак, начнем с SVM.

В этой статье я расскажу о следующих темах.

  • Введение в SVM
  • Геометрическая интуиция
  • Почему мы используем +1 и -1 для опорных векторных плоскостей
  • Функция потерь
  • Двойная форма SVM
  • Ядро и его типы
  • nu-SVM

Машины опорных векторов

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

Если у вас есть n-мерное пространство, то размерность гиперплоскости будет n-1.

Пример: если у вас есть 2-мерное пространство, это будет линия, если у вас есть 3-мерное пространство, это будет плоскость и так далее.

Геометрическая интуиция

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

Обоснование выбора границ решения с большим запасом заключается в том, что он уменьшает ошибку обобщения, а границы решения с меньшим запасом обычно приводят к переобучению.

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

Теперь давайте подробнее рассмотрим, как на самом деле увеличить маржу.

Давайте рассмотрим следующие уравнения -

Это просто уравнения положительной и отрицательной гиперплоскостей. Я только добавил «b» к этому уравнению, которое является точкой пересечения оси y. Если вам интересно, почему я взял значения положительной и отрицательной гиперплоскостей как +1 и -1 соответственно, просто задержите эту мысль на некоторое время, поскольку я подробно объясню причину этого позже в статье.

После вычитания уравнений (1) и (2) мы получаем -

Мы можем нормировать это уравнение на длину вектора w, которая определяется следующим образом

Итак, наше окончательное уравнение -

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

Итак, наша функция оптимизации в случае SVM -

argmax( 2 / ||W||) for all i
such that Yi(W^T * Xi+b) >= 1

Здесь Yi (W ^ T * Xi + b) ›= 1 означает, что точки идеально линейно отделимы. Таким образом, все положительные точки лежат на положительной стороне плоскости, а все отрицательные точки лежат на отрицательной стороне.

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

Мягкая маржа SVM

Давайте сначала посмотрим на уравнение для Soft Margin SVM.

Если вы не можете понять это уравнение, не беспокойтесь об этом слишком много, я объясню каждый термин. Вам может показаться знакомым термин || W || / 2. Ранее мы стремились максимизировать член 2 / || W || но теперь, когда мы его инвертировали, мы изменили argmax на argmin.

Возможно, вы уже догадались, что « обозначает количество точек данных. Итак, два новых члена в этом уравнении:

C         = It is a hyperparameter
ζ (Zeta)  = It denotes the distance of misclassified points 

Понимание Зетов

Чтобы лучше понять термин дзета, давайте рассмотрим следующий пример.

Здесь ★ обозначает положительные точки, а ⬤ - отрицательные.

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

Таким образом, в этом частном случае расстояние между точкой x1 и плоскостью 𝚷 составляет 0,5 (в сторону отрицательной плоскости).

For point x1 - 
Y(W^T * X + b)  = -0.5
Since class label(Y) is +1 and the distance is -0.5, since it is towards the negative plane

Мы можем переписать приведенное выше уравнение следующим образом -

Y(W^T * X + b)  = 1 - 1.5  
So in general form we can write it as 
Y(W^T * X + b)  = 1 - ζ

Таким образом, в основном то, что представляет ζ, - это расстояние от неверно классифицированной точки до ее фактической плоскости. Вы можете заметить, что расстояние x1 от положительной плоскости 𝚷 + равно 1,5, и это в точности значение ζ в данном случае.

Понимание C

Как я уже упоминал выше, C - гиперпараметр, и его можно эффективно настроить, чтобы избежать переобучения или недообучения.

As C increases the tendency of the model to overfit increases
As C decreases the tendency of the model to underfit increases

Почему мы используем +1 и -1 для опорных векторных плоскостей

Необязательно, чтобы мы всегда выбирали +1 и -1. Итак, давайте выберем здесь любое произвольное значение k. Единственное ограничение - оно должно быть больше 0.

Мы не можем выбирать разные значения для наших планов, то есть мы не можем брать + k1 и -k2, поскольку мы хотим, чтобы наши положительные и отрицательные плоскости были одинаково удалены от нашей плоскости 𝚷

Теперь наша обновленная маржа -

2*k / ||W||
for k = 5 we get
10/||W||

Итак, теперь мы будем использовать 10 / || W || вместо 2 / || W || это единственное различие, и поскольку k здесь постоянная величина, на самом деле не имеет значения, какое значение мы выбираем, поскольку это не повлияет на нашу задачу оптимизации.

Поэтому мы используем +1 и -1 для упрощения математических вычислений.

Функция потерь

Функция потерь, используемая в SVM, - это потеря петли. Проще говоря, мы можем понимать потерю шарнира как функцию, значение которой не равно нулю до определенной точки, скажем, «z», а после этой точки «z» она равна нулю.

Мы рассмотрели уравнение для Soft-Margin SVM.

Здесь второй член, содержащий ζ и C, является членом потерь. Теперь посмотрим, как мы получили этот термин.

Let Y(W^T * X + b) = Z   -- (i)
// Here we are just substituting the value of Y(W^T * X + b) so that it is more readable
So from (i) we can say that 
If Z > = 1  then the point is correctly classified and
If Z < 1    then the point is misclassified 

Если вы не поняли приведенную выше замену, позвольте мне уточнить ее.

Предположим, у вас есть 2 точки x1 и x2, где x1 положительно, а x2 отрицательно. Теперь для точки x2, лежащей в отрицательной плоскости, значение (W ^ T * X + b) будет отрицательным, а значение Y будет равно -1.

Итак, Y * (W ^ T * X + b) = -1 * (-ve значение) = + ve значение

Точно так же для положительной точки x1 (W ^ T * X + b) будет положительным, и его значение Y также будет положительным. Итак, Y * (W ^ T * X + b) = +1 * (+ ve значение) = + ve значение.

Теперь, если у вас есть другая точка x3, которая положительна, но лежит в отрицательной плоскости, тогда (W ^ T * X + b) будет отрицательным, но метка класса Y по-прежнему положительна.

Итак, Y * (W ^ T * X + b) = +1 * (-ve значение) = -ve значение

Таким образом, суть здесь в том, что Y * (W ^ T * X + b) будет положительным только в том случае, если точка правильно классифицирована, и мы только что заменили Y * (W ^ T * X + b) как Z.

Теперь, когда вы знакомы с концепцией Z (надеюсь), давайте посмотрим на нашу функцию потерь.

Итак, наша функция потерь довольно проста, и если вы не можете понять, как она работает, я расскажу о ней для вас.

Как объяснялось ранее -

If Z >= 1   then the point is correctly classified and
If Z < 1    then the point is misclassified

Итак, мы рассмотрим здесь 2 случая.

Случай 1 - (Z ≥1)

Если Z ≥1, то 1-Z будет меньше 0, поэтому Max (0, 1-Z) = 0

Интуитивно это имеет смысл, как если бы Z≥1, это означает, что мы правильно классифицировали точку и, следовательно, наша потеря равна 0.

Случай 2 - (Z ‹1)

Если Z ‹1, то 1-Z будет больше 0, поэтому Max (0, 1-Z) = 1-Z

Последний шаг

Как мы уже знаем, -

Y (W ^ T * X + b) = 1 - ζ (см. Подраздел Понимание Zeta)

Таким образом, мы можем переписать это как -
1 - Y (W ^ T * X + b) = ζ
И Y (W ^ T * X + b) = Z
Итак, 1-Z = ζ

И из приведенных выше случаев мы видим, что термин, который мы хотим минимизировать, - это 1-Z.

Это именно то, что мы здесь написали. Мы только что заменили 1-Z на ζ

Двойная форма SVM

Выведенное выше уравнение 1 является первичной формой SVM. Однако, чтобы использовать возможности ядер, мы используем двойную форму SVM. Итак, давайте посмотрим на двойную форму SVM.

Причина использования двойной формы SVM заключается в том, что она позволяет нам использовать возможности ядер, что является ключевой особенностью SVM, и если вы не знакомы с ядрами, не беспокойтесь об этом слишком сильно, я объясню ядра в следующий раздел. Но пока просто поймите, что мы используем двойную форму SVM, чтобы использовать возможности ядер.

Математически доказано, что уравнение 2 эквивалентно уравнению 1.

Математическое доказательство того, как мы на самом деле пришли к этой двойной форме, выходит за рамки этой статьи, так как это немного математически сложно. Если вы хотите понять математику, стоящую за этим, вы можете посмотреть следующее видео -

В этом видео профессор Патрик Генри Уинстон дал блестящее математическое объяснение, и я настоятельно рекомендую вам посмотреть это видео, чтобы лучше понять концепцию SVM.

Здесь наиболее важно отметить, что значение αi будет отличным от нуля только для опорных векторов. Таким образом, мы в основном заботимся только о векторах поддержки.

Мы можем обновить наше уравнение 2 следующим образом:

Раньше мы использовали Xi ^ T. Xj, т.е. мы взяли скалярное произведение Xi и Xj, что эквивалентно функции сходства косинусов. Таким образом, мы можем просто заменить эту функцию подобия косинуса любой другой функцией от Xi и Xj. Это называется трюком с ядром. А теперь давайте разберемся, что такое, черт возьми, ядро.

Ядро и его типы

В приведенном выше уравнении 3 мы можем заменить K любой функцией ядра. Теперь вам должно быть интересно, как это что-то меняет. Почему вообще имеет значение, какую функцию мы используем? Итак, давайте попробуем ответить на эти вопросы.

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

Теперь, как бы вы использовали SVM для разделения этих данных? Невозможно установить плоскость, которая разделяла бы эти 2 класса.

Введите ядра….

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

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

Типы ядер

Два самых популярных типа ядер:

  1. Полиномиальное ядро
  2. Ядро радиальной базисной функции (RBF)

Полиномиальное ядро ​​-

Итак, для квадратичного ядра у нас будет что-то вроде этого -

Ядро RBF -

Здесь d - расстояние между x1 и x2, т.е. d = || x1-x2 || а 𝜎 - гиперпараметр.

nu-SVM -

nu - это гиперпараметр, который мы можем использовать для определения допустимого процента ошибки.

0 <= nu <= 1  // The value of nu is between 0 and 1
Let's understand it with an example.
Suppose nu = 0.01 and N (Number of data points)= 100,000
* Percentage of errors <= 1%
* Number of Support Vectors >= 1% of N i.e. 1000

Итак, с помощью гиперпараметра nu мы можем сделать 2 вещи:

  • Мы можем контролировать процент ошибок для нашей модели.
  • Мы не можем контролировать, но можем определить количество опорных векторов.

На этом мы подошли к концу статьи. Спасибо за то, что прочитали это.

Вы можете хлопать в ладоши, если хотите. ЭТО БЕСПЛАТНО.

Мои LinkedIn, Twitter и Github
Вы можете заглянуть на мой сайт, чтобы узнать больше обо мне и моей работе.