우당탕탕 도비의 코딩로그

[SVM]SVM(Support Vector Machine) 이란? 본문

AI/Machine_Learning

[SVM]SVM(Support Vector Machine) 이란?

dobbie 2025. 4. 4. 15:55
반응형

**SVM (Support Vector Machine)** 설명에 관한 포스팅입니다.

 

🕵🏻‍♀️ SVM은

Supervised learning 기반의 분류 알고리즘으로, 주어진 데이터를 가장 넓은 margin을 두고 두 개 또는 다중 그룹으로 나누는 최적의 경계선(Hyperplane)을 찾는 것이 핵심!

즉, 데이터를 나누는 가장 좋은 선 또는 면을 찾아주는 알고리즘

 

svm

💡핵심 개념

 

SVM이 찾는 선은 마진(Margin)이 가장 넓은 경계선입니다.

  • Hyperplane(초평면): 데이터를 나누는 선 또는 면
  • Support Vectors(서포트 벡터): 경계선과 가장 가까이 위치한 데이터 포인트
  • Margin: 서포트 벡터와 경계선 사이의 거리 → 이 거리를 최대화함
"가장 마진이 넓은 선이 가장 일반화(generalization)가 잘 될 것이다!"

 

🧠 데이터가 직선으로 나누어질 수 없을때는,

 

비선형 분류: Kernel Trick 을 사용해서 고차원으로 데이터를 변환하여 분리!

 

대표적인 커널 종류:

  • RBF (Radial Basis Function)
  • Polynomial
  • Sigmoid 

🔎 SVM이 쓰이는 곳

  • 스팸 메일 필터링
  • 신용카드 사기 탐지
  • 이미지 분류 (얼굴 인식 등)
  • 바이오 분야 질병 진단

실제로 금융, 헬스케어, 보안 분야 등에서 널리 활용

 

🧐 장점 VS 단점

장점 단점
경계가 명확할 때 높은 정확도 큰 데이터셋에는 학습 속도가 느릴 수 있음
고차원 데이터에 강함 커널과 파라미터 설정이 까다로움
서포트 벡터만 사용하므로 효율적 노이즈에 민감할 수 있음

 

👩‍💻 SVM을 활용한 Iris 분류 문제 예제 코드

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)

model = SVC(kernel='rbf')
model.fit(X_train, y_train)

accuracy = model.score(X_test, y_test)
print("정확도:", accuracy)

 

👩‍💻 학습된 SVM 모델의 직선 y = ax + b 구하는 방법

import numpy as np

coefficient = np.array(svc.coef_)

a1 = coefficient[0][0]
a2 = coefficient[0][1]

intercept = svc.intercept_

a = -(a1/a2)
b = -(intercept[0]/a2)

print(f"y = {a}x + {b}")
반응형
Comments