AI/ML

[ML] 지도학습 - 분류모델 (SVM)

죵욜이 2024. 12. 29. 00:25

SVM 이란?

  • 서포트 벡터 머신 (Support Vector Machine, SVM) 은 주로 분류 문제에 사용되는 강력한 머신러닝 모델
  • 데이터 포인트를 서로 다른 클래스로 분리하는 최적의 경계 (결정 경계, Decision Boundary)를 찾는데 사용
  • SVM 은 고차원 데이터와 비선형 문제에 강력한 성능을 보임

SVM의 주요 개념

  1. 최적의 초평면(Optimal Hyperplane):
    • SVM은 주어진 데이터를 분류할 수 있는 초평면(hyperplane)을 찾습니다. 초평면은 다차원 공간에서 데이터를 두 클래스로 나누는 평면입니다.
    • 이 초평면은 가능한 한 두 클래스 간의 마진(margin)을 최대화하는 방식으로 선택됩니다. 마진은 초평면과 데이터 포인트 사이의 거리로, 이 거리의 크기를 최대화하는 초평면이 최적입니다.
  2. 서포트 벡터(Support Vectors):
    • 서포트 벡터는 결정 경계를 형성하는 데 중요한 데이터 포인트입니다. 이 데이터 포인트들이 초평면에 가장 가까운 지점들로, 모델 학습에 중요한 역할을 합니다. 실제로 모델은 서포트 벡터를 기준으로 학습을 진행합니다.
    • 마진을 최대화하는 것이 목표인데, 이 마진의 경계가 서포트 벡터를 기준으로 결정됩니다.
  3. 선형 SVM (Linear SVM):
    • 데이터가 선형적으로 분리 가능한 경우, 즉 두 클래스가 직선(2D의 경우) 또는 평면(고차원 공간에서)에 의해 정확하게 나눠질 수 있는 경우, 선형 SVM을 사용합니다.
    • 이 경우, SVM은 두 클래스 사이의 경계를 결정하는 직선 또는 평면을 찾습니다.
  4. 비선형 SVM (Non-linear SVM):
    • 데이터가 선형적으로 분리되지 않는 경우, SVM은 커널 기법을 사용하여 데이터를 고차원 공간으로 변환하여 선형적으로 분리할 수 있는 공간으로 만들 수 있습니다.
    • 커널 함수(Kernel function)는 원래의 데이터 공간을 더 높은 차원으로 변환하는 함수로, 대표적인 커널 함수는 다음과 같습니다:
      • 다항 커널(Polynomial Kernel): 데이터를 다항식 함수로 변환하여 비선형 데이터를 선형적으로 분리 가능하게 만듭니다.
      • 가우시안 RBF 커널(Radial Basis Function Kernel): 데이터 포인트 간의 거리를 기준으로 변환하여 비선형 문제를 해결합니다.
      • 시그모이드 커널(Sigmoid Kernel): 신경망에서 사용하는 활성화 함수인 시그모이드 함수를 사용하여 변환합니다.
  5. 마진(Margin):
    • 마진은 초평면과 가장 가까운 데이터 포인트들 사이의 거리입니다. SVM의 목표는 마진을 최대화하는 초평면을 찾는 것입니다. 마진이 클수록 모델이 새로운 데이터 포인트를 잘 분류할 확률이 높아집니다.
    • 마진을 최대화하려는 이유는 일반화 성능을 높이기 위해서입니다. 마진이 클수록 학습 데이터에 과적합(overfitting)되는 위험이 줄어듭니다.
  6. 소프트 마진(Soft Margin):
    • 실제 데이터는 완벽하게 선형적으로 분리되지 않을 수 있습니다. 이 경우, 일부 데이터 포인트가 초평면을 넘거나 잘못 분류될 수 있습니다. 소프트 마진 SVM은 일부 데이터 포인트가 잘못 분류되도록 허용하지만, 잘못 분류된 점수를 최소화하려고 합니다.
    • 이를 위해 C라는 하이퍼파라미터를 사용하여 잘못 분류된 데이터에 대한 벌점을 조절합니다. C 값이 크면 모델은 더 정확한 분류를 목표로 하고, C 값이 작으면 좀 더 유연하게 분류합니다.
  7. SVM의 수학적 원리:
    • SVM은 최적화 문제를 풀어 마진을 최대화하는 초평면을 찾습니다. 이를 위해 **라그랑지 승수법(Lagrange multipliers)**을 사용하여 최적화 문제를 해결합니다.
    • 목표 함수: 마진을 최대화하는 초평면을 찾는 문제는 다음과 같은 목적 함수로 표현됩니다:

  • 여기서 w는 초평면의 가중치 벡터입니다. SVM 은 이 목적 함수를 최대화 하면서, 동시에 각 데이터 포인트가 올바르게 분류되도록 제약을 설정합니다.

SVM의 특징:

  • 강력한 분류 성능: SVM은 특히 고차원 데이터에 대해 매우 강력한 성능을 보입니다.
  • 비선형 데이터 처리: 커널 기법을 통해 비선형 문제를 해결할 수 있습니다.
  • 고차원 공간에서 잘 작동: 텍스트 분류, 이미지 분류 등 고차원 데이터에서 좋은 성능을 보입니다.
  • 메모리 소모: 커널 트릭을 사용할 경우, 특히 데이터가 많을 때는 계산 비용이 많이 들 수 있습니다.

SVM의 단점:

  • 대규모 데이터셋: SVM은 훈련 데이터가 매우 크면 시간이 오래 걸릴 수 있으며, 커널을 사용한 경우 메모리 소모가 커질 수 있습니다.
  • 하이퍼파라미터 조정: C와 커널 파라미터(예: RBF 커널의 감마 값) 등을 잘 조정해야 최적의 성능을 발휘할 수 있습니다.

예시

- 데이터 로드 및 전처리

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 데이터 로드
data = load_breast_cancer()
X = data.data
y = data.target

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

# 데이터 스케일링
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

 

- 모델 학습

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

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

# 예측
y_pred = model.predict(X_test)

# 평가
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Classification Report:\n{classification_report(y_test, y_pred)}")
print(f"Confusion Matrix:\n{confusion_matrix(y_test, y_pred)}")