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

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

В этой статье мы будем использовать набор данных обнаружения мошенничества с кредитными картами, который общедоступен на Kaggle. Этот набор данных содержит транзакции, совершенные держателями карт в Европе по кредитным картам в сентябре 2013 года. Набор данных сильно несбалансирован: только 0,17% транзакций являются мошенническими. Этот дисбаланс затрудняет точное обнаружение мошенничества, поскольку модель машинного обучения может иметь высокую точность, просто классифицируя все транзакции как немошеннические. Вы можете скачать набор данных с https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud.

Для начала мы импортируем необходимые библиотеки и загрузим набор данных.

import pandas as pd
import numpy as np

df = pd.read_csv(r"C:\Users\User\Downloads\creditcard_fraud_transactions\creditcard.csv")
df

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

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X = df.drop("Class", axis=1)
y = df["Class"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

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

from sklearn.svm import SVC

classifier = SVC(kernel="rbf", C=1, random_state=0)
classifier.fit(X_train, y_train)

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

from sklearn.metrics import confusion_matrix

y_pred = classifier.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print(cm)

Выход:

Наконец, мы оценим точность модели, используя показатель точности.

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy * 100))

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

Для расчета этих метрик мы можем использовать функцию classification_report из библиотеки scikit-learn.

from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred))

Выход:

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

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

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

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