Ну, машина опорных векторов (SVM) существует в сообществе машинного обучения уже много лет. Но он по-прежнему эффективен и сегодня и может стать отличным дополнением к вашему арсеналу машинного обучения. Этот блог является частью III серии блога. Если еще не читали Часть I и Часть II, прочтите. Этот блог даст вам представление о машине опорных векторов (SVM).

Введение:

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

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

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

На приведенных выше изображениях все три линии, то есть a, b и c, идеально разделяют оба класса. Поэтому для выбора оптимальной линии SVM использует концепцию поля. Запас можно рассчитать как расстояние между ближайшей точкой от гиперплоскости и просто удвоить его. Оптимальная гиперплоскость имеет наибольший запас. В нашем случае линия b имеет наибольшую маржу. Точки данных, которые используются для определения поля, называются опорными векторами, отсюда и название «Машина опорных векторов». Обратитесь к изображению ниже, чтобы понять, что именно это означает.

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

Ядра:

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

Вы можете ясно видеть, что мы не можем разделить вышеуказанные классы одной линией/гиперплоскостью. Вот где ядра вступают в игру. Итак, что он делает, так это отображает исходные неразделимые данные в новое многомерное пространство. Таким образом, мы можем легко использовать гиперплоскость/линию для разделения данных. Как на рис.6

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

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

С разными наборами данных вам в основном приходится экспериментировать с разными вариантами ядер и значениями C и гаммы.

Scikit изучает его реализацию следующим образом:

from sklearn.svm import SVC
clf = SVC() 
clf.fit(features,labels) 
print(clf.predict(feature_test)

Если вы следите за нами из нескольких предыдущих блогов, вот как выглядит прогноз на основе данных предыдущего блога с «линейным» и «rbf» ядром:

Если присмотреться, то граница решения ядра rbf выглядит немного изогнутой, а с линейным ядром - прямой линией.

Конец Примечания:

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

P.S.:-

Поскольку большинство алгоритмов имеют одинаковую структуру кода (благодаря scikit-learn) и одинаковые библиотеки Python. Мы создали отдельный блог для кодов всех графиков и прогнозов в общедоступном наборе данных.

Изображения для нелинейных данных (рис. 6,7) были взяты из Youtube Video Брэндона Рорера. Проверьте это, если работа ядра все еще не ясна.

Первоначально опубликовано на https://highontechs.com 8 мая 2020 г.