Develop/ML·DL

서포트 벡터 머신(SVM)을 알아보자.

YOOZI. 2025. 1. 21. 22:20
728x90
땅따먹기 같이 생긴 서포트 벡터 머신.

 

 

 

오늘은 서포트 벡터 머신(SVM)을 알아보자.

오늘의 배움
  • 서포트 벡터 머신(SVM) 설명 및 특징
  • 선형, 비선형 분류
  • SVR(SVM 회귀) 및 커널

1. SVM 이론

서포트 벡터 머신(SVM)이란?

  • 정의: 데이터를 가장 잘 구분하는 경계선(초평면)을 찾는 머신러닝 알고리즘
  • 핵심 개념 한 줄 설명: " 마치 운동장에 그려진 선처럼 데이터를 구분하는 경계선을 찾는 알고리즘 "
  • SVM은 결정 경계(Decision Boundary) - 클래스 간 거리가 가장 먼 경계를 찾으면 -> 최적의 분리를 달성할 수 있음

 

📚 실제 예시로 이해하기

1. 운동장 라인 그리기

- 상황: 축구장에서 두 팀의 진영을 나누는 중앙선 그리기
- SVM 관점:
  * 중앙선 = 초평면
  * 양 팀 선수들 = 데이터 포인트
  * 안전거리 = 마진
2. 스팸 메일 분류

- 입력: 메일의 다양한 특징(단어 빈도, 링크 수 등)
- SVM 작동:
  * 정상 메일 vs 스팸 메일 구분선 찾기
  * 커널 트릭으로 복잡한 패턴 파악

 

 

핵심개념 정리

 

  1. 초평면(Hyperplane)
    • 정의: 데이터를 구분하는 결정 경계
    • 특징: 최대 마진을 가지도록 설정
    • 예시: 2차원에서는 직선, 3차원에서는 평면
    • 실생활 예시: 운동장의 중앙선처럼 두 팀을 구분하는 선
  2. 커널 트릭(Kernel Trick)
    • 정의: 저차원 데이터를 고차원으로 변환하는 기법
    • 특징: 비선형 문제를 선형으로 해결
    • 종류: 선형, 다항식, RBF 커널
  3. 서포트 벡터(Support Vector)
    • 정의: 결정 경계에 가장 가까운 데이터 포인트
    • 특징: 전체 모델의 결정 경계를 결정
    • 중요성: 적은 수의 데이터로 모델 결정
    • 예시: 줄서기할 때 맨 앞과 맨 뒤에 서있는 사람
  4. 마진(Margin)
    • 정의: 경계선(초평면)과 가장 가까운 데이터(서포트 벡터) 사이의 거리
    • 특징: SVM은 마진을 최대화하는 초평면을 선택
    • 예시: 주차할 때 옆 차와 띄우는 안전거리

 

  •  

 

SVM 유형별 비교 분석표

구분 선형 SVM 비선형 SVM SVR
용도 선형 분류 복잡한 분류 회귀 예측
커널 사용 불필요 필요 선택적
계산 복잡도 낮음 높음 중간
적용 예시 텍스트 분류 이미지 인식 주가 예측

 

2. 선형 SVM 분류

직선으로 데이터를 구분할 수 있을 때 사용 -> 즉, 데이터가 선형적으로 구분 가능한 경우에 적합

- 예시: 키 180cm를 기준으로 농구선수와 일반인 구분하기

 

선형 SVM의 장단점

  • 장점
    • 간단하고 효율적이다.
    • 고차원 데이터에서도 효과적이다.
  • 단점
    • 데이터가 선형적으로 분리되지 않는 경우 성능이 저하된다.

 

3. 비선형 SVM 분류

 

  • 곡선으로 데이터를 구분해야 할 때 사용
  • 비선형 SVM은 커널 트릭(Kernel Trick)을 사용하여 데이터를 고차원으로 매핑
    -> 그 공간에서 선형적으로 분리 가능하도록 만듦.
  • 예시: 도넛 모양처럼 원형으로 데이터가 분포된 경우

 

커널 트릭

  • 커널 함수는 원래 데이터 공간에서 계산하지 않고, 고차원 공간에서의 연산을 효율적으로 처리한다.
  • 대표적인 커널 함수
    • 다항 커널(Polynomial Kernel)
    • RBF 커널(Radial Basis Function Kernel)

 

비선형 SVM 장단점

  • 장점
    • 선형적으로 구분되지 않는 데이터를 잘 처리한다.
    • 다양한 커널 함수로 유연성이 높다.
  • 단점
    • 계산 비용이 높다.
    • 커널 및 하이퍼파라미터 선택이 중요하다.

 

4. SVM 회귀 (SVR)

일반적인 회귀분석처럼 데이터를 잘 설명하는 선을 찾되, 허용 가능한 오차 범위(마진)를 설정하는 방법

  • 실생활 예시:
    • 식당에서 예상 대기시간을 알려줄 때 "약 20분 정도" 라고 하는 것
    • 버스 도착 시간을 "5분 내외"로 예측하는 것

