Давайте поговорим об одном из самых мощных алгоритмов контролируемого машинного обучения - Support Vector Machine или SVM. Формально начнем с введения.

Введение

Машина опорных векторов или SVM - это контролируемый алгоритм машинного обучения, который обычно используется для задач классификации. Идею представили Владимир Николаевич Вапник и Алексей Я. Червоненкис в 1963 г., предполагая, что точки данных линейно разделимы. Позже Владимир Н. Вапник расширил эту первоначальную идею и ввел так называемый «трюк с ядром», который также позволяет использовать нелинейные классификации.

Намерение

Как SVM выполняет задачи классификации? Здесь мы постараемся понять каждый аспект этого. Я не просто дам вам базовое представление о SVM. Скорее, я намерен сделать все, что идет «за кулисами» SVM, как можно более понятным. Итак, если ваша цель - понять то же самое, вы попали в нужное место. Приятного чтения :)

Представление примеров ввода

Как мы знаем, в контролируемом машинном обучении нам нужны некоторые обучающие примеры для обучения нашего алгоритма. Обычно мы обрабатываем эти примеры, а затем придумываем функцию или, как мы формально называем, «гипотезу», которая наилучшим образом отображает входные характеристики (независимые переменные). к зависимым значениям. В случае SVM, как и в других моделях, примеры представлены в n-мерном гиперпространстве в виде векторов, где n - количество функций. Например, если обучающий пример, например, человек, имеет характеристики роста, веса и длины носа (длина носа !! Действительно !! Это странно, но все же учтите это сейчас :)), то этот обучающий пример , который является человеком, может быть представлен как вектор в трехмерном пространстве с осями, представляющими рост, вес и длину носа. Аналогичным образом, примеры, имеющие n функций, могут быть представлены в n -мерном гиперпространстве как векторы. По сути, каждый пример существует в пространстве, где его местоположение определяется значениями его характеристик.

Цель - двоичный линейный SVM-классификатор

Линейный SVM-классификатор предполагает, что эти векторы линейно разделимы. Это означает, что мы можем провести линейную границу решения, которая может представлять наш классификатор. Учитывая n-мерное гиперпространство, эту решающую границу мы называем гиперплоскостью. В 2-D эта гиперплоскость является «линией», в 3-D - «плоскостью», а в n-мерном гиперпространстве она называется гиперплоскостью. Основная идея или предположение заключается в том, что в любом случае (1-D, 2-D или nD), будь то линия, плоскость или гиперплоскость, граница принятия решения является линейной по своей природе и он разрезает гиперпространство на 2 половины таким образом, что все примеры, скажем, класса C1, лежат в одной половине, а все остальные, скажем, класса C2, лежите в другом. Таким образом, мы можем использовать эту гиперплоскость или границу решения в качестве классификатора. Итак, наша цель - найти гиперплоскость в этом n-мерном гиперпространстве, которая разрезает или делит это гиперпространство таким образом, чтобы все положительные обучающие примеры лежали с одной стороны от него, а отрицательные - с другой (обычно мы ссылаемся на двоичные классы как положительные и отрицательные классы. Это не имеет отношения к знакам. Просто соглашение). Таким образом, мы попытаемся изучить на наших обучающих примерах уравнение или представление этой гиперплоскости, которая представляет нашу гипотезу (в мире машинного обучения мы всегда делаем некоторые гипотезы о функции, которая действительно существует между вводом и выводом, и продолжаем ).

Изображение гиперплоскости

Прежде чем мы начнем с построения нашей гиперплоскости, давайте сначала посмотрим, как мы математически представляем гиперплоскость. Как мы уже говорили, гиперплоскость в 2-мерном пространстве называется линией. Давайте посмотрим, как это представить, ведь это легко построить и визуализировать. Линия представлена ​​следующим линейным уравнением:
y = mx + b,

где m - наклон линии, а b - постоянная величина. Наклон (коэффициент при x) обычно дает представление об ориентации линии относительно оси x, а b представляет смещение. Смещение - это постоянная величина, которая не представляет ничего, кроме положения линии.

То же уравнение можно представить в следующей форме:
f (x) = W.Transpose. X + B,

где W - вектор веса, который содержит коэффициенты x и y.
Например, для строки, заданной как x-2y + 3 = 0,
W = [1, -2], X = [x, y] и смещение b = 3

Вектор [1, -2] всегда будет нормальным к линии y - 2x + 3 = 0. Вы можете попробовать нарисовать что-то, чтобы получить лучшую ясность.

Давайте поговорим немного о представлении плоскости сейчас, а затем, может быть, позже, вы можете подпитывать свое воображение, чтобы расширить это и понять представление гиперплоскости в n-мерном гиперпространстве.
В трехмерном пространстве или гиперпространство, как мы уже обсуждали, эта гиперплоскость - это то, что мы называем «плоскостью». Подобно представлению линии, плоскость в трехмерном пространстве может быть представлена ​​как
aX + bY + cZ + d = 0

