Обзор

  • Предварительные условия для SVM.
  • Объяснение машины опорных векторов (SVM), популярного алгоритма машинного обучения или классификации.
  • Как работает SVM?
  • Реализация SVM на Python.
  • Узнайте о плюсах и минусах машин опорных векторов (SVM) и их различных приложений.
  • Заключение.

Предпосылки

  1. Логистическая регрессия.
  2. Градиентный спуск.

Что такое SVM:

«Surrort Vector Machine» (SVM) — это контролируемый алгоритм машинного обучения, который можно использовать как для задач классификации, так и для регрессии. Однако в основном он используется в задачах классификации. В алгоритме SVM мы изображаем каждый элемент данных как точку в n-мерном пространстве (где n — количество имеющихся у вас признаков), при этом значение каждого признака является значением конкретной координаты. Затем мы выполняем классификацию, находя гиперплоскость, которая очень хорошо различает два класса (посмотрите на снимок ниже).

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

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

  • Определите правую гиперплоскость (Сценарий-1):Здесь у нас есть три гиперплоскости (A, B и C). Теперь определите правильную гиперплоскость для классификации звезд и кругов.

  • Вам нужно запомнить эмпирическое правило для определения правильной гиперплоскости: «Выберите гиперплоскость, которая лучше разделяет два класса». В данном сценарии гиперсамолет «Б» отлично справился с этой задачей.
  • Определите правильную гиперплоскость (сценарий-2):здесь у нас есть три гиперплоскости (A, B и C), и все они хорошо разделяют классы. Теперь, как мы можем определить правильную гиперплоскость?

  • Здесь максимизация расстояний между ближайшей точкой данных (любого класса) и гиперплоскостью поможет нам выбрать правильную гиперплоскость. Это расстояние называется полем. Давайте посмотрим на снимок ниже:

  • Выше вы можете видеть, что запас для гиперплоскости C высок по сравнению с A и B. Следовательно, мы называем правую гиперплоскость C. Еще одна молниеносная причина для выбора гиперплоскости с более высоким запасом — надежность. Если мы выберем гиперплоскость с низким запасом, то высока вероятность неправильной классификации.
  • Определите правильную гиперплоскость (сценарий 3).Подсказка.Используйте правила, описанные в предыдущем разделе, чтобы определить правильную гиперплоскость.

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

  • Можем ли мы классифицировать два класса (Сценарий-4)?:Ниже я не могу разделить два класса с помощью прямой линии, так как одна из звезд лежит на территории другого (кругового) класса как аутсайдер.

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

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

  • SVM может решить эту проблему. Легко! Он решает эту проблему, вводя дополнительную функцию. Здесь мы добавим новую функцию z=x²+y². Теперь давайте нанесем точки данных на оси x и z:

  • На приведенном выше графике следует учитывать следующие моменты:
  • Все значения для z всегда будут положительными, потому что z является квадратом суммы как x, так и y.
  • На исходном графике красные кружки появляются близко к началу координат осей x и y, что приводит к более низкому значению z, а звезда находится относительно далеко от оригинала, что приводит к более высокому значению z.
  • В классификаторе SVM легко иметь линейную гиперплоскость между этими двумя классами. Но возникает еще один животрепещущий вопрос: нужно ли нам добавлять эту функцию вручную, чтобы иметь гиперплоскость. Нет, в алгоритме SVM есть метод, называемый трюком с ядром. Ядро SVM — это функция, которая берет входное пространство низкой размерности и преобразует его в пространство большей размерности, т. е. преобразует неразделимую проблему в разделимую проблему. Это в основном полезно в задачах нелинейного разделения. Проще говоря, он выполняет чрезвычайно сложные преобразования данных, а затем определяет процесс разделения данных на основе определенных вами меток или выходных данных.
  • Когда мы смотрим на гиперплоскость в исходном входном пространстве, она выглядит как круг:

Реализация SVM в Python

Набор данных:

После выполнения приведенного выше кода мы предварительно обработаем данные. Код даст набор данных как:

Масштабированный вывод для тестового набора будет:

Подгонка классификатора SVM к обучающему набору:

Теперь обучающая выборка будет приспособлена к классификатору SVM. Чтобы создать классификатор SVM, мы импортируем класс SVC из библиотеки Sklearn.SVM. Ниже приведен код для него:

В приведенном выше коде мы использовали kernel=’linear’, так как здесь мы создаем SVM для линейно разделимых данных. Однако мы можем изменить его для нелинейных данных. А затем мы подобрали классификатор к обучающему набору данных (x_train, y_train).

Вывод:

Out[8]: 
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
    kernel='linear', max_iter=-1, probability=False, random_state=0,
    shrinking=True, tol=0.001, verbose=False)

Производительность модели можно изменить, изменив значение C (коэффициент регуляризации), гамму и ядро.

  • Прогнозирование результатов тестового набора.
    Теперь мы будем прогнозировать выходные данные тестового набора. Для этого мы создадим новый вектор y_pred. Ниже приведен код для него:

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

Выходные данные. Ниже приведены выходные данные для прогноза тестового набора:

  • Создание матрицы путаницы:
    Теперь мы увидим производительность классификатора SVM, а именно количество неверных прогнозов по сравнению с классификатором логистической регрессии. Чтобы создать матрицу путаницы, нам нужно импортировать функцию confusion_matrix из библиотеки sklearn. После импорта функции мы будем вызывать ее, используя новую переменную cm. Функция принимает два параметра, в основном y_true (фактические значения) и y_pred (целевое значение, возвращаемое классификатором). Ниже приведен код для него:

Вывод:

Как мы видим на выходном изображении выше, есть 66 + 24 = 90 правильных прогнозов и 8 + 2 = 10 правильных прогнозов. Поэтому мы можем сказать, что наша модель SVM улучшилась по сравнению с моделью логистической регрессии.

  • Визуализация результата тренировочного набора:
    Теперь мы визуализируем результат тренировочного набора, ниже приведен его код:

Вывод:

Выполнив приведенный выше код, мы получим вывод в виде:

Как мы видим, приведенный выше вывод похож на вывод логистической регрессии. На выходе мы получили прямую линию как гиперплоскость, потому что мы использовали линейное ядро ​​в классификаторе. И мы также обсуждали выше, что для двумерного пространства гиперплоскость в SVM является прямой линией.

  • Визуализация результатов набора тестов:

Вывод:

Выполнив приведенный выше код, мы получим вывод в виде:

Как мы видим на приведенном выше выходном изображении, классификатор SVM разделил пользователей на две области (Купленные или Не купленные). Пользователи, купившие внедорожник, находятся в красной области с красными точками разброса. А пользователи, которые не приобрели внедорожник, находятся в зеленой области с зелеными точками разброса. Гиперплоскость разделила два класса на купленные и не купленные переменные.

Плюсы и минусы, связанные с SVM

Плюсы:

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

Минусы:

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

Заключение

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