SVM находит подходящую гиперплоскость. Как? Давайте рассмотрим это.

Машина опорных векторов или SVM — один из самых популярных алгоритмов обучения с учителем, который используется как для задач классификации, так и для задач регрессии. Однако в первую очередь он используется для задач классификации в машинном обучении. Здесь мы рассмотрим SVM как алгоритм классификатора.

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

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

Итак, вы работаете над задачей классификации текста. Вы уточняете свои тренировочные данные и, возможно, даже пробовали что-то с помощью Наивного Байеса. Но теперь вы уверены в своем наборе данных и хотите сделать еще один шаг вперед. Введите машины опорных векторов (SVM): быстрый и надежный алгоритм классификации, который очень хорошо работает с ограниченным объемом данных.

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

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

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

Гиперплоскость

Гиперплоскости — это границы решений, которые помогают классифицировать точки данных. Точки данных, попадающие по обе стороны от гиперплоскости, можно отнести к разным классам. Кроме того, размер гиперплоскости зависит от количества функций. Если количество входных объектов равно 2, то гиперплоскость — это просто линия. Если число входных признаков равно 3, то гиперплоскость становится двумерной плоскостью. Трудно представить, когда количество признаков превышает 3.

Векторы поддержки

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

Допуск

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

ЦЕЛЬ алгоритма SVM состоит в том, чтобы создать наилучшую линию или границу решения (гиперплоскость), которая может разделить n-мерное пространство на классы, чтобы мы могли легко поместить новые данные указать в правильной категории в будущем.

Давайте рассмотрим возможные гиперплоскости:

РИС-1 VS РИС-2 — Какой самолет лучше? Посмотрите на приведенный выше сценарий самолета и попытайтесь определить лучшую фигуру. Здесь максимизация расстояний (известных как Margin) между ближайшей точкой данных (любого класса) и гиперплоскостью поможет нам выбрать правильную гиперплоскость.

Чтобы максимизировать маржу, нам нужно минимизировать функцию потерь.

Стоимость равна 0, если прогнозируемое значение и фактическое значение имеют один и тот же знак. Если это не так, мы вычисляем стоимость убытка. Мы также добавляем параметр регуляризации в функцию стоимости. Цель параметра регуляризации — сбалансировать максимизацию маржи и потери.

На рис. 2 вы можете видеть, что запас для гиперплоскости C высок по сравнению с A и B. Следовательно, мы называем правую гиперплоскость как C. Еще одна молниеносная причина для выбора гиперплоскости с более высоким значением. запас прочности. Если мы выберем гиперплоскость с низким запасом, то высока вероятность неправильной классификации.

Давайте рассмотрим другой сценарий:

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

Уловка ядра

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

Код Python для SVM

#Import Library
from sklearn import svm
import pandas as pd
from sklearn.metrics import accuracy_score
#import warnings
warnings.filterwarnings(‘ignore’)
# Create Linear SVM object
support = svm.LinearSVC(random_state=20)
# Train the model using the training sets and check score on test dataset
support.fit(train_x, train_y)
predicted= support.predict(test_x)
score=accuracy_score(test_y,predicted)

Как настроить параметры SVM?

Настройка гиперпараметров SVM с помощью GridSearchCV

GridSearchCV берет словарь, описывающий параметры, которые можно попробовать на модели для ее обучения. Сетка параметров определяется как словарь, где ключи — это параметры, а значения — это тестируемые настройки.

from sklearn.model_selection import GridSearchCV
# defining parameter range 
# you can also try adding more values to this for better performance
param_grid = {'C': [0.1, 1, 10, 100, 1000],
'gamma': [1, 0.1, 0.01, 0.001, 0.0001],
'kernel': ['rbf']}
grid = GridSearchCV(SVC(), param_grid, refit = True, verbose = 3)
# fitting the model for grid search
grid.fit(X_train, y_train)

Плюсы:

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

Минусы:

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

Перекрестная проверка полезна для проверки того, обобщает ли модель данные или нет. В k-кратном методе перекрестной проверки все записи в исходном наборе обучающих данных используются как для обучения, так и для проверки. Кроме того, каждая запись используется для проверки только один раз.

Заключение

Я надеюсь, что эта запись в блоге помогла понять SVM. Прокомментируйте свои мысли, отзывы или предложения, если они есть ниже. До свидания. Хорошего дня.