Это уравнение также может быть представлено как
W.Transpose. X + B = 0,

где W - вектор веса, содержащий коэффициенты признаков X , Y и Z. W всегда перпендикулярно плоскости и, таким образом, дает представление об ориентации плоскости, а b - смещение, которое представляет положение гиперплоскости.
Например, для уравнения прямой 2x + 3y + 4z + 3 = 0,
W = [2, 3, 4], X = [x, y, z] и смещение, B = 3

Вектор [2, 3, 4] всегда будет нормальным к плоскости 2x + 3y + 4z + 3 = 0

В общем, гиперплоскость в n-мерном гиперпространстве может быть представлена ​​следующим уравнением:
f (x) = W.Transpose. X + B,

где W и X - векторы размерности ’n’, которая представляет собой количество функций в обучающих примерах. W - вектор веса, который содержит коэффициенты соответствующих осей признаков в X . Кроме того, он всегда перпендикулярен данной плоскости и, таким образом, дает представление об ориентации плоскости в n-мерном гиперпространстве. B - смещение, которое описывает положение плоскости в n-мерном гиперпространстве.
К настоящему времени вы, возможно, уже догадались, что значения «W» и «B» являются чем-то, что нам нужно, чтобы наш алгоритм учился. Но как? давайте разберемся с интуицией построения модели SVM.

Построение модели SVM - интуиция

Теперь, когда мы знаем представление гиперплоскости, давайте обсудим, как именно мы находим эту гиперплоскость и строим модель. Но перед этим давайте взглянем на основную идею построения модели.

Основная идея модели

Представление модели
Предположим, что уравнение гиперплоскости, которое нам нужно найти, выглядит следующим образом:
f (x) = W .Transpose. X + b, в n-мерном гиперпространстве

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

Теперь предположим, что мы выбрали положительный пример Xi. Поскольку это положительный пример, f (Xi) должен дать значение больше 0. Итак,
f (Xi) = W.Transpose. X + b ›0

Аналогичным образом, для отрицательного примера Xj, f (Xj) должен дать значение меньше 0, как указано ниже. .
f (Xj) = W.Transpose. X + b ‹0

Классификация после обучения
По окончании обучения мы узнаем «оптимизированные» значения вес вектор (W) и смещение ( b), для которых ошибка или потеря будут минимальными. Теперь во время реализации / классификации, пытаясь классифицировать новый пример 'Xk',, мы найдем значение f (Xk) . Затем мы классифицируем 'Xk' как положительный или отрицательный пример на основе этого значения f (Xk) . Если f (Xk) является положительным, мы классифицируем 'k' в качестве положительного примера. Если f (Xk) является отрицательным, мы классифицируем 'k 'в качестве отрицательного примера.

Обнаружение гиперплоскости
А теперь, как нам найти гиперплоскость? Рассмотрим следующую двумерную фигуру.

Мы видим, что существует много гиперплоскостей (или линий), разделяющих 2 класса, представленных красным и желтым цветом. Все эти строки выглядят настолько случайными, и какую из них вы бы выбрали в качестве классификатора? SVM не выбирает случайную гиперплоскость, которая просто разделяет классы. Он не делает случайных вещей. Вместо этого SVM пытается найти гиперплоскость (или линию в данном случае), которая равноудалена от ближайших векторов из обоих классов. Эти векторы, которые наиболее близки к гиперплоскости, называются «опорными векторами». Что ж, вы поняли. У нашего алгоритма есть причина.

Теперь рассмотрим следующую диаграмму, чтобы получить более четкое представление:

Мы видим, что гиперплоскость находится на расстоянии «d» от опорных векторов обоих классов. SVM рассматривает только опорные векторы или опорные векторы для построения границы решения (гиперплоскость). Следовательно, он устойчив к выбросам. Любой вектор, находящийся далеко от опорных векторов, не оказывает абсолютно никакого влияния на границу принятия решения. Затем SVM пытается найти эту границу решения или гиперплоскость, максимизируя расстояние или запас 'd', который представляет собой равное расстояние между собой и опорными векторами на любом из стороны.

Время для математики

Теперь для положительного примера Xi, мы можем сказать,
f (Xi) = W.Transpose. X + b ›0

Точно так же для отрицательного примера Xj мы можем сказать,
f (Xj) = W.Transpose. X + b ‹0

Теперь давайте введем переменную Yi для математического удобства, которая представляет класс из примера i . Таким образом, он может иметь значение +1 или -1.

В более общем виде мы можем сказать:
Yi * (W.Transpose. X + b) ›0

