Сзв м как заполнить: сроки сдачи, заполнение, бланк новой формы и образец — Контур.Экстерн

Полное руководство по методу опорных векторов (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: Самая широкая дорога подход для разделения двух групп

Образцы на краю граничных линий (пунктирные) известны как « Опорные векторы». С левой стороны два таких образца (синие звезды), по сравнению с одним справа. Несколько важных моментов относительно опорных векторов:

  1. Опорные векторы — это выборки, которые труднее всего классифицировать.
  2. Они напрямую влияют на процесс поиска оптимального расположения границ решений (пунктирные линии).
  3. Только очень небольшое подмножество обучающих выборок (опорные векторы) может полностью определить решающую функцию (мы увидим это более подробно, когда изучим математику SVM).
  4. Если опорные векторы удалить из набора данных, это потенциально изменит положение разделительной линии (в случае пространства с размерностью выше 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 , мы получим из уравнения.