Шаг 64.
Введение в машинное обучение с использованием Python. ... . Ядерный метод опорных векторов. Понимание принципов работы SVM

    На этом шаге мы рассмотрим принципы работы SVM.

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

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

    Расстояние между точками данных измеряется с помощью гауссовского ядра:

  krbf(x1, x2) = exp(-γ|| x1 - x2||2)

    Здесь x1 и x2 - точки данных, || x1 - x2|| обозначает евклидово расстояние, а γ (гамма) - параметр, который регулирует ширину гауссовского ядра.

    Рисунок 1 показывает результат обучения машины опорных векторов на двумерном 2-классовом наборе данных. Граница принятия решений показана черным цветом, а опорные векторы - это точки большего размера, обведенные широким контуром. Программный код строит этот график, обучая SVM на наборе данных forge:

[In 7]:
from sklearn.svm import SVC
X, y = mglearn.tools.make_handcrafted_dataset() 
svm = SVC(kernel='rbf', C=10, gamma=0.1).fit(X, y) 
mglearn.plots.plot_2d_separator(svm, X, eps=.5) 
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
# размещаем на графике опорные векторы 
sv = svm.support_vectors_
# метки классов опорных векторов определяются знаком дуальных коэффициентов 
sv_labels = svm.dual_coef_.ravel() > 0
mglearn.discrete_scatter(sv[:, 0], sv[:, 1], sv_labels, 
                         s=15, markeredgewidth=3)
plt.xlabel("Признак 0")
plt.ylabel("Признак 1")


Рис.1. Граница принятия решений и опорные векторы, найденные SVM с помощью ядра RBF

    В данном случае SVM дает очень гладкую и нелинейную (непрямую) границу. Здесь мы скорректировали параметр C и параметр gamma, которые сейчас подробно обсудим.

    На следующем шаге мы рассмотрим настройку параметров SVM.




Предыдущий шаг Содержание Следующий шаг