Давайте исследуем то, что мы только что сказали. Здесь, если 'i' принадлежит к положительному классу, то Yi положительно и (W.Transpose. X + b) тоже положительный. Таким образом, их продукт положительный. Точно так же, если 'i' принадлежит к отрицательному классу, тогда Yi отрицательный и (W.Transpose. X + b) также отрицательный. Тем не менее, результат по-прежнему остается положительным. Таким образом, независимо от того, из какого класса взят пример, приведенное выше уравнение всегда будет верным.

А теперь давайте еще раз взглянем на нашу диаграмму.

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

GIST: в обучении SVM мы хотим, чтобы запас или расстояние (d) между гиперплоскостью и опорными векторами было как можно большим. ЗАЧЕМ? Просто попробуйте подумать, чего мы здесь пытаемся достичь и как в этом поможет «максимальный запас / расстояние». Итак, чем больше расстояние, тем лучше классификатор. Мы не хотим, чтобы какой-либо из примеров упал в канаву (пространство между гиперплоскостями, которые проходят через опорные векторы). Нам необходимо соблюдать это условие, когда мы пытаемся математически максимизировать маржу. Это условие на математическом языке называется «ограничением».

Теперь расстояние между вектором, скажем Xi, и нашей целевой гиперплоскостью можно определить как

di = (W.Transpose. X + b) / || W ||

Предположим, что максимальная маржа, которую мы хотим получить, что вполне реально, составляет Гамма. Затем для всех Xi значение di должно быть больше или равно Gamma .

(W.Transpose. X + b) / || W || ›= Гамма

= ›W.Transpose. X + b ›= Гамма * || W ||

Теперь давайте изменим масштаб Gamma * || W || на 1. Так,

W.Transpose. X + b ›= 1, если x - положительный обучающий пример , и
W.Transpose. X + b ‹= -1, если x - отрицательное обучение пример

Теперь давайте введем Yi (Yi = +1 или -1, представляет классы), чтобы сделать нашу математику немного более удобной, и попытаемся представить два вышеуказанных уравнения всего одно уравнение.

Yi * (W.Transpose. X + b) ›= 1 (о Математика! Ты такая красивая :))

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

Yi * (W.Transpose. Xi + b) = 1

Мы видели, что «W.Transpose. Xi + b ” - это мера расстояния Xi от нашей гиперплоскости (W. Transpose . X + b) и Гамма - это расстояние между опорным вектором (ами) и нашей гиперплоскостью. Таким образом, Гамма (очевидно, для опорных векторов) можно записать как,

Гамма = (W.Transpose. X + b) / || W ||

Теперь мы хотим максимизировать Гамма. Теперь вы можете сказать, что максимальное значение Гамма равно бесконечность как минимальное значение || W || равно 0. Да, ты прав. Максимально возможное значение Гамма - бесконечность. НО, это верно, когда у нас нет никаких ограничений. Если присмотреться, Гамма - это расстояние между нашей гиперплоскостью и опорными векторами. А для опорных векторов должно выполняться следующее условие: ДОЛЖНО выполняться:

Yi * (W.Transpose. Xi + b) = 1

Это наше ограничение. Поэтому нам нужно минимизировать || W || SUBJECT до ограничения Yi * (W.Transpose. Xi + b) = 1. Следовательно, здесь нам нужно провести оптимизацию с ограничениями. Что ж, благодаря Жозефу-Луи Лагранжу, мы можем сделать это с легкостью. Теперь, когда мы закончим эту оптимизацию, мы получим оптимальные значения для нашего веса вектора W и предвзятость б.

И это все, что мы хотели !! Это конец этапа изучения нашего алгоритма. Можно сказать, что наша модель / машина чему-то научилась, основываясь на чем-то. Что это за «некоторые вещи». Думаю, теперь ты знаешь.

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

ВЫВОД

Ой !! Слишком много теории и математики. Это могло быть довольно тяжелой дозой для тех читателей, которые впервые читают о SVM. Да, я признаю тот факт, что этот предмет кажется трудным для понимания с первого взгляда. Тем не менее, я старался быть как можно более ясным в объяснении соответствующих концепций, особенно имея в виду первых летчиков. Наконец, поверьте мне, вы узнаете все, что захотите. Просто проявите немного терпения и продолжайте читать из того или другого источника о концепции, которую вы хотите изучить. Я надеюсь, что этот пост помог прояснить материал, относящийся к SVM, и что это не вызывает недоумения. Это было? или это было довольно скучно? Дайте мне знать в разделе комментариев ниже, и я рассмотрю ваши вопросы, на которых стоит сосредоточиться в следующий раз. А пока до свидания и спасибо за ваше время. Хорошо тебе провести время :).