Еще один полезный инструмент для вас!

Введение

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

II. СВМ Интуиция

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

Существует 2 основных типа SVM:

  • Линейная SVM

Линейный классификатор SVM используется для работы с линейно разделимыми данными.

  • Нелинейная SVM (SVM ядра)

Нелинейный (или ядерный) классификатор SVM используется для работы с нелинейно разделяемыми данными.

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

  1. Линейное ядро. Линейное ядро — это простейшая функция ядра. Он вычисляет скалярное произведение входных объектов, что эквивалентно линейному SVM. Линейное ядро ​​используется, когда данные линейно разделимы.
from sklearn.svm import SVC
clf = SVC(kernel='linear', C=1)

2. Полиномиальное ядро: Полиномиальное ядро ​​используется для определения нелинейных связей между входными объектами. Он вычисляет скалярное произведение входных объектов, возведенных в указанную степень.

from sklearn.svm import SVC
clf = SVC(kernel='poly', degree=2, coef0=1, C=1, gamma='auto')

3. Ядро сигмоиды: оно вычисляет скалярное произведение входных объектов после применения сигмовидной функции к входным объектам.

from sklearn.svm import SVC
clf = SVC(kernel='sigmoid', gamma=1, coef0=1, C=1)

4. Гауссова радиальная базисная функция (RBF):Ядро RBF является наиболее широко используемой концепцией ядра для решения проблемы классификации наборов данных, которые не могут быть разделены линейно. Известно, что это ядро ​​имеет хорошую производительность при определенных параметрах, а результаты обучения имеют небольшое значение ошибки по сравнению с другими ядрами. Гауссово ядро ​​RBF имеет два параметра: гамма и сигма. Параметр гаммы имеет значение по умолчанию, которое составляет γ = 1/(2σ) ^ 2. Когда гамма высока, точки вокруг данных, скорее всего, будут учитываться при расчете. Параметр сигма используется для поиска оптимального значения для каждого набора данных.

from sklearn.svm import SVC
clf = SVC(kernel='rbf', C=1, gamma=1)

Алгоритм классификации SVM имеет два типа полей: жесткую маржу и мягкую маржу.

  • Жесткая маржа

Hard Margin не терпит неправильной классификации при поиске оптимальной гиперплоскости.

  • Мягкая маржа

Soft Margin имеет определенную степень допуска в алгоритме SVM. Таким образом, мы позволяем модели добровольно неправильно классифицировать несколько точек данных, если это может привести к выявлению гиперплоскости, способной лучше обобщать невидимые данные. Soft Margin SVM можно реализовать в Scikit-Learn, добавив штрафной термин C в [svm.SVC]. Чем больше C, тем больший штраф получает алгоритм за неправильную классификацию.

III. Обработка многоклассовой классификации

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

Метод Один против всех — это способ выполнения многоклассовой классификации путем обучения нескольких двоичных классификаторов, при этом каждый классификатор обучается отделять один класс от всех других классов. Его можно реализовать с помощью SVM с помощью Scikit-Learn.

from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.multiclass import OneVsRestClassifier

# create a synthetic data set
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=4, random_state=42)

# fit the model using the One-vs-All method
model = OneVsRestClassifier(SVC(kernel='linear', C=1, random_state=42))
model.fit(X, y)

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

from sklearn.multiclass import OneVsOneClassifier

# fit the model using the One-vs-One method
model = OneVsOneClassifier(SVC(kernel='linear', C=1, random_state=42))
model.fit(X, y)

IV. Заключение

Машина опорных векторов — это мощный алгоритм контролируемого обучения, используемый в основном для классификации. SVM можно напрямую реализовать с помощью библиотеки Scikit-Learn и воспользоваться новым полезным инструментом в наборе инструментов Machine Learning Engineer.