Содержание
Полное руководство по методу опорных векторов (SVM) | by Marco Peixeiro
Понять его внутреннюю работу и внедрить SVM в четырех различных сценариях
Что бы мы делали без sklearn?
Мы увидели, как подойти к проблеме классификации с помощью логистической регрессии, LDA и деревьев решений. Теперь для классификации вводится еще один инструмент: машина опорных векторов .
Машина опорных векторов является обобщением классификатора, называемого классификатором максимальной маржи . Классификатор максимальной маржи прост, но его нельзя применить к большинству наборов данных, поскольку классы должны быть разделены линейной границей.
Вот почему классификатор опорных векторов был введен как расширение классификатора максимальной маржи, которое можно применять в более широком диапазоне случаев.
Наконец, машина опорных векторов является просто дальнейшим расширением классификатора опорных векторов для учета нелинейных границ классов.
Может использоваться как для бинарной, так и для мультиклассовой классификации.
Объяснение теории SVM может быть очень техническим. Надеюсь, эта статья поможет вам понять, как работают SVM.
После изучения теории вы сможете реализовать алгоритм в четырех различных сценариях!
Без лишних слов, давайте приступим к делу.
Практические видеоуроки по машинному обучению, глубокому обучению и искусственному интеллекту можно найти на моем канале YouTube.
GIF-файлов SVM нет.. поэтому мне пришлось довольствоваться «машинным» gif-файлом
Этот метод основан на разделении классов с помощью гиперплоскости.
Что такое гиперплоскость?
В p -мерном пространстве гиперплоскость представляет собой плоское аффинное подпространство размерности p-1 . Визуально в 2D-пространстве гиперплоскость будет линией, а в 3D-пространстве — плоской плоскостью.
Математически гиперплоскость выглядит просто:
Общее уравнение гиперплоскости
Если X удовлетворяет приведенному выше уравнению, тогда точка лежит на плоскости. В противном случае он должен быть на одной стороне плоскости, как показано ниже.
Линия представляет собой гиперплоскость в двумерном пространстве. Точки, удовлетворяющие приведенному выше уравнению, будут лежать на прямой, а другие — по одну сторону от плоскости.
В общем случае, если данные можно идеально разделить с помощью гиперплоскости, то существует бесконечное количество гиперплоскостей, поскольку их можно сдвигать вверх или вниз или слегка поворачивать, не соприкасаясь с наблюдением.
Вот почему мы используем гиперплоскость максимального поля или оптимальную разделяющую гиперплоскость , которая является разделяющей гиперплоскостью, наиболее удаленной от наблюдений. Мы рассчитываем перпендикулярное расстояние от каждого тренировочного наблюдения с учетом гиперплоскости. Это известно как поле . Следовательно, оптимальной разделяющей гиперплоскостью является та, которая имеет наибольший запас.
Пример гиперплоскости с максимальным запасом
Как видно выше, есть три точки, равноудаленные от гиперплоскости. Эти наблюдения известны как поддерживают векторы , потому что, если их положение смещается, смещается и гиперплоскость. Интересно, что это означает, что гиперплоскость зависит только от опорных векторов, а не от каких-либо других наблюдений.
Что делать, если не существует разделяющей плоскости?
Перекрывающиеся классы, где не существует разделяющей гиперплоскости
В этом случае классификатор максимального поля отсутствует. Мы используем классификатор опорных векторов, который может почти разделять классы, используя мягкое поле , называемое классификатор опорных векторов. Однако дальнейшее обсуждение этого метода становится слишком техническим, и поскольку это не самый идеальный подход, мы пока пропустим эту тему.
Машина опорных векторов является расширением классификатора опорных векторов, полученным в результате расширения пространства признаков с использованием ядер . Подход ядра — это просто эффективный вычислительный подход для размещения нелинейной границы между классами.
Не вдаваясь в технические подробности, ядро — это функция, которая количественно определяет сходство двух наблюдений. Ядро может быть любой степени. Использование ядра со степенью больше единицы приводит к более гибкой границе решения, как показано ниже.
Пример классификации с SVM
Чтобы лучше понять, как выбор ядра может повлиять на алгоритм SVM, давайте реализуем его в четырех разных сценариях.
Этот проект разделен на четыре мини-проекта.
В первой части показано, как выполнять классификацию с помощью линейного ядра и как параметр регуляризации C влияет на результирующую гиперплоскость .
Затем во второй части будет показано, как работать с ядром Гаусса для создания нелинейной гиперплоскости.
Третья часть моделирует перекрывающиеся классы, и мы будем использовать перекрестную проверку , чтобы найти наилучшие параметры для SVM.
Наконец, мы выполняем очень простой классификатор спама с использованием SVM.
Приведенные выше упражнения взяты из курса Эндрю Нг, доступного бесплатно на Coursera. Я просто решаю их с помощью Python, чего инструктор не рекомендует. Тем не менее, я настоятельно рекомендую курс для всех начинающих.
Как всегда, записная книжка и данные доступны здесь.
Мини-проект 1 — SVM с линейным ядром
Прежде чем мы начнем, давайте импортируем несколько полезных библиотек:
Обратите внимание, что здесь мы импортируем loadmat , потому что наши данные представлены в матричной форме.
Затем мы сохраняем пути к нашим наборам данных в различных переменных:
Наконец, мы создадим функцию, которая поможет нам быстро построить каждый набор данных:
Отлично!
Теперь, в этой части, мы реализуем машину опорных векторов, используя линейное ядро, и увидим, как параметр регуляризации может повлиять на гиперплоскость.
Во-первых, давайте загрузим и визуализируем данные:
И вы должны увидеть:
Обратите внимание на наличие выброса слева на графике . Давайте посмотрим, как параметр регуляризации повлияет на гиперплоскость при наличии выброса.
Приведенный выше блок кода просто подбирает SVM к данным, и мы используем прогнозы для построения гиперплоскости. Обратите внимание, что мы используем параметр регуляризации, равный 1. Результат должен быть следующим:
Гиперплоскость с C=1
Как видите, гиперплоскость проигнорировала выброс. Следовательно, низкий параметр регуляризации будет равен , лучше обобщить . Ошибка теста обычно выше, чем ошибка перекрестной проверки.
Теперь давайте увеличим параметр регуляризации:
И вы получите:
Гиперплоскость с C=100
Теперь выброс находится на правой стороне гиперплоскости, но это также означает, что мы переобучаем. В конечном счете, эта граница не будет работать на ненаблюдаемых данных.
Мини-проект 2 — SVM с ядром Гаусса
Теперь мы знаем, что для учета нелинейных границ нам нужно изменить функцию ядра. В этом упражнении мы будем использовать ядро Gaussian .
Во-первых, давайте нанесем на график наши данные:
И вы должны увидеть:
Перед внедрением SVM вы должны знать, что ядро Гаусса выражается как: как быстро метрика подобия стремится к нулю, поскольку они дальше друг от друга.
Поэтому реализуем его следующим кодом:
И у вас должна получиться следующая гиперплоскость:
Нелинейная гиперплоскость с гауссовским ядром
Удивительно! Гиперплоскость не является идеальной границей, но она неплохо справляется с классификацией большинства данных. Я предлагаю вам попробовать разные значения сигма , чтобы увидеть, как это влияет на гиперплоскость.
Мини-проект 3 — SVM с перекрестной проверкой
Перекрестная проверка необходима для выбора наилучших параметров настройки для оптимальной производительности нашей модели. Давайте посмотрим, как это можно применить к SVM.
Конечно, давайте посмотрим, как выглядят данные для этого упражнения:
И вы получите:
Обратите внимание, что у нас есть перекрывающиеся классы. Конечно, наша гиперплоскость не будет идеальной, но мы будем использовать перекрестную проверку, чтобы убедиться, что это лучшее, что мы можем получить:
Из приведенной выше ячейки кода вы должны получить, что лучший параметр регуляризации равен 1, а сигма должна быть 0,1. Используя эти значения, мы можем сгенерировать гиперплоскость:
И получить:
Гиперплоскость с C=1 и sigma=0,1
Мини-проект 4 — Классификация спама с помощью SVM
Наконец, мы обучаем классификатор спама с помощью SVM. В этом случае мы будем использовать линейное ядро. Кроме того, у нас есть отдельные наборы данных для обучения и тестирования, что немного облегчит наш анализ.
И вы видите, что мы получаем обучающую точность 99,825%, а тестовую точность 98,9%!
Вот оно! Вы изучили внутреннюю работу машин опорных векторов и реализовали алгоритм в четырех разных мини-проектах, чтобы понять, как выбор ядра влияет на алгоритм и как работать с перекрестной проверкой.
Я надеюсь, что эта статья оказалась для вас полезной и вы вернетесь к ней всякий раз, когда захотите внедрить SVM.
Ура!
Машина опорных векторов: полная теория | by Saptashwa Bhattacharyya
Понимание серии SVM: Часть 1
В этом посте я познакомлю вас с классификатором Support Vector Machine. Этот пост будет частью серии, в которой я объясню работу машины опорных векторов (SVM), включая все необходимые мелкие детали и математику, стоящую за ней. Это будет легко, поверьте! Без промедления приступим —
Предположим, нам даны эти два образца голубых звезд и пурпурных сердец (просто для схематического представления, здесь не используются реальные данные), и наша задача — найти линию, которая лучше всего их разделяет. Что мы подразумеваем под лучшим здесь?
Рисунок 1: Образцы в 2D-плоскости с некоторым разделением между ними
Давайте посмотрим на изображение ниже. Сможете ли вы угадать, какая линия лучше разделит два образца?
Рисунок 2: Линии (гиперплоскости?), которые потенциально могут разделить две выборки
Да, красная линия слева лучше, чем оранжевая, потому что мы говорим, что красная линия создает « самая широкая дорога’ (граница) между двумя группами. См. изображение ниже
Рисунок 3: Самая широкая дорога подход для разделения двух групп
Образцы на краю граничных линий (пунктирные) известны как « Опорные векторы». С левой стороны два таких образца (синие звезды), по сравнению с одним справа. Несколько важных моментов относительно опорных векторов:
- Опорные векторы — это выборки, которые труднее всего классифицировать.
- Они напрямую влияют на процесс поиска оптимального расположения границ решений (пунктирные линии).
- Только очень небольшое подмножество обучающих выборок (опорные векторы) может полностью определить решающую функцию (мы увидим это более подробно, когда изучим математику SVM).
- Если опорные векторы удалить из набора данных, это потенциально изменит положение разделительной линии (в случае пространства с размерностью выше 2 линия называется гиперплоскостью).
Мы зашли достаточно далеко, чтобы понять, что это проблема оптимизации с ограничениями. Оптимизация — потому что нам нужно найти линию, от которой опорные векторы максимально отделены и Ограничения — потому что опорные векторы должны быть в стороне от дороги и не на дороге. Для решения этой задачи мы будем использовать множители Лагранжа , поэтому начнем с очень простого примера использования множителя Лагранжа.
Множители Лагранжа: когда и как использовать
Предположим, что нам дана функция f(x,y,z,…) , для которой мы хотим найти экстремумы при соблюдении условия g(x,y,z, …)=к. Идея, используемая в множителе Лагранжа, заключается в том, что градиент целевой функции f выстраивается параллельно или антипараллельно градиенту ограничения g в оптимальной точке. В таком случае один градиент должен быть несколько кратен другому. Давайте посмотрим на примере —
С помощью множителя Лагранжа решаем ее следующим образом
Итак, мы нашли максимальное и минимальное значения функции и видим, что она имеет единственный минимум, два максимума и седловую точку . Если мы построим эти функции f и g, , то мы еще лучше поймем концепцию множителя Лагранжа.
Рисунок 4: Визуализация метода множителей Лагранжа
Из приведенного выше рисунка ясно видно, что экстремумы ограниченной функции f лежат на поверхности ограничения g, , который представляет собой круг единичного радиуса. Это необходимое условие. Также касательные векторы функции и ограничения либо параллельны, либо антипараллельны в каждом экстремуме. Код, используемый для этого графика, можно найти на моем github.
Теперь мы готовы углубиться в математику SVM и успешно применить эту технику.
Математика машины опорных векторов:
Если вы забыли условие задачи, напомню еще раз. На рисунке 1 мы должны найти линию, которая лучше всего разделяет два образца. Мы рассматриваем вектор (W), перпендикулярный средней линии (красная линия), и неизвестную выборку, которую можно представить вектором х.
Рисунок 5: Определить, с какой стороны дороги лежит новый образец X срединная линия, которая равна w . Если эта проекция больше некоторого числа (называемого смещением), то мы говорим, что неизвестная выборка X находится с правой стороны линии. Обычно его называют правилом принятия решений . Подставим это в уравнение
Мы ничего конкретно не знаем о числе b на данный момент . Мы также ничего не знаем о w , за исключением того, что это перпендикуляр к срединной линии. Чтобы определить w и b , мы теперь рассматриваем известные выборки и настаиваем на условиях ниже ) больше или равно 1. Для выборок на граничной линии (опорные векторы) соблюдается знак равенства. Далее наша цель состоит в том, чтобы иметь одно уравнение вместо двух, и для этого давайте введем переменную, которая положительна для выборок справа и отрицательна для выборок слева.
С введением этой новой переменной мы умножим L.H.S. обоих условных уравнений (уравнение 1.5), и мы получаем
Еще одно условие, которое мы наложим здесь (довольно интуитивно), состоит в том, что для выборок на желобе («Опорные векторы») LHS будет точно равен нулю.
Поскольку наша главная цель — найти самую широкую дорогу между образцами, теперь мы приступим к определению расстояния между двумя параллельными линиями (или ширины дороги).
Для этого мы сначала выбираем любые два опорных вектора с каждой стороны и вычисляем разностный вектор
Рисунок 6: Разность двух опорных векторов
Из рисунка выше вы можете понять, что ширина дороги будет скалярным произведением этого разностного вектора с единичным вектором, перпендикулярным дороге.
Но подождите! мы уже определили вектор, перпендикулярный лучшей прямой, т.е. ж. Итак, мы готовы сформулировать длину дороги как
Можем ли мы упростить это уравнение? Вернемся к ур. 1.8 и посмотрите, сможете ли вы что-нибудь придумать.
Использование экв. 1.8 и используя тот факт, что y является положительным для выборок справа и отрицательным для выборок слева, мы можем упростить уравнение 1.9 как
Поскольку мы хотим максимизировать ширину дороги, вся наша проблема прямо сейчас сводится к вплоть до очень важной информации —
, имея в виду ограничения, которые у нас были раньше, т. е. экв. 1.8.
Таким образом, вместо того, чтобы интуитивно, как мы делали раньше, теперь мы можем математически оценить, что поиск наилучшей линии действительно является задачей оптимизации с ограничениями .
Теперь мы готовы применить наше понимание метода Лагранжа.
Во-первых, будет несколько ограничений в зависимости от количества опорных векторов, поэтому член ограничения, содержащий множитель, будет равен
и лагранжиан, который мы хотим минимизировать, можно записать как
Расширяя выражение,
Теперь, прежде чем начать минимизацию, мы должны определить переменные относительно. по которому мы продифференцируем лагранжиан и приравняем его к нулю. Если вы помните постановку задачи и возвращаетесь к уравнению. 1.4., мы видим, что вектор w и смещение b являются независимыми переменными. Итак,
Скалярное дифференцирование, как обычно, но векторное дифференцирование здесь выполняется на скалярах, во-первых, по величине перпендикулярного вектора, а во-вторых, по скалярному произведению опорного вектора на вектор нормали. Более поздний термин для векторного дифференцирования легко решить и интуитивно понятен для первого члена, я хотел бы дать вам подсказку
Используя это, мы можем, наконец, записать результаты, как показано ниже:
Приведенные выше результаты наиболее важны в этом посте, где мы выяснили, что вектор нормали ( w ) представляет собой линейную комбинацию опорных векторов. Мы будем использовать эти условия, чтобы получить наши решающие правила, но давайте признаем, что мы сократили другую задачу в формулировке, а именно — из-за условий из уравнения. 1.16., теперь мы можем избавиться от w и b и заменить их только множителями Лагранжа. Таким образом, мы используем эти условия из уравнения. 1.16 и попытаться упростить уравнение. 1.13
Давайте еще немного сократим выражение
Наконец, мы дошли до конца поста и выяснили, что максимизация будет зависеть только от скалярного произведения пар опорных векторов. Как здорово!!!!
Еще один интересный результат может быть достигнут, если мы вернем w , мы получим из уравнения.