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

Определение

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

Общий принцип SVM

Как мы уже говорили ранее, SVM используется для задач классификации и регрессии, поэтому решение этих двух проблем осуществляется путем создания функции h, которая передается во входной вектор x соответствует результату y (мы называем последний Target Target): y = h (x)

Пример: мы ограничимся на данный момент проблемой различения только с двумя классами (двоичная дискриминация) [Class1, Class2], то есть {y = - 1 или y = 1}, входной вектор x находится в пространстве X со скалярным произведением.

Преимущества недостатки

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

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

Краткое объяснение

Представьте, что у нас есть набор данных из 6 точек, как показано ниже.

И, как вы видите, они линейно разделяются
Но проблема в том, что тысячи строк могут помочь

Все эти строки действительны и делают классификацию 1000000% правильной. Но разница в том, что эти строки действительны, но не оптимальны.

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

Проект

Набор данных для использования

В этой части мы начнем с двух типов задач для алгоритма SVM
1) Первая SVM для классификации: мы используем набор данных Реклама в социальных сетях. на kaggle вот ссылка на этот набор данных Social_Network_Ads

Набор данных состоит из 5 столбцов, известных как [Идентификатор пользователя, Пол, Возраст, Ориентировочная зарплата и Покупки] и 400 строки.

2) Второй SVM для регрессии: мы используем набор данных Position Salaries на kaggle. Вот ссылка на этот набор данных Position_Salaries

Набор данных состоит из 3 столбцов, известных как [Должность, уровень и зарплата] и 10 строки.

Достигнутый результат

Классификация
Визуализируйте и идентифицируйте каждый класс различных классов и проведите разделительную линию между каждым набором данных для тестирования.

Регрессия
Визуализируйте точки данных, нарисуйте линию регрессии и спрогнозируйте зарплату сотрудника на уровне 4,5 и 8,5

Шаги, которым нужно следовать

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

  • Импортируйте необходимые библиотеки
  • Импортируйте набор данных и определите данные и метки (матрица X и вектор Y)
  • Разделите данные на обучающие и тестовые наборы для данных и меток.
  • При необходимости настройте масштабирование функций
  • Создайте объект SVC для классификации из библиотеки SVM
  • Подобрать набор данных (обучающий набор)
  • Предсказать результат (набор тестов)
  • Оцените модель

Регрессия

  • Импортируйте необходимые библиотеки
  • Импортировать набор данных
  • При необходимости настройте масштабирование функций
  • Создайте объект SVR для регрессии из библиотеки SVM
  • Подобрать набор данных
  • Предсказать результат

Реализация алгоритмов (классификация)

Исходный код

Эта часть кода представляет этап предварительной обработки, этап масштабирования функций, за которым следует разделение данных на обучающие и тестовые наборы, после чего объявляется наша модель SVC для классификации из класса SVM, чтобы соответствовать и прогнозировать.
Как я упоминается в «Действиях»

Этот исходный код представляет собой код для отображения информации о точках данных, разделенных на два класса, а также линию разделения.

Результат

Мы собираемся визуализировать набор тестов для svc-объекта 2 kinf ok, используя ядра linear и non-linear.

Реализация алгоритмов (регрессия)

Исходный код

То же, что и предыдущая модель объявления SVR для регрессии из класса SVM, чтобы соответствовать и прогнозировать.
Как я уже упоминал в разделе «Действия, которые необходимо выполнить»

Результат

как вы можете видеть, распределение не близко к линейной проблеме, поэтому линейная модель не может справиться с этой проблемой (поскольку последний пункт прогноза слишком далек от реального значения, это называется недостаточным соответствием), мы должны упомянуть что SVM имеет несколько типов ядер ('linear', 'poly', 'rbf', 'sigmoid', 'precomputed')

Прогнозируемое значение 4,5 - 130101,64, а 8,5 - 303706,02.

So we replace regressor = SVR() with regressor = SVR(kernel='rbf')
and re-run the program

Прогнозы здесь: 115841,63 для 4,5 и 403162,82 для 8,5.

Заключение

Среди ограничений SVM:

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

Ресурсы

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