move84

머신러닝: SVM(서포트 벡터 머신) 기초 본문

머신러닝

머신러닝: SVM(서포트 벡터 머신) 기초

move84 2025. 4. 12. 15:16
반응형

서포트 벡터 머신(SVM)은 강력하고 다재다능한 머신러닝 알고리즘이다. 분류, 회귀, 이상치 탐지 등에 사용될 수 있으며, 특히 복잡한 데이터셋에서 뛰어난 성능을 보인다. 이 글에서는 SVM의 기본적인 개념과 작동 원리, 그리고 간단한 예제를 통해 SVM을 이해하는 것을 목표로 한다.

SVM의 핵심 아이디어는 데이터를 분류하는 최적의 초평면(hyperplane)을 찾는 것이다. 최적의 초평면은 데이터 포인트를 가장 잘 분리하면서, 동시에 각 클래스에서 가장 가까운 데이터 포인트와의 거리를 최대화하는 초평면을 의미한다.



💡 SVM의 기본 개념
SVM은 데이터를 분류하기 위한 결정 경계를 찾는 알고리즘이다. 2차원 공간에서는 직선, 3차원 공간에서는 평면, 그 이상의 차원에서는 초평면(hyperplane)이 결정 경계가 된다. SVM의 목표는 이 결정 경계를 최대한 데이터 포인트들로부터 멀리 떨어뜨리는 것이다. 이때 결정 경계와 가장 가까운 데이터 포인트들을 서포트 벡터(support vector)라고 부른다.

SVM은 크게 두 가지 유형으로 나뉜다. 선형 SVM(Linear SVM)은 선형적으로 분리 가능한 데이터에 적용되며, 비선형 SVM(Non-linear SVM)은 커널 함수(kernel function)를 사용하여 비선형적으로 분리 가능한 데이터에 적용된다.



🎯 선형 SVM
선형 SVM은 데이터를 선형적으로 분리하는 최적의 초평면을 찾는 것을 목표로 한다. '최적'이라는 의미는 마진(margin)을 최대화하는 것을 의미한다. 마진은 결정 경계와 서포트 벡터 사이의 거리를 나타낸다. 마진을 최대화하면 모델의 일반화 성능이 향상되어, 새로운 데이터에 대한 예측 정확도가 높아진다.

예를 들어, 2차원 공간에서 두 개의 클래스를 분리하는 직선을 찾는다고 가정해 보자. 선형 SVM은 이 두 클래스를 가장 잘 분리하면서, 각 클래스에서 가장 가까운 데이터 포인트(서포트 벡터)와의 거리가 최대가 되는 직선을 찾는다.

선형 SVM의 수학적 표현은 다음과 같다.

w ⋅ x + b = 0

여기서 w는 가중치 벡터(weight vector), x는 입력 벡터(input vector), b는 편향(bias)을 나타낸다. w와 b는 SVM 모델이 학습을 통해 찾아내는 파라미터이다.



⚙️ 비선형 SVM과 커널 함수
대부분의 실제 데이터는 선형적으로 분리하기 어렵다. 이 경우, 비선형 SVM을 사용해야 한다. 비선형 SVM은 커널 함수를 사용하여 데이터를 더 높은 차원으로 매핑(mapping)한다. 고차원 공간에서는 선형적으로 분리가 가능해질 수 있다.

대표적인 커널 함수로는 다음과 같은 것들이 있다.

  • 다항 커널(Polynomial Kernel): (x ⋅ y + r)^d
  • 방사 기저 함수 커널(Radial Basis Function Kernel, RBF Kernel): exp(-γ ||x - y||^2)
  • 시그모이드 커널(Sigmoid Kernel): tanh(γ x ⋅ y + r)

    여기서 x와 y는 입력 벡터, r은 상수, d는 다항식의 차수, γ는 커널 계수를 나타낸다. 커널 함수는 데이터의 특성에 따라 적절하게 선택해야 한다. RBF 커널은 일반적으로 좋은 성능을 보이며, 특별한 사전 지식이 없는 경우에 많이 사용된다.

    예를 들어, 2차원 공간에서 두 개의 클래스가 원형으로 분포되어 있어 선형적으로 분리하기 어렵다고 가정해 보자. 이 경우, RBF 커널을 사용하여 데이터를 더 높은 차원으로 매핑하면, 고차원 공간에서는 두 클래스를 선형적으로 분리할 수 있게 된다.


📚 SVM 구현 예제 (Python)
다음은 Python의 scikit-learn 라이브러리를 사용하여 SVM을 구현하는 간단한 예제이다.

 from sklearn import svm
 from sklearn.model_selection import train_test_split
 from sklearn.metrics import accuracy_score
 import numpy as np
 \
 # 샘플 데이터 생성
 X = np.array([[0, 0], [1, 1], [2, 2], [3, 3]])
 y = np.array([0, 0, 1, 1])
 \
 # 데이터를 훈련 세트와 테스트 세트로 분리
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
 \
 # SVM 모델 생성 및 훈련
 model = svm.SVC(kernel='linear') # 선형 커널 사용
 model.fit(X_train, y_train)
 \
 # 테스트 세트로 예측
 y_pred = model.predict(X_test)
 \
 # 정확도 평가
 accuracy = accuracy_score(y_test, y_pred)
 print('Accuracy:', accuracy)


위 코드는 선형 SVM을 사용하여 간단한 데이터셋을 분류하는 예제이다. scikit-learn 라이브러리를 사용하면 SVM 모델을 쉽게 구현하고 훈련할 수 있다.



🎉 결론
SVM은 강력한 머신러닝 알고리즘으로, 다양한 분야에서 활용되고 있다. 이 글에서는 SVM의 기본적인 개념과 작동 원리, 그리고 간단한 예제를 통해 SVM을 이해하는 방법을 소개했다. SVM은 데이터의 특성에 따라 적절한 커널 함수를 선택하고, 모델의 파라미터를 튜닝하는 것이 중요하다.



핵심 용어 정리:

  • 서포트 벡터 (Support Vector): 결정 경계와 가장 가까운 데이터 포인트
  • 마진 (Margin): 결정 경계와 서포트 벡터 사이의 거리
  • 커널 함수 (Kernel Function): 데이터를 더 높은 차원으로 매핑하는 함수
  • 초평면 (Hyperplane): 고차원 공간에서 데이터를 분리하는 결정 경계
반응형