Обзор
- Предварительные условия для SVM.
- Объяснение машины опорных векторов (SVM), популярного алгоритма машинного обучения или классификации.
- Как работает SVM?
- Реализация SVM на Python.
- Узнайте о плюсах и минусах машин опорных векторов (SVM) и их различных приложений.
- Заключение.
Предпосылки
- Логистическая регрессия.
- Градиентный спуск.
Что такое 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 и проанализировать мощность этой модели, настроив параметры.