Это мой второй день в Gengwen Challenge
1. Линейная машина опорных векторов
Идея машины опорных векторов состоит в том, чтобы дать набор обучающих выборок, найдите разделенную гиперплоскость в демонстрационном пространстве, например, на следующем рисунке:
Но если вы сталкиваетесь с какими-то данными, то их не так просто разделить плоскостью, как показано ниже.Данные кольца:
На самом деле нелинейных данных по-прежнему много, и решение нелинейных задач намного сложнее, чем линейных задач, а затрачиваемые ресурсы будут увеличиваться в геометрической прогрессии, поэтому мы используемтрюк с ядром.
2. Функция ядра
Если исходное пространство конечномерно, то есть количество атрибутов ограничено, то должно существовать многомерное пространство признаков, делающее выборки разделимыми.1
Проще говоря, это отображение данных в многомерное пространство, чтобы отображение данных в этом многомерном пространстве было линейно разделимым. Текст может быть непростым для понимания, но если мы посмотрим на картинки, мы будем более интуитивными.
все еще как указано вышеДанные кольца, с использованиемФункция ядраРаспределение в трехмерном пространстве после отображения показано на следующем рисунке:
Карта RBF (гауссова) относительно начала координат (0, 0), рассчитанная с использованием scikit-learn, с кодом в конце.
Нетрудно заметить, что точки в этом трехмерном пространстве можно просто разделить плоскостью, чтобы избежать понимания нелинейных задач.
2.1 Радиальная базисная функция
Так называемая радиальная базисная функция представляет собой скалярную функцию, симметричную вдоль радиального направления. Обычно определяется как любая точка в пространствев центрМонотонная функция евклидова расстояния между .Чем дальше от центра, тем меньше значение функции.2
Общее ядро RBF также относится к ядру Гаусса, и его форма такова:
в- пропускная способность ядра Гаусса (фактически смысл аналогичен распределению Гаусса),первыйданные.
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, чтобы найти плоскость между данными, которая отличает два класса:
- «Машинное обучение» Чжоу Чжихуа, Глава 6. Машины опорных векторов, 6.3. Функции ядра↩
- Энциклопедия Байду,Функция ядра Гаусса↩