주요 특징 설명

 

  • ε-튜브 (ϵ-Tube(epsilon tube))
    • 의미: 허용 가능한 오차의 범위
    • 예시:
      • 시험 점수 예측할 때 ±5점 정도는 괜찮다고 보는 것
      • 도착 시간 예측할 때 2분 정도의 오차는 허용하는 것
  • 커널 트릭 활용 (Kernel Trick)
    • 의미: 복잡한(비선형) 관계도 표현 가능
    • 예시:
      • 계절에 따른 아이스크림 판매량 예측
      • 시간대별 교통량 예측
  • 노이즈 처리 (일반화 성능)
    • 의미: 이상치나 노이즈에 강함 -> 과적합을 방지하는 데 효과적
    • 예시:
      • 주식 가격 예측할 때 갑작스러운 변동 무시
      • 센서 데이터에서 튀는 값 처리

 

 


 

[참고] Kernel

더보기

커널(Kernel)은 SVM(Support Vector Machine)에서 비선형 데이터를 고차원 공간으로 변환하여 선형적으로 분리 가능하게 만드는 방법이다. 커널 함수는 입력 데이터를 더 높은 차원의 특징 공간으로 매핑(mapping)하여, SVM이 복잡한 데이터의 패턴을 학습할 수 있게 해준다.

 

→ SVM의 핵심은 두 클래스를 최대한 잘 구분할 수 있는 초평면(hyperplane)을 찾는 것이며, 커널 함수를 통해 이 작업을 고차원에서도 수행할 수 있게 된다.

  • 커널이 필요한 이유
    • 많은 경우 데이터는 선형적으로 분리할 수 없는 형태로 분포되어 있다. 즉, 2차원 공간에서 직선을 이용해 구분할 수 없는 경우가 많다.
    • 커널 함수를 사용하면, 고차원으로 데이터를 변환하여 선형적으로 분리 가능하게 만든다. 이를 통해 더 복잡한 데이터 구조를 효과적으로 처리할 수 있다.
    • 이 변환을 직접 계산하지 않고, 커널 트릭(Kernel Trick)을 사용해 효율적으로 계산할 수 있다.
  • 커널 트릭(Kernel Trick)
    • 커널 트릭은 특징 공간으로의 변환을 직접 계산하지 않고, 커널 함수의 결과만 사용하여 마치 변환한 것처럼 처리하는 방법이다.
    • SVM에서 입력 벡터의 내적만 계산하면 되기 때문에, 커널 함수를 사용하여 복잡한 계산을 효율적으로 수행할 수 있다. 이를 통해 고차원 변환을 일일이 수행하지 않아도 된다.
  • 주요 커널 함수 종류
    1. 선형 커널(Linear Kernel)
      • 커널 함수: $K(x, y) = x \cdot y$
      • 단순히 선형 모델을 의미하며, 커널 함수가 두 벡터의 내적을 계산한다.
      • 데이터가 선형적으로 분리 가능한 경우에 적합하다.
    2. 다항 커널(Polynomial Kernel)
      • 커널 함수: $K(x, y) = (x \cdot y + c)^d$
        • c: 상수
        • d: 다항식의 차수
      • 데이터의 비선형 관계를 다항식을 통해 표현할 때 사용된다.
    3. RBF 커널(Radial Basis Function Kernel, 가우시안 커널)
      • 커널 함수: $K(x, y) = \exp\left(-\frac{\|x - y\|^2}{2\sigma^2}\right)$
        • $\sigma$: 커널 폭을 결정하는 파라미터
      • 가장 널리 사용되는 커널로, 데이터가 선형적으로 분리되지 않을 때 거리 기반의 유사성을 측정하는 방법이다.
      • 데이터가 복잡한 비선형 관계를 가질 때 적합하다.
    4. 시그모이드 커널(Sigmoid Kernel)
      • 커널 함수: $K(x, y) = \tanh(\alpha x \cdot y + c)$
      • 신경망의 활성화 함수와 유사한 형태를 가지며, 뉴럴 네트워크와의 유사성을 기반으로 한다.

문제 유형

1: 분류 문제

# 예: 고양이와 강아지 사진 분류하기
from sklearn.svm import SVC

model = SVC(kernel='linear')  # 선형 분류기 생성
model.fit(X_train, y_train)   # 모델 학습
predictions = model.predict(X_test)  # 예측하기

 

2: 회귀 문제

# 예: 주택 가격 예측하기
from sklearn.svm import SVR

model = SVR(kernel='rbf')     # 비선형 회귀 모델 생성
model.fit(X_train, y_train)   # 모델 학습
predictions = model.predict(X_test)  # 예측하기

 


 

데이터 전처리가 중요하고, 데이터가 너무 많으면 학습시간이 오래 걸릴 수 있다고 한다.

다음은 '앙상블, 랜덤 포레스트'를 배워보자.

728x90