SVM(Support Vector Machine)

\(\)

서포트 벡터 머신(Support Vector Machine, SVM)은 분류 및 회귀 분석에 사용되는 강력한 지도 학습 알고리즘입니다. SVM은 주로 분류 문제에서 사용되며, 데이터를 다른 클래스 간의 경계로 분리하는 초평면(hyperplane)을 찾는 것이 목표입니다.

SVM의 주요 개념

  1. 초평면(Hyperplane):
  • 초평면은 데이터 포인트를 두 개의 클래스 또는 더 많은 클래스 사이로 분리하는 결정 경계입니다.
  • 2차원 공간에서는 선, 3차원 공간에서는 평면이며, 더 높은 차원에서는 초평면이라고 합니다.
  1. 마진(Margin):
  • 마진은 결정 경계와 가장 가까운 데이터 포인트(서포트 벡터) 사이의 거리입니다.
  • SVM은 마진을 최대화하는 초평면을 찾습니다. 이는 모델의 일반화 능력을 향상시킵니다.
  1. 서포트 벡터(Support Vectors):
  • 서포트 벡터는 결정 경계에 가장 가까운 데이터 포인트입니다.
  • 이 포인트들은 초평면을 정의하는 데 중요한 역할을 합니다.
  1. 커널 트릭(Kernel Trick):
  • SVM은 선형 분류뿐만 아니라 비선형 분류도 가능합니다.
  • 커널 함수는 데이터를 고차원 특징 공간으로 변환하여 비선형 분류 문제를 선형 분류 문제로 변환합니다.
  • 대표적인 커널 함수로는 선형 커널, 다항식 커널, RBF(방사 기저 함수) 커널 등이 있습니다.

SVM의 수학적 개념

  1. 결정 초평면:
  • 데이터 포인트 (\mathbf{x})가 (w \cdot \mathbf{x} + b = 0)이라는 초평면에 의해 분리된다고 가정합니다.
  • (w)는 초평면의 기울기를 나타내는 벡터, (b)는 편향입니다.
  1. 최대 마진:
  • 마진은 (2 / |w|)로 계산되며, SVM의 목표는 이 값을 최대화하는 것입니다.
  • 마진을 최대화하려면 제약 조건을 만족해야 합니다:
    [
    y_i (w \cdot \mathbf{x}_i + b) \geq 1 \quad \forall i
    ]
  • 여기서 (y_i)는 클래스 레이블이며, (+1) 또는 (-1) 값을 가집니다.
  1. 최적화 문제:
  • 위의 제약 조건을 만족하면서 (w)와 (b)를 찾기 위한 최적화 문제를 풀어야 합니다.
  • 라그랑주 승수법을 사용하여 최적화 문제를 해결합니다.
  1. 커널 함수:
  • 비선형 데이터를 다루기 위해 커널 함수를 사용합니다. 커널 함수 (K(\mathbf{x}_i, \mathbf{x}_j))는 고차원 공간에서 두 벡터 간의 내적을 계산합니다.
  • 커널 함수의 예:
    • 선형 커널: (K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i \cdot \mathbf{x}_j)
    • 다항식 커널: (K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + 1)^d)
    • RBF 커널: (K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma |\mathbf{x}_i – \mathbf{x}_j|^2))

SVM의 응용

  • 이미지 분류: 얼굴 인식, 사물 인식 등
  • 텍스트 분류: 스팸 이메일 필터링, 감정 분석 등
  • 생물정보학: 유전자 분류, 단백질 구조 예측 등

SVM의 장단점

장점:

  • 고차원 데이터에서 잘 작동합니다.
  • 결정 경계가 분명하여 과적합(overfitting)을 방지할 수 있습니다.
  • 다양한 커널을 통해 비선형 분류 문제를 해결할 수 있습니다.

단점:

  • 큰 데이터셋에서는 학습 속도가 느릴 수 있습니다.
  • 커널과 매개변수 선택에 민감합니다.
  • 다중 클래스 분류 문제에서는 복잡도가 증가할 수 있습니다.

SVM 예제1

다음은 파이썬을 사용하여 SVM을 적용하는 간단한 예제입니다:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 데이터 로드
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# SVM 모델 학습
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# 예측
y_pred = model.predict(X_test)

# 정확도 평가
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

이 예제에서는 Iris 데이터셋을 사용하여 SVM 모델을 학습하고, 테스트 데이터에 대한 예측 정확도를 평가합니다.

SVM 예제1

위 그림은 선형 커널을 사용하는 SVM 모델의 결과를 시각화한 것입니다.

  • 데이터 포인트: 두 클래스의 데이터 포인트가 서로 다른 색으로 표시되었습니다.
  • 결정 초평면: 실선은 두 클래스를 분리하는 결정 초평면을 나타냅니다.
  • 마진 경계: 두 개의 점선은 마진 경계를 나타냅니다. 이 경계는 결정 초평면에서 일정한 거리를 두고 있으며, 이 사이에 데이터 포인트가 없어야 마진이 최대화됩니다.
  • 서포트 벡터: 서포트 벡터는 결정 초평면에 가장 가까운 데이터 포인트로, 큰 원으로 강조 표시되어 있습니다. 서포트 벡터는 결정 초평면을 정의하는 데 중요한 역할을 합니다.

이 시각화는 SVM이 데이터 포인트를 분류하기 위해 어떻게 초평면을 찾고, 마진을 최대화하는지 보여줍니다.