Все, что вам нужно знать о SVM. От теории к математике и программированию, оставив его простым, но эффективным

Соавтором этой статьи является Muhammad Hamza

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

1- Обзор

2- Введение

3- Как работает SVM

4- Опорные векторы и маржа

5- Линейный и нелинейный SVM

6- Жесткая и мягкая маржа в SVM

7- Ввод / вывод SVM

8- Гиперпараметры SVM

9- Преимущества SVM

10- Проблемы в SVM

11- Недостатки SVM

12- Заключение

Обзор

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

SVM расшифровывается как S upport V ector M achine. Это алгоритм классификации. Прежде чем идти дальше, давайте обсудим, что такое классификация

Классификация

Если мы подбрасываем монету, мы либо получаем хвост, либо голову, что означает, что есть только два возможных результата, или мы можем сказать, что есть два класса, к которым может принадлежать определенная сторона монеты. Классификация - это процесс классификации результатов любого события (например, подбрасывание монеты - это событие с двумя классами / исходами) по заранее определенным классам (например, «голова-хвост» в событии «подбрасывание монеты»).

Вступление:

SVM используется для классификации входных данных (подробнее о входных данных позже) в один из предопределенных классов (например, «Да / Нет» или «Голова / Хвост»).

Если SVM используется для классификации двух классов, таких как голова / хвост, тогда таким классификатором является двоичный классификатор, в противном случае он становится многоклассовым классификатором.

SVM - это как двоичный, так и мультиклассовый классификатор

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

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

Ясно, что это проблема классификации, и нам нужен алгоритм машинного обучения, который может решить проблему классификации.

Как известно, SVM - один из лучших алгоритмов классификации. Итак, давайте углубимся в SVM.

Как работает SVM

Первое, что мы хотели бы сделать с данными, - это посмотреть на них, построив график, чтобы иметь общее представление о данных, которые нам доступны.

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

Наша задача SVM - провести границу между этими классами (Да / Нет) таким образом, чтобы эти классы не смешивались друг с другом. Между этими двумя пулами кругов (или этими двумя классами) могут быть бесконечные линии. Ниже показаны две возможные линии:

Мы видим, что обе линии отделяют эти классы друг от друга, и смешивание классов по обе стороны линии отсутствует.

Линия рисования (чтобы отделить классы друг от друга) - это вся идея SVM.

Линия, проведенная SVM для разделения классов, называется гиперплоскостью. На рисунке выше у нас есть две гиперплоскости. Итак, какой выбрать?

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

Или мы можем сказать, что SVM выбирает гиперплоскость, которая имеет максимальное расстояние от окружностей (или точек) с обеих сторон. Но на рисунке много точек, которые следует учитывать при расчете расстояния. Что ж, SVM рассматривает ближайшие точки к гиперплоскости, как показано на рисунке ниже:

Опорные векторы и маржа в SVM

Видно, что эта гиперплоскость имеет максимальное расстояние от ближайших точек с обеих сторон. Это точки, которые помогают выбрать оптимальную гиперплоскость, потому что только они являются ближайшими точками. Следовательно, эти ближайшие точки (две точки в заштрихованной области на рисунке выше) являются теми, которые поддерживают оптимальную гиперплоскость, и именно по этой причине эти точки называются опорными векторами. Расстояние между опорными векторами называется запасом.

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

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

Линейный и нелинейный SVM

Линейный SVM

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

Нелинейная SVM

Но в реальной жизни данные не всегда линейно разделимы. В таких случаях SVM не будет рисовать прямую линию между классами, скорее это может быть изогнутая линия, как показано ниже. (Обратите внимание, что сейчас мы говорим о нелинейной SVM)

В этом случае мы не можем полностью разделить два класса. Есть две возможности:

Либо мы рисуем какую-нибудь изогнутую линию, чтобы полностью разделить классы

→ Или мы допускаем некоторые ошибки (неправильные классификации) и разделяем их линейно

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

Жесткая и мягкая маржа в SVM

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

Ввод / вывод SVM:

SVM всегда ожидает числовой ввод и возвращает числовой вывод. Поскольку это контролируемый алгоритм, наряду с входными данными ему также нужны метки. Образец входов (X1, X2) вместе с метками (Y) показан ниже.

Гиперпараметры SVM

Гиперпараметры используются для настройки алгоритма с целью повышения его точности. У каждого машинного алгоритма есть определенные гиперпараметры.

SVM тоже имеет несколько гиперпараметров. Обсудим некоторые из них.

Гиперпараметр C (константа мягкой маржи)

В последнем случае, допуская некоторую ошибку (или ошибочную классификацию), мы контролируем количество ошибок с помощью параметра, называемого «C». это может быть любое значение, например 0,01 или даже 100 или более. Это зависит от типа проблемы и имеющихся данных.

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

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

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

Гамма гиперпараметра

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

Небольшое значение гаммы указывает на то, что точкам за пределами опорных векторов будет присвоен вес при вычислении запаса (или выборе гиперплоскости) и наоборот.

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

Уловка ядра в SVM

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

Некоторые из ядер - Линейные , Полиномиальные, Радиальные и т. Д.

Преимущества SVM

→ Может эффективно работать с небольшими данными

→ Может работать, когда ни одна из характеристик не превышает ни одного образца

→ Эффективен в пространствах большой размерности (трюк с ядром)

→ Эффективная память - использует подмножество обучающих данных (рассматриваются только векторы поддержки)

→ Может контролировать переобучение и недоподбор (с помощью гиперпараметра C)

Проблемы SVM

→ Выбор подходящего ядра и его параметров

→ Выбор между жесткой маркой / мягкой маржей

→ Выбор правильного значения C

Недостатки SVM

→ Не работает, когда у нас большой набор данных.

→ Чувствительность к зашумлённым данным (данные могут не совпадать)

Заключение

Мы надеемся, что теперь у вас есть общее представление о SVM и вы готовы продолжить чтение самостоятельно.

Математика и кодирование SVM будут обсуждаться в части 2 и части 3 (скоро будут доступны). Следуйте за нами, чтобы узнать о других алгоритмах машинного обучения.

Спасибо