Машины опорных векторов

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

https://colab.research.google.com/drive/1bdT5U1vRbWnu1FxsOqu8TnUZFFNGyaQO?usp=sharing

https://colab.research.google.com/drive/1a3BxoT_EX3zu4-s5VMRw0YGIXw6QCMFH?usp=sharin

Учитывая произвольный набор данных, вы обычно не знаете, какое ядро ​​может работать лучше всего. Я рекомендую сначала начать с простейшего пространства гипотез — учитывая, что вы мало что знаете о своих данных — и продвигаться к более сложным пространствам гипотез. Таким образом, линейное ядро ​​отлично работает, если ваш набор данных линейно разделим; однако, если ваш набор данных не является линейно разделимым, линейное ядро ​​не сможет его сократить (почти в буквальном смысле ;)).

Это прекрасно работает. А вот и SVM ядра RBF:

КОГДА НЕ ИСПОЛЬЗОВАТЬ ЯДРО RBF:

Линейная SVM — это параметрическая модель, а SVM с ядром RBF — нет, и сложность последней растет с увеличением размера обучающей выборки. Мало того, что обучение SVM ядра RBF обходится дороже, вы также должны поддерживать матрицу ядра, а проекция в это «бесконечное» многомерное пространство, где данные становятся линейно разделимыми, также обходится дороже во время прогнозирования. Кроме того, у вас есть больше гиперпараметров для настройки, поэтому выбор модели также обходится дороже! И, наконец, сложную модель намного проще переобучить!

НО ЛИНЕЙНОЕ ЯДРО РАБОТАЕТ ТОЛЬКО НА ЛИНЕЙНО РАЗДЕЛИМЫХ ДАННЫХ:

КАК В ЭТОМ СЛУЧАЕ ДАННЫЕ НЕ ЛИНЕЙНО РАЗДЕЛЯЕМЫ, И ИСПОЛЬЗОВАНИЕ ЛИНЕЙНОГО ЯДРА ДЕЛАЕТ ГРУППУ

В этом случае ядро ​​RBF имело бы гораздо больше смысла:

На практике это менее полезно по соображениям эффективности (как вычислительной, так и прогнозной). Итак, эмпирическое правило: используйте линейные SVM (или логистическую регрессию) для линейных задач и нелинейные ядра, такие как ядро ​​радиальной базисной функции, для нелинейных задач.

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

Полиномиальное ядро

Думайте о полиномиальном ядре как о преобразователе/процессоре для создания новых функций путем применения полиномиальной комбинации всех существующих функций.

Существующая функция: X = np.array([-2,-1,0, 1,2])

Ярлык: Y = np.array([1,1,0,1,1])

мы не можем найти линию, разделяющую желтую (1) и фиолетовую (0) точки (показаны слева).

Но если применить преобразование X², чтобы получить:

Новая функция: X = np.array([4,1,0, 1,4])

Сочетая существующие и новые функции, мы, безусловно, можем провести линию, отделяющую желто-фиолетовые точки (показаны справа).

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

Ядро радиальной базисной функции (RBF)

Думайте о ядре Radial Basis Function как о преобразователе/процессоре для создания новых функций путем измерения расстояния между всеми остальными точками до определенной точки/точек — центров. Наиболее популярным/базовым ядром RBF является базисная функция Gaussian Radial:

Существующая функция: X = np.array([-2,-1,0, 1,2])

Метка: Y = np.array([1,1,0,1,1])

Опять же, мы не можем найти линию, разделяющую точки (слева).

Но если мы применим преобразование Гаусса RBF с использованием двух центров (-1,0) и (2,0), чтобы получить новые функции, мы сможем провести линию, чтобы разделить желто-фиолетовые точки (справа):

Новая функция 1: X_new1 = массив ([1.01, 1.00, 1.01, 1.04, 1.09])

Новая функция 2: X_new2 = массив ([1.09, 1.04, 1.01, 1.00, 1.01])