Сатьябрата Саху, технический руководитель, Санрачана

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

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

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

Типы SVM:

SVM можно разделить на два типа:

· Линейный SVM

· Нелинейный SVM

Линейный SVM:

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

Нелинейный SVM:

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

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

На рис.1 мы можем получить разные гиперплоскости (HP1, HP2, HP3). Главной задачей здесь является поиск наилучшей гиперплоскости с максимальным запасом, что означает максимальное расстояние между точками данных двух или более классов. Простой прямой линии недостаточно, чтобы различить классы, и мы должны глубоко задуматься.

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

В некоторых случаях классы неразделимы. Как обрабатывать эти случаи?

Таким образом, SVM может обрабатывать подобные случаи двумя способами.

· Мягкая граница/мягкая граница

· Уловка ядра

Мягкая граница/мягкая маржа:

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

Трюк с ядром:

В этом случае, какой бы мягкой или жесткой ни была граница, у нас никогда не будет хорошего классификатора. Итак, здесь мы будем использовать трюк ядра для преобразования данных в более высокие измерения. Другими словами, ядро ​​преобразует низкоразмерный ввод в многомерное пространство. Ядра — это не что иное, как эквивалент скалярного произведения в матрицах. В трюках с ядром используются различные функции, такие как линейные, полиномиальные и радиальные базисные функции (RBF) или ядро ​​Гаусса.

Наиболее часто используемым ядром является ядро ​​RBF. Ядро RBF преобразовывало данные в бесконечные измерения. Если мы преобразуем данные в бесконечные измерения, почти наверняка мы сможем найти гиперплоскость, разделяющую класс. Мы используем смесь трюков с мягким полем и ядром, чтобы не заходить в слишком большие измерения, и получаем гиперплоскость.

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

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

Распознавание лиц с помощью SVM:

Рассмотрим задачу распознавания лиц. Мы взяли набор данных Labeled Faces in the Wild из пакета Scikit-Learn, состоящий из тысяч фотографий различных общественных деятелей. Обратите внимание, что SVM также дает только предсказанные классы как Naive Bayes. Он не дает вероятности.

Начнем с простого импорта:

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

На приведенных выше изображениях каждое изображение содержит 62 × 47 (почти 2914) пикселей. Здесь мы продолжаем, просто используя значения пикселей в качестве функции. Мы будем использовать анализ основных компонентов (PCA), чтобы извлечь компоненты для включения в наш классификатор SVM.

Теперь, чтобы проверить вывод нашего классификатора, мы должны разделить данные на набор для обучения и тестирования:

Затем выполните перекрестную проверку поиска по сетке, чтобы изучить комбинации параметров:

Гиперпараметр в SVM — это svc_C для мягких полей (ε), а svc_gamma — это гиперпараметр ядра RBF. Чем выше значение гаммы, тем точнее модель. Но есть одна загвоздка: модель переобучится, если мы увеличим гамму до очень высокого значения. Помните, что в машине опорных векторов есть как минимум два гиперпараметра, которые нам нужно настроить: эпсилон (ε) и гамма ядра RBF.

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

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

Здесь мы предсказываем Ариэля Шарона с точностью 92%. Колин Пауэлл с 82% и так далее. Точность означает, что всякий раз, когда мы говорим о Джордже Буше-младшем, 89% из них на самом деле являются Джорджем Бушем-младшим. Чем выше точки опоры, тем четче определена граница.

Далее мы должны проверить матрицу путаницы:

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