콘텐츠로 이동

서포트 벡터 머신 (Support Vector Machine, SVM)

난이도: 중급~고급
선수 지식: 선형대수(내적, 노름), 최적화 기초, 라그랑주 승수법
관련 문서: 선형 모델 | 손실 함수 | 볼록성 | 차원 축소


개요

서포트 벡터 머신(SVM)은 최대 마진 분류기(Maximum Margin Classifier)로, 클래스 간 결정 경계의 마진을 최대화하는 초평면을 찾는 모델이다. 커널 트릭(Kernel Trick)을 통해 비선형 결정 경계를 효율적으로 학습할 수 있으며, 고차원 데이터에서 특히 강력한 성능을 보인다.

SVM은 분류(SVC)와 회귀(SVR) 모두에 사용할 수 있다.


핵심 개념

1. 하드 마진 SVM (Hard Margin SVM)

목적

마진(margin)을 최대화: \(\text{margin} = \frac{2}{\|\mathbf{w}\|}\)

최적화 문제

\[\min_{\mathbf{w}, b} \frac{1}{2}\|\mathbf{w}\|^2 \quad \text{s.t.} \quad y_i(\mathbf{w}^T\mathbf{x}_i + b) \ge 1, \quad \forall i\]
  • 서포트 벡터(Support Vectors): 마진 경계 위에 놓인 데이터 포인트
  • 결정 경계는 서포트 벡터에 의해서만 결정됨
  • 제한: 선형 분리 가능(linearly separable)한 데이터에만 적용 가능

2. 소프트 마진 SVM (Soft Margin SVM)

최적화 문제

\[\min_{\mathbf{w}, b, \boldsymbol{\xi}} \frac{1}{2}\|\mathbf{w}\|^2 + C\sum_{i=1}^{n}\xi_i\]
\[\text{s.t.} \quad y_i(\mathbf{w}^T\mathbf{x}_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0\]

슬랙 변수 (Slack Variables) \(\xi_i\)

  • \(\xi_i = 0\): 마진 바깥 (올바른 분류)
  • \(0 < \xi_i < 1\): 마진 내부이지만 올바른 분류
  • \(\xi_i \ge 1\): 오분류

C 파라미터의 역할

C 값 효과
큰 C 좁은 마진, 적은 위반 허용 (과적합 경향)
작은 C 넓은 마진, 많은 위반 허용 (과소적합 경향)

힌지 손실 (Hinge Loss)

\[L = \max(0, 1 - y_i \cdot f(x_i))\]

소프트 마진 SVM은 힌지 손실 + L2 정규화와 동치이다:

\[\min \sum_{i=1}^{n} \max(0, 1 - y_i f(x_i)) + \frac{\lambda}{2}\|\mathbf{w}\|^2\]

3. 커널 트릭 (Kernel Trick)

쌍대 문제 (Dual Formulation)

\[\max_{\boldsymbol{\alpha}} \sum_{i=1}^{n}\alpha_i - \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j)\]
\[\text{s.t.} \quad 0 \le \alpha_i \le C, \quad \sum \alpha_i y_i = 0\]

핵심 통찰

데이터를 고차원 공간으로 매핑하는 함수 \(\phi\)가 있을 때, 내적 \(\phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_j)\)만 필요하다. 커널 함수 \(K\)는 이 내적을 직접 고차원 변환 없이 계산한다:

\[K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_j)\]

Mercer 조건

유효한 커널이 되려면 커널 행렬이 양의 준정치(positive semi-definite)여야 한다.

주요 커널 함수

