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

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

Гиперплоскость:

Гиперплоскость – это граница решения, которая разделяет точки данных на разные классы в многомерном пространстве. В двумерном пространстве гиперплоскость — это просто линия, разделяющая точки данных на два класса. В трехмерном пространстве гиперплоскость — это плоскость, разделяющая точки данных на два класса. Точно так же в N-мерном пространстве гиперплоскость имеет (N-1)-размерность.

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

Допуск:

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

Векторы поддержки:

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

Понимание SVM на примере набора данных

У нас есть известный набор данных под названием «Iris». В этом наборе данных есть четыре признака (столбцы или независимые переменные), но для простоты мы рассмотрим два из них: 'Длина лепестка' и ' Ширина лепестка'. Затем эти точки наносятся на двумерную плоскость.

Более светлые точки представляют вид ‘Iris Setosa’, а более темные – ‘Iris versicolor’.

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

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

Нам нужен лучший классификатор. Классификатор, который остается дальше всего от общего класса, вот где появляется SVM.

Мы можем думать о SVM как о максимально широком пути (представленном параллельными пунктирными линиями) между классами.

Это называется «Классификация крупной маржи».

Примечание. Теоретически гиперплоскость находится точно между опорными векторами. Но здесь он немного ближе к темному классу. Почему? Это будет обсуждаться позже в части регуляризации.

Понимание по аналогии (можете пропустить, если поняли :)

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

Мы пока считаем, что дорога будет «прямой». (Мы рассмотрим нелинейные модели позже в статье)

Вы отдаете подряд строительной компании СВМ. Что SVM делает для минимизации трафика, так это максимизирует ширину дороги. Он смотрит на самый широкий участок земли между двумя городами. Здания в конце дороги называются «опорными векторами», поскольку они ограничивают или «поддерживают» модель. Шоссе расположено под таким углом, что вдоль него остается равное пространство для расширения городов.

Эта центральная линия, разделяющая шоссе, представляет собой границу принятия решения (гиперплоскость), а края представляют собой гиперплоскости для соответствующих классов. Ширина этой магистрали - Маржа.

Что произойдет, если данные не поддаются линейной классификации?

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

Что я имею в виду под этим 😕 ?

Давайте рассмотрим пример:

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

Что такое преобразование или добавление новой функции?

У нас есть две функции X и Y, а также данные, которые не поддаются линейной классификации. Что нам нужно сделать, так это добавить еще одно измерение, в котором, если данные отображаются на графике, они становятся линейно разделимыми.

Значения точки в измерениях — это не что иное, как значения столбца точки. Чтобы добавить еще одно измерение, нам нужно создать еще один столбец (или функцию).

Здесь у нас есть две функции X и Y, необходима третья функция, которая будет функцией исходных функций, то есть X и Y, которых будет достаточно для линейной классификации данных в трех измерениях.

Возьмем третий признак Z = f(x,y); f представляет функцию на X и Y. Здесь достаточно функции радиального базиса (RBF) (измерение евклидова расстояния) от начала координат.

Z = (X²+ Y²)^(1/2)

Здесь гиперплоскость была такой же простой, как создание плоскости, параллельной плоскости X-Y на определенной высоте.

Проблемы с этим методом:

Основной проблемой здесь является большая нагрузка на выполняемые расчеты.

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

Таким образом, нам нужно рассчитать n*(n-1)/2 расстояний. (n-1 другие точки относительно каждых n точек, но после вычисления расстояния 1–2 необходимо вычислить расстояние 2–1)

Временная сложность:

Временная сложность извлечения квадратного корня составляет O(log(n)), а для мощности сложение составляет O(1). Таким образом, для выполнения n*(n-1)/2 общих вычислений нам потребуется O(n²log(n)) временная сложность.

Но поскольку наша цель состоит в том, чтобы разделить классы, а не найти расстояние, мы можем отказаться от квадратного корня. (Z = X²+ Y²)

В этом случае мы получим временную сложность O(n²).

Но проблема даже не в этом, проблема начинается сейчас

Здесь мы знали, какую функцию следует использовать. Но может быть много функций только со степенью, ограниченной двумя (X, Y, XY, X² и Y²).

Мы можем использовать эти 5 как 3 измерения способами ⁵C₃ = 10 способами. Не говоря уже о бесконечной возможности их линейных комбинаций (Z = 4X² + 7XY + 13Y², Z= 8XY +17X² и так далее…).

