Функции ядра: как RBF позволяет линейным SVM классифицировать нелинейные данные?

машинное обучение

Это мой второй день в Gengwen Challenge

1. Линейная машина опорных векторов

Идея машины опорных векторов состоит в том, чтобы дать набор обучающих выборокDD, найдите разделенную гиперплоскость в демонстрационном пространстве, например, на следующем рисунке:在这里插入图片描述

Но если вы сталкиваетесь с какими-то данными, то их не так просто разделить плоскостью, как показано ниже.Данные кольца:

alt

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

2. Функция ядра

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

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

все еще как указано вышеДанные кольца, с использованиемФункция ядраРаспределение в трехмерном пространстве после отображения показано на следующем рисунке:

在这里插入图片描述

Карта RBF (гауссова) относительно начала координат (0, 0), рассчитанная с использованием scikit-learn, с кодом в конце.

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

2.1 Радиальная базисная функция

Так называемая радиальная базисная функция представляет собой скалярную функцию, симметричную вдоль радиального направления. Обычно определяется как любая точка в пространствеxxв центрxcx_cМонотонная функция евклидова расстояния между .xxЧем дальше от центра, тем меньше значение функции.2

Общее ядро ​​RBF также относится к ядру Гаусса, и его форма такова:

κ(xi,xj)=exp(xixj22о2)\kappa(\boldsymbol{x}_i,\boldsymbol{x}_j)=\mathrm{exp}\left(- \frac{\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2}{2\sigma^2}\right )

во>0\sigma \gt 0- пропускная способность ядра Гаусса (фактически смысл аналогичен распределению Гаусса),xi\boldsymbol{x}_iпервыйiiданные.

2.2 Вычисление функции ядра

Функцию ядра можно рассчитать с помощью sklearnsklearn.metrics.pairwise.rbf_kernelДля расчета: (конкретный код можно найти в моемGithubЗагрузите его, если это поможет вам, я надеюсь, что вы можете дать мне звезду. )

>>> from sklearn.metrics import pairwise

>>> # draw circles data
>>> X, y = make_circles(100, factor=.1, noise=.1)
>>> # calculate the rbf (gaussian) kernel between X and (0, 0)
>>> K = pairwise.rbf_kernel(X, np.array([[0, 0]]))
>>> print(K)
[[0.58581766]
 [0.74202632]
...
 [0.63660304]
 [0.98952965]]

Используя это преобразование, мы можем использовать SVM, чтобы найти плоскость между данными, которая отличает два класса:

在这里插入图片描述


  1. «Машинное обучение» Чжоу Чжихуа, Глава 6. Машины опорных векторов, 6.3. Функции ядра
  2. Энциклопедия Байду,Функция ядра Гаусса