커널 수식 특징
선형 (Linear) \(K(\mathbf{x}, \mathbf{z}) = \mathbf{x}^T\mathbf{z}\) 커널 트릭 없음
다항식 (Polynomial) \(K(\mathbf{x}, \mathbf{z}) = (\gamma\mathbf{x}^T\mathbf{z} + r)^d\) 유한 차원 매핑
RBF (가우시안) \(K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma\|\mathbf{x} - \mathbf{z}\|^2)\) 무한 차원 매핑
시그모이드 (Sigmoid) \(K(\mathbf{x}, \mathbf{z}) = \tanh(\gamma\mathbf{x}^T\mathbf{z} + r)\) 신경망과 유사
flowchart TD
    A[커널 선택 가이드] --> B{데이터 특성?}
    B -->|고차원, 텍스트| C[선형 커널]
    B -->|구조 불명, 일반 용도| D[RBF 커널]
    B -->|다항 관계 확인됨| E[다항식 커널]
    C --> F["파라미터: C만"]
    D --> G["파라미터: C, γ"]
    E --> H["파라미터: C, γ, d, r"]

RBF 커널의 \(\gamma\) 파라미터

\(\gamma\) 효과
\(\gamma\) 좁은 가우시안, 가까운 점만 영향, 복잡한 경계 (과적합 위험)
작은 \(\gamma\) 넓은 가우시안, 먼 점도 영향, 단순한 경계 (과소적합 위험)

4. SVR (Support Vector Regression)

\(\epsilon\)-비감응 손실 (\(\epsilon\)-insensitive loss)

\(\epsilon\) 이내의 오차는 무시:

\[\min \frac{1}{2}\|\mathbf{w}\|^2 + C\sum_{i=1}^{n}(\xi_i + \xi_i^*)\]
\[\text{s.t.} \quad y_i - f(x_i) \le \epsilon + \xi_i, \quad f(x_i) - y_i \le \epsilon + \xi_i^*\]
  • \(\epsilon\)-tube 안의 예측은 페널티 없음
  • 튜브 밖의 서포트 벡터만 모델을 결정

상세 내용

실용적 고려사항

특성 스케일링은 필수

SVM은 거리 기반 모델이므로 특성 스케일링(StandardScaler 또는 MinMaxScaler)을 반드시 수행해야 한다. 스케일링 없이는 큰 범위의 특성이 결과를 지배한다.

계산 복잡도

연산 복잡도
학습 \(O(n^2)\) ~ \(O(n^3)\)
예측 \(O(n_{\text{sv}} \cdot d)\)

대규모 데이터셋에는 부적합. 대안: - LinearSVC: 선형 커널에 특화, \(O(n)\) 학습 - 근사 커널: Nystroem, RBF Sampler로 커널을 근사한 후 선형 SVM 적용

SMO 알고리즘

Sequential Minimal Optimization: 쌍대 문제를 효율적으로 풀기 위해 한 번에 두 개의 \(\alpha\)를 업데이트하는 알고리즘 (libsvm 구현에서 사용).

다중 클래스 전략

  • OvR (One-vs-Rest): \(K\)개 이진 분류기, 가장 높은 점수의 클래스 선택
  • OvO (One-vs-One): \(K(K-1)/2\)개 이진 분류기, 다수결 투표

확률 추정

SVM은 기본적으로 확률을 출력하지 않는다. Platt Scaling(시그모이드 함수 적합)으로 사후 확률 추정 가능하나, 추가 교차 검증이 필요하고 정확하지 않을 수 있다.


언제 사용하는가

상황 추천 여부
고차원 데이터 (텍스트 분류 등) 적합 (특히 선형 SVM)
샘플 수 < 특성 수 (\(n < p\)) 매우 적합
명확한 마진이 존재하는 데이터 매우 적합
대규모 데이터셋 (\(n > 100,000\)) 부적합 (학습 느림)
확률 추정이 필요한 경우 비추천 (로지스틱 회귀 선호)
잡음이 많은 데이터 (겹치는 클래스) C 조정 필요

흔한 오해와 함정

1. "SVM은 항상 비선형 커널을 써야 한다"

  • 고차원 데이터에서는 선형 커널이 충분하고 훨씬 빠르다. 텍스트 분류에서는 선형 SVM이 표준이다.