И это только для полиномов 2-й степени. Если мы начали использовать полиномы 3-й степени, то X³, Y³, X²Y, XY² также появятся на картинке.

Не все из них достаточно хороши, чтобы быть нашей дополнительной функцией.

Например, я начал с (X vs Y vs XY в качестве признаков):

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

Теперь мы должны использовать другую функцию в качестве функции и повторить попытку.

Скажем, я использую (X²+ vs Y² vs XY в качестве функций, да, я заменил X и Y):

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

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

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

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

Если мы получили желаемый набор функций всего за два шага, как мы сделали выше, даже тогда этот метод будет медленнее, чем тот, который мы фактически используем.

То, что мы используем, называется Kernel Trick.

Трюк с ядром

Трюк с ядром вместо добавления другого измерения/функции находит сходство точек.

Вместо того, чтобы находить f(x,y) напрямую, он вычисляет сходство изображения этих точек. Другими словами, вместо поиска f(x1,y1) и f(x2,y2) мы берем точки (x1,y1) и (x2,y2) и вычислить, насколько похожими будут их выходные данные, используя функцию f(x,y); где f может быть любой функцией от x,y.

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

Для вычисления сходства мы используем функцию Гаусса.

f(x) = ae^(-(x-b)²/2c²)

a : представляет высоту пика кривой

b : представляет положение центра пика

c : стандартное отклонение данных

Для ядра RBF мы используем:

K(X,X’) = e^-γ(|X-X’|²) = (1/ e^|X-X’|²) γ

γ : гиперпараметр, который представляет линейность модели (γ ∝ 1/c²)

X,X’: представляет векторы положения двух точек

Небольшой γ(стремящийся к 0) означает более линейную модель, а большой γ означает более нелинейную модель.

Здесь у нас есть 2 модели (левая с γ = 1 и правая с γ = 0,01, гораздо более линейные по своей природе).

Так почему бы не сделать значение гаммы очень высоким? Какая польза от низкого γ?

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

Рисунок с 3 моделями слева γ = 0,1, γ = 10, γ = 100. (Левая точно подогнана, средняя переоснащена, а правая сильно переоснащена)

Временная сложность:

Поскольку нам нужно найти сходство каждой точки со всеми остальными точками, нам потребуется всего n*(n-1)/2 вычислений.

Экспонента имеет временную сложность O(1), поэтому мы получаем общую временную сложность O(n²).

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

Здесь мы используем различные ядра для этого.

У нас есть ядра, такие как:

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

Гауссово ядро

Гауссовское ядро ​​RBF

Ядро Лапласа RBF

Гиперболическое касательное ядро

Сигмовидное ядро

Функция Бесселя первого рода Ядро

Радиальный дисперсионный анализ Ядро

Ядро линейных сплайнов

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

Для дальнейшей оптимизации наших расчетов мы используем «матрицу Грамма».

Матрица Грама – это матрица, которую можно легко хранить и использовать в памяти, и которую очень эффективно использовать.

Регуляризация и SVM с мягкой маржей:

Наконец, переходим к новой теме 😮‍💨(фью).

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

У этого метода есть две проблемы. Во-первых, он будет работать только с линейно разделимыми данными, а не с нелинейно разделимыми данными (которые могут быть по большей части линейно классифицируемыми).

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

Хотя эта модель не классифицировала ни одну из точек неправильно, это не очень хорошая модель, и во время тестирования она будет давать более высокие ошибки.

Чтобы избежать этого, мы используем Sмягкую классификацию маржи.

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

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

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

Но мы можем решить проблему выбросов, удалив их с помощью предварительной обработки данных и очистки данных, верно? Тогда почему Soft Margins?

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

Как работают мягкие поля?

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

Он определяет допустимый допуск для ошибок неправильной классификации, при этом большие значения C приводят к более жестким границам (меньшему допуску ошибок), а меньшие значения C приводят к более мягким margin (больше допуска к ошибкам).

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

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

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

Гиперпараметр регуляризации «C» определяет, сколько человек может быть удалено (сколько точек может быть неправильно классифицировано или допущено) для построения проекта.

