Интуитивно понятное введение в машину опорных векторов

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

Давайте сначала рассмотрим ситуацию, когда наши данные линейно разделимы.

Линейно разделяемые данные

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

Затем нашему алгоритму SVM предлагается найти границу, которая сможет разделить эти два класса клиентов, например:

Однако это был не единственный способ разделения двух классов. Рассмотрим следующие альтернативы:

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

Что значит «лучшая сегрегация»?

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

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

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

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

Вы можете определенно сказать, что гиперплоскость на Рисунке 2 лучше, чем на Рисунке 1, так как поля больше. Обратите внимание, что оба они прекрасно могут разделять данные, но второй будет более надежным после адаптации к новым, немаркированным данным.

Теперь необходимо представить еще одну концепцию. Если посмотреть на график:

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

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

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

Нет-линейно разделяемые данные

Представьте, что вас просят выделить следующие точки данных:

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

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

Я хочу предложить интуитивно понятный способ проработки этой задачи. Давайте посмотрим на идею с помощью этого простого графика:

Опять же, вы хотите отделить квадраты от кругов, и здесь возможной границей может быть зеленая граница.

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

Было бы определенно проще, но как мы можем вычислить φ (x)? На самом деле нас об этом не просят. В самом деле, перемещение в многомерное пространство - это работа функций ядра, которая создает неявное пространство признаков (в этом примере третья координата имеет единственную цель - поднять некоторые наблюдения и отделить их от других, но это не так. имеют какое-либо значение для себя), даже не вычисляя координаты данных в этом пространстве, а просто вычисляя внутренние продукты между изображениями всех пар данных в пространстве признаков.

Следовательно, функция преобразования φ (x) не требуется, поскольку нам предоставляется список функций ядра, также известный как «функции подобия». Самым популярным является ядро ​​радиальной базисной функции (RBF) или функция ядра Гаусса, которая выглядит так:

x и y - два вектора объектов, представляющих два разных наблюдения. И в этом вся уловка: мы заменяем трудно вычислимую функцию преобразования на предварительно построенную функцию подобия.

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

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