Введение в машину опорных векторов

В серии «Машинное обучение», после множества статей, в этой статье мы подробно узнаем об алгоритме опорных векторов. В большинстве задач, с которыми справляются модели машинного обучения, таких как классификация изображений, обработка больших объемов данных и прогнозирование будущих значений на основе текущих значений, мы можем выбирать различные алгоритмы, соответствующие задаче, которую мы пытаемся решить. Но знаете ли вы, что в машинном обучении есть алгоритм, который будет обрабатывать любые данные, которые вы ему подбросите? Интересно правда? Прежде чем приступить к работе с алгоритмом, ознакомьтесь с другими алгоритмами машинного обучения.

Что такое машина опорных векторов (SVM)?

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

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

Важные термины в методе опорных векторов

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

  • Гиперплоскость — это плоскость принятия решений или пространство, которое разделено между набором объектов разных классов.
  • Опорные векторы. Точки данных, которые находятся ближе всего к гиперплоскости, называются опорными векторами. Разделительная линия будет определена с помощью этих точек данных.
  • Ядро. Ядро — это функция, используемая в SVM для помощи в решении проблем. Они обеспечивают ярлыки, чтобы избежать сложных вычислений.
  • Поля — может быть определена как разрыв между двумя строками в ближайших точках данных разных классов. Большая маржа считается хорошей маржей, а маленькая маржа считается плохой маржей.

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

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

Что делает линейный алгоритм SVM лучше, чем некоторые другие алгоритмы, такие как k-ближайшие соседи, так это то, что он выбирает лучшую линию для классификации точек данных. Алгоритм выбирает линию, которая разделяет данные и находится как можно дальше от ближайших точек данных. Если мы выберем гиперплоскость с низким запасом, то высока вероятность неправильной классификации.

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

Пример машины опорных векторов

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

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

Из примера изображения мы можем получить представление о работе модели SVM. Модель классифицирует новые входные данные как яблоко с помощью признаков, которые она поняла с помощью обучающих выборок.

Типы опорных векторов

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

Линейный метод опорных векторов

Линейный SVM используется в случае линейно разделимых данных. Это означает, что если набор данных можно разделить на два класса с помощью прямой линии, то такие данные называются линейно разделимыми данными, и мы можем использовать линейный классификатор SVM. Формула линейного ядра, как показано ниже, говорит, что произведение двух векторов является суммой произведения каждой пары входных значений.

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

Нелинейный SVM

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

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

Ядро радиального базиса (RBF) — это функция ядра, которая используется для поиска нелинейного классификатора или линии регрессии. Ядро RBF, в основном используемое в классификации SVM, отображает входное пространство в пространство неопределенной размерности.

Итак, мы познакомились с процессом разделения двух классов с помощью гиперплоскости. Теперь вопрос в том, как мы можем определить правильную гиперплоскость? Что ж, ответ на этот вопрос — выбрать гиперплоскость, которая лучше разделяет две категории.

Из приведенного выше изображения мы можем понять основную разницу между линейным и нелинейным типами SVM.

Реализация машины опорных векторов в Python

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

1
2
3
4
5
6
#Importing the required libraries
import pandas as pd
import numpy as np
from sklearn import svm, datasets
from sklearn.svm import SVC
import matplotlib.pyplot as plt

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

1
2
3
4
5
6
7
8
9
10
11
12
13
#Loading the iris dataset
data = datasets.load_iris()
#Independent and dependent variables
X = data.data[:, :2]
Y = data.target
# Create a mesh to plot
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
X_plot = np.c_[xx.ravel(), yy.ravel()]

Давайте укажем значение параметра регуляризации и создадим объект классификатора SVM для линейного ядра.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#SVM regularization parameter
C=1.0
#Creating SVM classifier object for the linear kernel
svc_classifier = svm.SVC(kernel='linear', C=C).fit(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
#Plotting the data
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap=plt.cm.tab10, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with linear kernel')

Выход

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#SVM Regularization parameter
C=1.0
#Creating SVM classifier object for the rbf kernel
svc_classifier = svm.SVC(kernel = 'rbf', gamma ='auto',C = C).fit(X, Y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
#Plotting the data
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap = plt.cm.tab10, alpha = 0.3)
plt.scatter(X[:, 0], X[:, 1], c = y, cmap = plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with rbf kernel')

Выход

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

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

Недостатки SVM

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

Заключение

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