Allen's 데이터 맛집

SVM(Support Vector Machine) 이란? 본문

Machine Learning/머신러닝

SVM(Support Vector Machine) 이란?

Allen93 2024. 1. 17. 01:23
SVM(Support Vector Machine)에 대한 간단한 소개를 해보려고 합니다. 이 블로그 포스팅에서는 통계와 머신 러닝의 중요한 주제 중 하나인 SVM에 초점을 맞춰 다루어보겠습니다.

 




SVM이란?

SVM은 Support Vector Machine의 약자로, 주로 분류 및 회귀 분석에 사용되는 강력한 머신 러닝 알고리즘입니다. 이는 데이터를 고차원 공간으로 매핑하여 각각의 클래스를 분리하는 초평면을 찾는 것이 핵심 아이디어입니다.


SVM의 기본 원리

SVM의 기본 원리는 데이터를 가장 잘 나누는 초평면을 찾는 것입니다. 이때, 데이터의 일부만이 아닌 Support Vectors라고 불리는 데이터 포인트들이 초평면을 결정하는 데에 주요한 역할을 합니다.


SVM의 간단한 예시

예를 들어, 두 개의 클래스로 나누어진 데이터가 있다고 가정해봅시다. SVM은 이 두 클래스를 가장 잘 나누는 선(2D 공간에서) 또는 초평면(3D 공간 이상에서)을 찾아내려고 노력합니다.

 

from sklearn import svm
import matplotlib.pyplot as plt
import numpy as np

# 간단한 예시를 위한 가상의 데이터 생성
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
y = [0] * 20 + [1] * 20

# SVM 모델 생성 및 학습
clf = svm.SVC(kernel='linear')
clf.fit(X, y)

# 결정 경계 시각화
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# SVM 결정 경계 시각화
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50),
                     np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])

# 등고선 그리기
Z = Z.reshape(xx.shape)
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
           linestyles=['--', '-', '--'])
plt.title('SVM 예시 - 선형 커널')
plt.show()

 

 

SVM의 하이퍼파라미터


SVM은 여러 가지 하이퍼파라미터를 가지고 있습니다. 몇 가지 중요한 것들은 다음과 같습니다:

- Kernel (커널): 데이터를 고차원 공간으로 매핑하기 위한 함수로, 주로 'linear', 'poly', 'rbf', 'sigmoid' 등이 사용됩니다.


- C: 오차 허용 정도를 조절하는 파라미터로, 작을수록 오차를 허용하고 크면 오차를 허용하지 않습니다.


- Gamma: 'rbf' 커널에 사용되며, 데이터 포인트의 영향력을 결정합니다. 작은 값은 멀리 떨어진 데이터까지 고려하고, 큰 값은 가까운 데이터만 고려합니다.

 

 


현업 예시: 이상치 탐지


배경:
고객의 금융 거래 데이터가 주어졌다고 가정해 봅시다. 이 데이터에는 정상적인 거래와 이상 거래가 혼합되어 있습니다. 이상 거래를 탐지하여 사기 거래를 예방하고자 합니다.


해결 방법:

SVM은 이상치 탐지에 효과적으로 사용될 수 있습니다. 정상 거래와 이상 거래의 패턴은 서로 다를 가능성이 높기 때문에 SVM을 활용하여 이상치를 감지할 수 있습니다.

 

 

728x90