Объяснение и реализация SVM в Python

Машины опорных векторов (SVM) - это основной алгоритм, используемый специалистами по обработке данных. Его можно применять как для задач регрессии, так и для классификации, но чаще всего он используется для классификации. Его популярность объясняется высокой точностью и скоростью вычислений (в зависимости от размера данных) модели. Благодаря тому, что SVM работает через ядра, он также отлично подходит для решения нелинейных задач. Предпосылка, лежащая в основе работы SVM, довольно проста: с учетом данных, нанесенных на плоскость, этот алгоритм будет создавать линию / гиперплоскость для разделения данных на разные классы.

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

Содержание:

  • Что такое SVM
    - Векторы поддержки
    - Гиперплоскость
    - Маржа
  • Преимущества
  • Недостатки
  • Реализация
  • Заключение
  • Ресурсы

Что такое SVM

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

  • Опорные векторы - точки, наиболее близкие к гиперплоскости.
  • Гиперплоскость - подпространство, размерность которого на 1 меньше его окружающего пространства [1]. Он служит для разделения пространства на несколько частей.
    В трехмерном пространстве следующая гиперплоскость будет двухмерной. Точно так же в 2-мерной плоскости гиперплоскость будет 1-мерной линией.
  • Маржа - расстояние между гиперплоскостью и ближайшей точкой данных с обеих сторон [2]
  • Ядро - математическая функция, используемая для преобразования входных данных в другую форму. Общие функции ядра включают линейные, нелинейные, полиномиальные и т. Д.

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

Учитывая это изображение выше, вы можете представить, что существует множество способов идентифицировать гиперплоскость, которая может разделить точки данных, какая гиперплоскость будет лучшим выбором? Мы хотели бы выбрать гиперплоскость с наибольшим запасом между гиперплоскостью и всеми точками. Это даст наибольшую вероятность правильной классификации новых данных [2].

Когда мы имеем дело с данными, которые не имеют очевидной гиперплоскости (как показано на рисунке 2), нам нужно сместить нашу точку зрения в пространство более высоких измерений. Это можно представить, как точки данных либо поднимаются, либо опускаются, в то время как плоскость пытается разделить их на соответствующие классы. SVM позволяет пользователям выбрать функцию ядра, которая лучше всего соответствует данным, с которыми они работают. Использование ядра для отображения наших данных с точки зрения более высокого измерения позволит гиперплоскости разделять данные. Подробнее о функциях ядра вы можете узнать здесь [4].

Преимущества

  • Универсальность для пользовательских функций ядра
  • Эффективная память
  • Эффективен в случаях, когда количество измерений больше количества образцов.

Недостатки

  • Склонность к ошибкам и переоснащению при работе с зашумленными данными (например, перекрывающиеся функции для разных меток)
  • Длительное время вычислений при работе с очень большими наборами данных
  • Не дает вероятностного объяснения результатов [3]

Реализация

Заключение

SVM - это алгоритм обучения с учителем, который разделяет данные на разные классы с помощью гиперплоскости. Выбранная гиперплоскость имеет наибольший запас между гиперплоскостью и всеми точками, это дает наибольшую вероятность точной классификации. Это очень универсальный алгоритм с эффективным использованием памяти, однако он склонен к переоснащению, может быть дорогостоящим в вычислительном отношении в зависимости от размера данных и не может обеспечить вероятностное объяснение результатов.

Ресурсы

[1] https://en.wikipedia.org/wiki/Hyperplane

[2] https://www.kdnuggets.com/2016/07/support-vector-machines-simple-explanation.html

[3] https://scikit-learn.org/stable/modules/svm.html

[4] https://scikit-learn.org/stable/modules/svm.html#svm-kernels

Другие мои статьи, которые могут вас заинтересовать: