Интуитивно понять, как работают машины опорных векторов

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

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

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

Классификатор большой маржи

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

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

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

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

Цель оптимизации

Чтобы найти границу решения, мы должны:

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

Гипотеза для SVM довольно проста, для весов w

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

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

Первый член - это потери, когда y = 1, а второй член - это потери, когда y = 0 и «y hat» - это не что иное, как наша гипотеза, определенная на рисунке 3. Я знаю, что выдал много уравнений, не волнуйтесь, давайте начнем разбираться в них.

Вот как выглядит стоимость, когда фактические классы равны 1 и 0 соответственно. Если вы не понимаете, откуда взялись 1 и -1, не беспокойтесь об этом, вы поймете это, когда мы увидим формулу для функции потерь.

Давайте сначала рассмотрим первый случай, когда y = 1. Мы знаем, что наш прогноз будет 1, когда гипотеза неотрицательна. Таким образом, для этих значений нашей гипотезы наши затраты должны быть минимальными, но здесь это не так. Почему наши затраты достигают минимума, то есть значения 0, только тогда, когда гипотеза больше или равна 1 вместо 0? Ответ можно найти в идее классификатора большой маржи.

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

Теперь рассмотрим второй случай, когда y = 0

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

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

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

Теперь, если вы снова посмотрите на графики, вы поймете, откуда взялись 1 и -1. Потеря в основном просто говорит, что

  • для y = 1, если значение гипотезы больше или равно 1, потери равны 0. Если гипотеза лежит между 0 и 1 или отрицательна, потери имеют положительное значение и линейно возрастают.
  • для y = 0, если значение гипотезы больше или равно -1, потери равны 0. Если гипотеза лежит между -1 и 0 или положительна, потери положительны и линейно возрастают.

Мы видели, как выглядит потеря шарнира, а также видели стоимость одного учебного примера. Все, что нам нужно сделать сейчас, это объединить эти 2 уравнения и сформировать функцию стоимости для «m» обучающих примеров. Вот что мы получаем:

Подожди секунду ... Откуда взялись все эти лишние буквы ??

Регуляризация

В приведенном выше уравнении «C» называется параметром регуляризации. Это гиперпараметр, который контролирует степень регуляризации. Однако есть небольшое отличие в регуляризации в SVM от регуляризации, которую можно увидеть в логистической регрессии или линейной регрессии. Возьмем пример логистической регрессии, функция затрат имеет следующий вид:

Здесь B - это термин регуляризации (L2 или L1), а A - термин стоимости или, как некоторые люди называют его, термин соответствия. В логистической регрессии путем изменения значения «лямбда», который является нашим параметром регуляризации, мы, по сути, сообщаем алгоритму оптимизации количество внимания, которое он должен уделить термину регуляризации, и именно так мы контролируем смещение / компромисс между отклонениями. Но стоимость SVM выглядит примерно так:

Теперь и здесь A - это член соответствия, а B - член регуляризации, однако параметр регуляризации связан с членом соответствия. Итак, теперь, варьируя значение нашего параметра регуляризации, мы сообщаем алгоритму оптимизации, сколько внимания следует уделить подходящему термину или сколько внимания НЕ уделять термину регуляризации. . Интуитивно понятно, что C и лямбда обратно связаны.

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

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

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

Трюк с ядром

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

Как видите, в уравнениях не так много изменений. Вместо X в гипотезе есть буква «f», которая представляет собой матрицу новых функций. Мы получаем значения этих функций из функции, и эту функцию мы называем ядром. Теперь в нашей стоимости «y hat» представляет эту недавно сформулированную гипотезу.

Теперь давайте разберемся, как рассчитываются эти функции. Скажем, у нас есть набор данных с двумя функциями, и мы визуализируем один обучающий пример ниже, здесь l1, l2 и l3 - это некоторые ориентиры, которые мы выбираем, не беспокойтесь о том, каковы их значения на данный момент.

Наши ядра являются функцией X с этими ориентирами. Используя эти функции, мы вычисляем новые функции для нашей модели. Итак, для каждого ориентира у нас будет одна особенность:

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

Вот как выглядели бы наши функции, если бы мы использовали гауссовские ядра:

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

Если мы предположим, что X почти равно l1 (расстояние между ними почти 0), то ядро ​​Гаусса выдает значение, близкое к 1.

Другой случай может заключаться в том, что если X находится очень далеко от точки, скажем, l1, тогда ядро ​​выдаст значение, близкое к 0.

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

Здесь X1 очень близко к l1, также близко к l2 и относительно далеко от l3, поэтому у нас более высокие значения для f1 и f2, но f3 имеет очень низкое значение. (Я принял эти значения только для объяснения). Подключив его к нашей гипотезе, мы получим положительное значение и предсказываем, что X1 равно 1.

С другой стороны, X2 ближе к l3 и далеко от l1 и l2. Таким образом, значения f1 и f2 будут очень маленькими, а f3 - больше. Подстановка значений дает нам отрицательную гипотезу, и, следовательно, мы прогнозируем X2 как 0.

Из этого мы можем видеть, что точки, которые лежат ближе к l1 и l2, прогнозируются как 1, а точки ближе к l3 прогнозируются как 0, так что это приблизительная граница решения, которую мы получающий.

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

Ответ на этот вопрос очень прост, каждый ориентир соответствует каждой из наших точек данных. Это означает, что для набора данных с «m» обучающими примерами у нас будет «m» ориентиров, и, следовательно, мы будем вычислять «m» новых функций.

Итак, для набора данных с примерами «m» мы вычислим характеристики «m». Таким образом мы вычисляем характеристики для всех наших точек данных. Здесь следует отметить, что для i-й точки данных i-е значение функции всегда будет равно 1 (с использованием ядра Гаусса).

Компромисс смещения / дисперсии

Мы уже обсуждали, как изменяется граница принятия решения, когда мы меняем C. Если C велико, то есть высокая дисперсия и низкая систематическая ошибка, а если C мало, то есть высокая систематическая ошибка и низкая дисперсия.

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

Здесь l (i) - i-й ориентир, мы видим, что если σ большое (зеленая линия), то гауссово ядро ​​очень плавно изменяется от одного обучающего примера к другому, независимо от того, какое значение имеет наш обучающий пример или наш ориентир. если σ очень велико, то изменение будет минимальным, и, следовательно, наша модель не будет соответствовать данным. У нас будет высокая систематическая ошибка и низкая дисперсия.

Теперь для небольшого значения σ (красная линия) изменение гауссова ядра будет резким от одного обучающего примера к другому, и, следовательно, это даст нам переобученную модель. У нас будет высокая дисперсия и низкий уровень смещения. Таким образом, при увеличении σ смещение увеличивается, а при уменьшении σ увеличивается дисперсия.

Оптимизация

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

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

Надеюсь, вы нашли этот пост полезным и легким для понимания, пожалуйста, оставьте ценный отзыв в разделе комментариев :)

использованная литература

CS229 Лекционные заметки Эндрю Нг

Видео лекций Эндрю Нг