SVM — один из самых простых и крутых алгоритмов машинного обучения. Для нелинейных задач это буквально соответствует поговорке «взгляд на проблему с разных точек зрения».

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



Если вспомнить наш школьный урок геометрии, мы изучали систему координат. Любая точка может быть представлена ​​в двух измерениях с двумя координатами x и y. Аналогично, для трех измерений это может быть представлено x, y и z.

Продолжая вышеописанную интуицию, мы можем построить n-мерную точку, используя значения n-мерностей для этой конкретной точки.

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

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

Рассмотрим пример проблемы классификации, представленный на изображении ниже:

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

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

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

Итак, как мы должны классифицировать?

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

А вот и трюк с ядром. Уловка настолько интуитивно понятна и умна, что позволяет нам представить себе изобретательность математиков и исследователей.

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

Теперь, когда у нас есть дополнительное измерение, можно легко увидеть плоскость принятия решений о разделении классов.

Смоделировать наши данные с помощью sklearn очень просто. Мы попытаемся классифицировать данные о раке молочной железы, которые можно импортировать непосредственно из sklearn. Полный код можно увидеть по адресу:



#importing data from sklearn
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
#converting data into pandas dataframe
canc_data = pd.DataFrame(data.data, columns=data.feature_names)
#adding target field to the dataset
canc_data['target'] = pd.Series(data.target)

#support vector classification model
from sklearn.svm import SVC
model_svclinear = SVC(kernel = "linear",
C=1,gamma='auto',probability=False).fit(X_train,y_train)


Как видно из приведенного выше кода, у нас есть четыре параметра, а именно: ядро, C, гамма и вероятность. Мы обсудим их, чтобы увидеть их важность.

kernel : используется для указания типа ядра, которое будет использоваться в алгоритме. По умолчанию принимает значение «rbf». Таким образом, мы можем выбрать ядро ​​в соответствии с нашим требованием, так как тип ядра будет определять трансформационное действие, которое будет предпринято для поиска плоскости границы решения.

C :это параметр регуляризации, т. е. он будет наказывать модель и поможет избежать переобучения. Сила регуляризации будет обратно пропорциональна C.

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

Узнайте больше о C и гамме в официальной документации sklearn:



вероятность Вероятность — интересный параметр. Это не влияет на эффективность модели как таковой, вместо этого используется для оценки вероятности. По умолчанию вероятность = «Ложь».

Для получения дополнительной информации о применении параметра вероятности:



Давайте проверим производительность с помощью метрик оценки.

В зависимости от требований мы можем выбрать тип ядра и другие значения гиперпараметров.

Ссылки:

  1. Рис. 4. Автор: marsroverdriver — первоначально опубликовано на Flickr как Лабиринт из живой изгороди в Traquair House, CC BY-SA 2.0, https://commons.wikimedia.org/w/index.php?curid=11774682.