Огляд машин опорних векторів (SVM).

Машина опорних векторів (SVM) — це модель машинного навчання з наглядом, що використовується для класифікації. Класифікація базується на тому, на якій стороні рішення межі знаходиться некласифікована точка.

Що таке межа рішення?

У двовимірному просторі межа рішення — це лінія, яка розділяє точки даних на два класи. Опорні вектори — це точки в навчальній вибірці, які визначають межу рішення, і вона обирається так, щоб максимізувати відстань між межею рішення та опорними векторами (маржа).

pic

Межа рішення в двовимірному просторі.

Коли точки даних не можна розділити лінійно, межа рішення буде площиною або гіперплощиною.

Максимізація маржі.

Параметр C контролює баланс між максимізацією маржі та мінімізацією помилок.

Коли C великий, SVM більше орієнтований на мінімізацію помилок класифікації на навчальній вибірці. Якщо C занадто великий, модель добре працюватиме на даних, але погано працюватиме на більш загальних наборах даних (перенавчання).

pic

Приклад перенавчання.

Коли C малий, SVM більше орієнтований на максимізацію маржі. Якщо C занадто малий, модель може не побачити локальні патерни в даних і погано працювати на навчальній вибірці (недонавчання).

pic

Приклад недонавчання.

Як 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).

Leave a Reply

Your email address will not be published. Required fields are marked *