Метод опорных векторов (SVM)

Nov 25 2022
Введение Метод опорных векторов — один из самых популярных алгоритмов машинного обучения. Он используется не только для классификации, но и для задач регрессии.
SVM (ссылка geospasialis.com)

Вступление

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

Пример

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

Рис. Пример SVM (ссылка: www.javatpoint.com)

Типы SVM

Линейный SVM : термин «линейно разделимые данные» относится к данным, которые можно разделить на две группы, используя только одну прямую линию. Линейный SVM используется для классификации таких данных, а используемый классификатор известен как линейный классификатор SVM.

Рис. Линейный SVM (ссылка www.javatpoint.com)

N on-linear SVM : нелинейный SVM используется для нелинейно разделенных данных, что означает, что если набор данных не может быть классифицирован с помощью прямой линии, то такие данные называются нелинейными данными, а используемый классификатор называется нелинейным. -линейный SVM-классификатор.

Рис. Нелинейный SVM (ссылка на www.javatpoint.com)

За работой

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

Функция стоимости и обновления градиента

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

Рис. Функция потерь шарнира (функция слева может быть представлена ​​как функция справа)

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

Инжир. Функция потерь для SVM

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

Рис. Градиенты

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

Рис. Обновление градиента — нет ошибочной классификации

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

Рис. Обновление градиента — неправильная классификация

Образец фрагмента программы

Импорт библиотек

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split

class SVM:
    def __init__(self, learning_rate=0.0001, lambda_param=0.001, n_iters=10000):
        self.weights = None
        self.bias =  None
        self.lr = learning_rate
        self.lambda_param = lambda_param
        self.n_iters = n_iters
    def fit(self,X,y):
        n_samples, n_features = X.shape
        
        y1 = np.where(y <= 0, -1, 1)
        
        self.weights = np.zeros(n_features)
        self.bias = 0
        for i in range(self.n_iters):
            for idx, x_i in enumerate(X):
                condition = y1[idx] * (np.dot(x_i, self.weights) - self.bias) >= 1
                if condition:
                    self.weights -= self.lr * (2 * self.lambda_param * self.weights)
                else:
                    self.weights -= self.lr * (2 * self.lambda_param * self.weights - np.dot(x_i, y1[idx]))
                    self.bias -= self.lr * y1[idx]
        
    def predict(self, X):
        approx = np.dot(X, self.weights) - self.bias
        return np.sign(approx)

def accuracy(y_true,y_pred):
    acc = np.sum(y_true == y_pred)/len(y_true)
    return acc
X, y =  datasets.make_blobs(n_samples=10, n_features=2, centers=2, cluster_std=1.05, random_state=40)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
y = np.where(y == 0, -1, 1)
clf = SVM()
clf.fit(X_train,y_train)
predict = clf.predict(X_test)
svm_acc = accuracy(y_test,predict)
print('Accuracy:',svm_acc)
print(f'''
     Final Weight:{clf.weights}
     Final Bias:{clf.bias}
     ''')

Окончательный вес: [0,34494241 0,1443094 ]
Окончательный уклон: -0,012899999999999977

Визуализация

def visualize_svm():
    def get_hyperplane_value(x, w, b, offset):
        return (-w[0] * x + b + offset) / w[1]
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    plt.scatter(X[:,0], X[:,1], marker='x',c=y)

    x0_1 = np.amin(X[:,0])
    x0_2 = np.amax(X[:,0])

    x1_1 = get_hyperplane_value(x0_1, clf.weights, clf.bias, 0)
    x1_2 = get_hyperplane_value(x0_2, clf.weights, clf.bias, 0)

    x1_1_m = get_hyperplane_value(x0_1, clf.weights, clf.bias, -1)
    x1_2_m = get_hyperplane_value(x0_2, clf.weights, clf.bias, -1)

    x1_1_p = get_hyperplane_value(x0_1, clf.weights, clf.bias, 1)
    x1_2_p = get_hyperplane_value(x0_2, clf.weights, clf.bias, 1)

    ax.plot([x0_1, x0_2],[x1_1, x1_2], 'b--')
    ax.plot([x0_1, x0_2],[x1_1_m, x1_2_m], 'k')
    ax.plot([x0_1, x0_2],[x1_1_p, x1_2_p], 'k')

    x1_min = np.amin(X[:,1])
    x1_max = np.amax(X[:,1])
    ax.set_ylim([x1_min-3,x1_max+3])

    plt.show()

visualize_svm()

      
                
Fig. Output of SVM

Обнаружение лиц — SVMc классифицирует части изображения как лица и не лица и создает квадратную границу вокруг лица.

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

Заключение

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

использованная литература

Машина опорных векторов

Домашнее задание для статистического вывода (SI) от студентов, изучающих искусственный интеллект и науку о данных (AI&DS), Технологический институт Вишвакармы, Пуна.

Подготовлен:-

  1. Аджинкья Махаджан
  2. Адитья Бодханкар
  3. Рия Дхакалкар
  4. Дикша Прасад
  5. Шивани Махаджан