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

Введение в SVM

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

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

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

Математическое объяснение

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

  1. Форма алгоритма

если yᵢ положительно, то w.Xᵢ— b ≥1

если yᵢ отрицательно, то w.Xᵢ - b ≤1

2. Функция затрат/убытков

Цель нашей функции потерь

SVM использовала функцию потери шарнира, чтобы найти «максимальную маржу». Для предполагаемого вывода yᵢ как 1 или -1 и оценки классификатора w.Xᵢ -b функция потерь шарнира прогноза yᵢ определяется следующим образом:

L (yᵢ) = max (0, 1 - yᵢ * (w.Xᵢ -b))

Общая функция потерь SVM

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

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

If yᵢ.f(x) ≥ 1:

еще:

3. Функция оптимизации

Подход: использование градиентного спуска для поиска оптимальных весов w.

If yᵢ.f(x) ≥ 1:

еще:

В сочетании с альфа-скоростью обучения w и b обновляются для каждого обучающего примера xi.

w= w -альфа*dw

б = б -альфа*дб

Набор данных

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

Для простоты я выделю только:

  • Первые 2 признака: длина чашелистика и ширина чашелистика.
  • 2 класса, которые линейно разделимы для решения задачи бинарной классификации с использованием машины линейных опорных векторов.

Гипотеза

Мы могли бы найти гиперплоскость, которая линейно разделяет два класса.

Интуитивно это возможно, посмотрев на график ниже.

Код на Питоне

Попробуем сопоставить данные с приведенной выше кодировкой.

Учитывая гиперпараметры по умолчанию, точность нашей модели составляет около 99,3%. Неплохо. Давайте визуализируем границу решения!

Мы сделали это, наконец! Я могу это сделать, и вы тоже можете это сделать!

Приятного обучения!