2. "커널 트릭은 데이터를 실제로 고차원으로 변환한다"

  • 아니다. 커널 트릭의 핵심은 고차원에서의 내적을 직접 계산하여 실제 변환 없이도 같은 효과를 얻는 것이다.

3. "RBF 커널은 항상 최선의 선택이다"

  • 만능은 아니다. 고차원 희소 데이터에서는 선형 커널이, 알려진 다항 관계에서는 다항식 커널이 더 적합할 수 있다.

4. "SVM은 스케일링 없이도 잘 작동한다"

  • 특성 스케일링은 필수이다. 거리 기반 모델이므로 스케일 차이가 결과에 큰 영향을 미친다.

5. "서포트 벡터가 많으면 모델이 좋다"

  • 오히려 서포트 벡터가 적을수록 마진이 깨끗하고 일반화가 잘 된다. 서포트 벡터가 지나치게 많으면 과적합 신호일 수 있다.

다른 주제와의 연결

  • 선형 모델: 선형 SVM은 힌지 손실을 사용하는 선형 모델; 로지스틱 회귀와 비교
  • 손실 함수: 힌지 손실(Hinge Loss)의 특성
  • 볼록성: SVM은 볼록 이차 프로그램(convex QP)으로 정의됨
  • 정규화 이론: C 파라미터의 정규화 효과
  • 차원 축소: 고차원에서 SVM의 효과, 차원의 저주

자주 묻는 면접 질문

  1. 커널 트릭을 직관적으로 설명하시오
  2. 데이터를 고차원으로 매핑하지 않고도, 커널 함수를 통해 고차원에서의 내적을 직접 계산하여 비선형 경계를 학습하는 기법

  3. RBF 커널이 무한 차원으로 매핑하는 이유는?

  4. RBF 커널의 테일러 전개는 무한 급수이며, 이는 무한 차원 특성 공간에서의 내적에 해당

  5. C가 매우 크거나 작을 때 무슨 일이 일어나는가?

  6. 매우 큰 C: 하드 마진에 가까워짐, 마진 위반에 강한 페널티, 과적합 위험
  7. 매우 작은 C: 넓은 마진 허용, 많은 오분류 허용, 과소적합 위험

  8. SVM이 "최대 마진 분류기"로 불리는 이유는?

  9. 두 클래스를 분리하는 초평면 중에서 마진(가장 가까운 서포트 벡터까지의 거리)이 최대인 것을 선택하기 때문

  10. 로지스틱 회귀 대신 SVM을 선택해야 할 때는?

  11. 고차원 데이터, 명확한 마진 존재, 확률이 아닌 결정이 필요할 때. 반대로 확률 추정이 필요하면 로지스틱 회귀 선호

코드 예시

from sklearn.svm import SVC, SVR, LinearSVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

# 반드시 스케일링과 함께 사용
svm_pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC(kernel='rbf', C=1.0, gamma='scale'))
])
svm_pipeline.fit(X_train, y_train)

# 선형 SVM (대규모 데이터에 적합)
linear_svm = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', LinearSVC(C=1.0, max_iter=10000))
])

# 확률 추정이 필요한 경우
svm_proba = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC(kernel='rbf', probability=True))  # Platt Scaling
])

# SVR (회귀)
svr = Pipeline([
    ('scaler', StandardScaler()),
    ('svr', SVR(kernel='rbf', C=1.0, epsilon=0.1))
])

용어 정리

영어 한국어
Support Vector Machine 서포트 벡터 머신
Margin 마진
Support Vector 서포트 벡터
Hyperplane 초평면
Kernel Trick 커널 트릭
Slack Variable 슬랙 변수
Hinge Loss 힌지 손실
Dual Formulation 쌍대 형태
Soft Margin 소프트 마진
Hard Margin 하드 마진

참고 자료

  • Vapnik (1995) - The Nature of Statistical Learning Theory
  • Burges (1998) - "A Tutorial on Support Vector Machines for Pattern Recognition"
  • Platt (1998) - "Sequential Minimal Optimization"
  • Scholkopf & Smola (2002) - Learning with Kernels