Введение в машинное обучение - страница 18





где ⟨w,s⟩ – скалярное произведение; w – нормальный (перпендикулярный) вектор к разделяющей гиперплоскости; b – вспомогательный параметр, который равен по модулю расстоянию от гиперплоскости до начала координат. Если параметр b равен нулю, гиперплоскость проходит через начало координат.

Объекты, для которых f(x) = 1, попадают в один класс, а объекты с f(x) = -1 – в другой.

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

В случае нелинейного разделения существует способ адаптации машины опорных векторов. Нужно вложить пространство признаков Rn в пространство H большей размерности с помощью отображения: φ = Rn → H. Тогда решение задачи сводится к линейно разделимому случаю, т.е. разделяющую классифицирующую функцию вновь ищут в виде: f(x)=sign(⟨w,ϕ(x)⟩+b).

Возможен и другой вариант преобразования данных – перевод в полярные координаты:



В общем случае машины опорных векторов строятся таким образом, чтобы минимизировать функцию стоимости вида:



где S>1 и S>0 – функции, заменяющие log(h) и log(1–h) в выражении для логистической регрессии (f2) (обычно это кусочно-линейные функции); f>k – функция ядра, выполняющая отображение φ и определяющая значимость объектов обучающего множества в пространстве признаков. Часто используется гауссова функция

, которая для любого x позволяет оценить его близость к x>(i) и тем самым формировать границы между классами, более близкие или более отдаленные от опорного объекта, устанавливая значение δ, С – регуляризационный параметр (C=1/λ).

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

Рассмотрим пример.

Подключение алгоритма и создание классификатора выполняются командами:


from sklearn.svm import SVC

clf = SVC(kernel = 'rbf', C=1)


Используем еще раз набор данных Fashion-MNIST. Скорость обучения и особенно классификации SVC значительно ниже, чем MLP, поэтому, как и в случае с KNeighborsClassifier, будем использовать только часть набора: 10 000 примеров для обучения и 2000 для тестирования. Обучение классификатора со стандартными параметрами:


from sklearn.svm import SVC

clf = SVC(kernel = 'rbf',C=1).fit(X_train, y_train)


В результате получим примерно следующие значения accuracy:

Accuracy of SVC classifier on training set: 0.83

Accuracy of SVC classifier on test set: 0.82


Отметим, что, применив поиск оптимальных параметров классификатора (см. далее раздел «Подбор параметров по сетке»), можно получить значение accuracy, близкое к 0.87.

Примечание. Ноутбук MLF_SVC_Fashion_MNIST_001.ipynb, реализующий упомянутый пример, можно загрузить по ссылке – https://www.dropbox.com/s/0p1i1dqk8wqwp5x/MLF_SVC_Fashion_MNIST_001.html?dl=0

Набор классификаторов scikit-learn включает кроме упомянутых алгоритмов еще и GaussianProcessClassifier, DecisionTreeClassifier, GaussianNB и др. Сравнение между собой классификаторов, имеющих стандартные параметры, описано в классическом примере [[61]], который можно рекомендовать как первую ступень в разработке программы выбора лучшего классификатора.