Машина опорних векторів (SVM) — це модель машинного навчання з наглядом, що використовується для класифікації. Класифікація базується на тому, на якій стороні рішення межі знаходиться некласифікована точка.
Що таке межа рішення?
У двовимірному просторі межа рішення — це лінія, яка розділяє точки даних на два класи. Опорні вектори — це точки в навчальній вибірці, які визначають межу рішення, і вона обирається так, щоб максимізувати відстань між межею рішення та опорними векторами (маржа).
Межа рішення в двовимірному просторі.
Коли точки даних не можна розділити лінійно, межа рішення буде площиною або гіперплощиною.
Максимізація маржі.
Параметр C контролює баланс між максимізацією маржі та мінімізацією помилок.
Коли C великий, SVM більше орієнтований на мінімізацію помилок класифікації на навчальній вибірці. Якщо C занадто великий, модель добре працюватиме на даних, але погано працюватиме на більш загальних наборах даних (перенавчання).
Приклад перенавчання.
Коли C малий, SVM більше орієнтований на максимізацію маржі. Якщо C занадто малий, модель може не побачити локальні патерни в даних і погано працювати на навчальній вибірці (недонавчання).
Приклад недонавчання.
Як SVM працює в багатовимірних просторах?
Якщо точки даних не можна розділити лінійно, SVM використовує функцію ядра для трансформації точок даних у вищий вимір (без явного обчислення їх координат). Це дозволяє SVM визначити межу рішення.
Деякі практичні застосування SVM.
- Розпізнавання рукописного тексту.
- Виявлення спаму в електронній пошті.
- Виявлення фінансових шахрайств.
Недолік SVM.
SVM не підходить для наборів даних з великою кількістю точок даних, оскільки алгоритм потребує багато часу на навчання.
Python.
Python містить реалізацію SVM через бібліотеку scikit-learn, яку легко використовувати.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# Завантажуємо набір даних у dataframe
df = pd.read_csv("pretend_data.csv")
X = df.data
y = df.target
# Розбиваємо дані на тренувальну та тестову вибірки за допомогою співвідношення 20/80
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Оскільки random_state встановлено в 1, тренувальний набір і тестовий набір залишатимуться однаковими
# кожного разу при виконанні коду.
# Створюємо модель SVM з лінійним ядром і параметром C, рівним 1
model = SVC(kernel='linear', C=1)
# Навчаємо модель на тренувальному наборі
model.fit(X_train, y_train)
# Використовуємо модель для прогнозування результатів тестової вибірки
y_pred = model.predict(X_test)
# Оцінюємо модель, обчислюючи пропорцію правильно класифікованих точок даних
accuracy = model.score(X_test, y_test)
print(accuracy)
# Параметр C повинен бути налаштований для максимізації точності моделі
Посилання.
[1] DataCamp: https://www.datacamp.com/tutorial/svm-classification-scikit-learn-python
[2] GeeksforGeeks: https://www.geeksforgeeks.org/support-vector-machine-algorithm/
[3] IBM: https://www.ibm.com/think/topics/support-vector-machine
Перекладено з: An Overview of Support Vector Machines (SVMs).