[Предоставлено Raghu из Knoldus, Канада]

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

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

Один из самых простых способов создания SVM — использовать реализации SVM, доступные во многих популярных библиотеках машинного обучения для разных языков. LIBSVM, Scikit-learn и Spark ML — все это примеры доступных для использования реализаций SVM. В этой статье мы продемонстрируем простой способ построить SVM, обучить ее, а затем использовать с помощью scikit-learn с использованием Python.

В следующем листинге показан сеанс Python.

[язык кода = «питон»]

Python 2.7.11 | Anaconda 4.0.0 (64-разрядная версия) | (по умолчанию, 6 декабря 2015 г., 18:08:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7–1)] на linux2
Введите помощь, авторское право, кредиты. " или "лицензия" для получения дополнительной информации.
Anaconda предоставлена ​​вам Continuum Analytics.
Пожалуйста, проверьте: http://continuum.io/thanks и https://anaconda.org. »
›››
›››
›››
›››
››› from sklearn import svm
››› theSVM = svm .SVC()
››› X = [[0,0], [1,1]]
››› y = [0,1]
››› theSVM.fit (X,y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
solution_function_shape=None, Degree=3, gamma='auto', kernel='rbf' ,
max_iter=-1, Вероятность = Ложь, random_state = Нет, сжатие = Истина,
tol = 0,001, verbose = Ложь)
››› theSVM.predict([[.3, .3]])
array([0])
››› theSVM.predict([[.6,.6]])
array([1])
›››

[/код]

В приведенном выше сеансе Python мы создали классификатор, использующий SVM. Как видно из приведенного ниже вывода, тип используемого ядра — RBF. Ядро RBF принимает гамму в качестве параметра. В этом случае гамма устанавливается автоматически. Нам нужно указать значение C, которое является еще одним гиперпараметром, который по умолчанию установлен на 1,0.

SVC(C=1.0, cache_size=200, class_weight=Нет, coef0=0.0,
раствор_функции_формы=Нет, степень=3, гамма='авто', ядро='rbf',
max_iter=-1 , вероятность = ложь, random_state = нет, сжатие = истина,
tol = 0,001, подробное описание = ложь)

У нас есть входы с 2 измерениями. В этом случае у нас есть 2 примера [0,0] и [1,1], и значения y для этих входных данных равны 0 и 1. В этом случае SVM выдаст границу решения, которая представляет собой линию с [0,0] и [1,1] с обеих сторон. И теперь мы можем использовать эту SVM, присвоив ей X, и SVM классифицирует ее и распечатает вывод. Он классифицирует [.3,.3] как 0, а [.6,.6] как 1.

Наслаждаться!