Высокое значение C означает, что модель сложнее по своей природе (менее терпима к ошибочным классификациям). В то время как низкое значение C означает, что модель более мягкая по своей природе (более терпимая к ошибочным классификациям).

Более низкое значение C для предыдущей модели (1 по отношению к 100) допускает большее количество неправильных классификаций, позволяя большему количеству людей выехать и, таким образом, построить более широкую улицу).

Примечание. Меньшее значение C не обязательно всегда означает более серьезные ошибки классификации, иногда это может означать гораздо более мелкие классификации.

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

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

C управляет компромиссом Bias/Variance. Низкое смещение означает, что модель имеет мало предположений о данных или вообще не использует их. Высокая дисперсия означает, что модель будет меняться в зависимости от того, что мы берем в качестве обучающих данных.

Для Hard Margin Classification модель значительно изменяется при изменении данных (если между гиперплоскостями были введены новые точки), поэтому она имеет высокую дисперсию, но не делает допущения о низком смещении данных.

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

Зачем тогда использовать низкое значение C? Почему необходимо выбрать подходящее значение

Это явление похоже на переоснащение и недооснащение, которое происходит при очень высоких значениях C и очень низких значениях C.

Очень низкие значения приведут к очень плохим результатам, как видно (аналогично случаю недообучения).

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

Таким образом, модели с очень высоким значением C также могут давать плохие результаты при тестировании (аналогично случаю переобучения).

Модель с C = 1, подходящая и более обобщенная модель. (Хотя есть 3 основных ошибочных классификации и около 12 незначительных ошибочных классификаций и, следовательно, худшая производительность на обучающих данных, модель учитывает большую часть данных и создает границы принятия решений в соответствии с этим, следовательно, она имеет лучшую производительность во время тестирования из-за на его расстояние от обоих классов).

Примечание. Незначительная неправильная классификация — это термин, который я использую для описания данных, неправильно классифицированных гиперплоскостью класса. Они не приводят к ухудшению производительности напрямую, но указывают на то, что модель может быть хуже. Следовательно, в приведенном выше случае, несмотря на 15 ошибок классификации, производительность не в 7,5 раз хуже, а только в 3 раза хуже на обучающих данных из-за в 3 раза большего количества серьезных ошибок классификации.

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

Таким образом, модель должна была быть представлена ​​следующим образом:

Регрессия с использованием SVM

SVM, хотя обычно используются для классификации, могут использоваться как для регрессии, так и для классификации. Регрессия опорных векторов (SVR) — это алгоритм машинного обучения, используемый для регрессионного анализа. Он отличается от традиционных методов линейной регрессии тем, что находит гиперплоскость, которая лучше всего соответствует точкам данных в непрерывном пространстве, вместо того, чтобы подгонять линию к точкам данных.

SVR, в отличие от SVM, пытается максимизировать количество точек на улице (margin), ширина которой контролируется гиперпараметром ε (эпсилон).

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

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

Преимущества SVR по сравнению с обычной регрессией:

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

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

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

4) Контроль над сложностью модели: SVR обеспечивает контроль над сложностью модели с помощью гиперпараметров, таких как параметр регуляризации C и параметры ядра. Настраивая эти параметры, вы можете контролировать компромисс между сложностью модели и способностью к обобщению. Этот уровень гибкости не предлагается линейной регрессией.

Приложения и использование SVM:

Машины опорных векторов (SVM) успешно применялись для решения различных реальных проблем в разных областях. Вот некоторые известные приложения SVM:

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

2. Классификация текста: SVM эффективны для задач категоризации текста, таких как анализ настроений, обнаружение спама и классификация тем.

3. Биоинформатика: SVM применялись в биоинформатике для решения таких задач, как предсказание структуры белка, анализ экспрессии генов и классификация ДНК.

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

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

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

Наконец, Уф.

С облегчением вздохнул.

Это было для блога. Я надеюсь, что у вас есть интуитивное понимание SVM и объясненных тем, как сказано в заголовке блога.

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

Но я надеюсь, что это дало вам общее представление об SVM.

Я прикрепил Блокнот Google Collab здесь: Блокнот SVM Collab

Я есть, но человек. Когда алгоритм может неправильно классифицировать данные, я могу ошибаться, особенно если это мой первый блог. Если вы заметили один, не стесняйтесь указывать на него 😊.

Примерно через 4100 слов я прощаюсь с вами.