← AI 놀이터 홈으로

🛣️ 서포트 벡터 머신 (SVM)

경계선을 긋되 양쪽 무리에서 최대한 멀리! 두 마을 사이에 가장 넓은 길을 내듯, 여유 폭(마진)을 최대화하는 분류기예요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. 문제 소개 — 로지스틱과 뭐가 다르지?

두 무리를 나누는 직선은 사실 무수히 많아요. 로지스틱 회귀는 그중 하나를 찾을 뿐이지만, SVM은 "그냥 나누는" 게 아니라 가장 안전하게 나눠요 — 양쪽 무리에서 최대한 멀리 떨어진 직선! 화면에서 🔵 파랑(+1)과 🔴 빨강(−1)이 두 마을, 굵은 파란 직선이 길의 중심선, 회색 점선 두 줄이 길의 양쪽 가장자리예요.
📂 데이터 꾸러미:

🖱️ 빈 곳을 클릭하면 파랑(+1) 점이 추가되고, 점 근처를 클릭하면 삭제돼요.

📖 읽는 법: 가로·세로축은 두 가지 특징이에요. 굵은 파란 직선이 결정 경계(w·x+b=0), 양옆 회색 점선이 마진 경계(w·x+b=±1), 그 사이가 "길"이에요. 노란 링이 있는 점이 경계를 떠받치는 서포트 벡터 — 이 점들만 경계에 영향을 줘요.

🎛️ 조작하기

클릭으로 추가할 클래스

📊 지금 상태

마진 폭 (길의 너비)
14.14
서포트 벡터
0개
정확도
0 / 0
C
1.00

마진 폭은 2/‖w‖를 데이터 좌표로 환산한 값이에요. 학습이 진행되면 침범 없는 선에서 최대한 넓어져요.

🧮 수식과 파이썬

마진 = 2/‖w‖ → 최대화
마진(여유 폭)을 최대화 — ‖w‖를 최소화하는 것과 같아요.
손실 = max(0, 1 − y(w·x+b))
경계에서 가까운 몇 개의 점(서포트 벡터)만이 경계를 결정해요
🐍 파이썬 코드로 보면? (펼치기)
from sklearn import svm
import numpy as np

X = np.array([[2.5, 3.0], [3.1, 2.2], [2.0, 2.8],   # 🔴 빨강 마을
              [7.2, 7.5], [8.0, 6.9], [7.5, 8.1]])  # 🔵 파랑 마을
y = np.array([-1, -1, -1, 1, 1, 1])

model = svm.SVC(kernel='linear', C=1.0)  # 선형 SVM, C = 엄격함
model.fit(X, y)                          # 가장 넓은 길 찾기!

print(model.support_vectors_)          # 경계를 결정한 점들만 나와요
print(model.predict([[5.0, 5.0]]))     # 새 점은 어느 마을?