Support Vector Machine (SVM)
서포트 벡터 머신(SVM)은 마진이 가장 넓은 초평면으로 클래스를 분리하고 커널을 사용해 곡선형 경계를 형성합니다. 작동 원리, 튜닝, 코드를 다룹니다.
서포트 벡터 머신(SVM)은 지도 학습 알고리즘으로, 두 클래스를 가능한 한 넓은 마진으로 분리하는 초평면을 찾아 데이터를 분류합니다. 마진은 경계와 각 클래스에서 가장 가까운 학습 데이터 포인트 사이의 간격입니다. 서포트 벡터라고 하는 가장 가까운 포인트만 경계를 결정하는 학습 예제입니다. 커널 함수는 SVM이 곡선형 경계를 학습하도록 하며, 변형 모델은 회귀와 이상치 탐지도 처리합니다. Vladimir Vapnik과 동료들은 AT&T Bell Labs에서 이 방법을 개발했으며, 1992년에 커널 버전을 발표했고 현재 사용되는 소프트 마진 공식은 Cortes와 Vapnik이 1995년에 발표했습니다. 딥러닝이 등장하기 전 SVM은 텍스트, 이미지, 생물학 데이터에서 가장 정확한 분류기 중 하나였으며, 현재도 특성이 많은 중소 규모 데이터셋에서 뛰어난 성능을 보입니다.
SVM 작동 방식#
선형 SVM은 w·x + b의 부호로 클래스를 예측하므로 결정 경계는 초평면 w·x + b = 0입니다. 가장 가까운 포인트가 |w·x + b| = 1을 만족하도록 가중치를 조정하면 마진 폭은 2/‖w‖입니다. 학습에서는 모든 학습 포인트가 마진의 올바른 쪽에 위치하도록 하면서 ‖w‖²을 최소화해 마진을 최대화합니다. 실제 클래스는 겹치므로 소프트 마진 SVM은 정규화 파라미터 C로 정해지는 비용을 부과하며 포인트가 마진을 넘도록 허용합니다. 힌지 손실은 마진을 넘어 올바르게 분류된 포인트에는 비용을 부과하지 않고, 나머지 포인트에는 위반 정도에 비례해 증가하는 페널티를 부과합니다. C가 작으면 더 많은 위반을 허용해 더 넓고 매끄러운 마진을 만들며, C가 크면 학습 데이터에 더 잘 맞추는 대신 과적합 위험이 커집니다. 학습된 모델에서는 마진 위에 있거나 마진의 잘못된 쪽에 있는 포인트만 0이 아닌 가중치를 갖습니다. 이러한 포인트가 서포트 벡터이며, 다른 포인트를 마진 밖으로 이동시키지 않는 한 경계는 바뀌지 않습니다.
커널 트릭#
초평면으로 클래스를 분리할 수 없는 경우 데이터를 더 높은 차원으로 매핑하면 분리할 수 있습니다. 예를 들어 2D의 동심원은 세 번째 특성 x₁² + x₂²이 각 포인트와 중심 사이의 거리를 측정하도록 하면 평면으로 분리할 수 있습니다. 쌍대 형식의 SVM 학습과 예측은 포인트 쌍의 내적만 사용하므로, 커널 함수 k(x, x′)는 매핑된 좌표를 실제로 계산하지 않고도 매핑 공간의 내적을 직접 반환할 수 있습니다. 이를 커널 트릭이라고 합니다. 일반적인 커널은 선형, 다항식, 방사 기저 함수(RBF) exp(−γ‖x − x′‖²)이며, 여기서 γ는 각 서포트 벡터의 영향 범위를 결정합니다. 이 예제에서는 두 동심원에 선형 커널과 RBF 커널을 적용해 scikit-learn의 SVC를 학습합니다.
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# Two concentric rings: no straight line separates the classes
X, y = make_circles(n_samples=500, factor=0.4, noise=0.1, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
for kernel in ("linear", "rbf"):
clf = SVC(kernel=kernel, C=1.0)
clf.fit(X_train, y_train)
print(f"{kernel}: test accuracy {clf.score(X_test, y_test):.2f}, support vectors {clf.n_support_.sum()}")선형 커널은 홀드아웃 포인트에서 0.43점을 기록해 무작위 추측보다 성능이 낮으며, 학습 포인트 375개 중 360개를 서포트 벡터로 유지합니다. RBF 커널은 서포트 벡터 42개만으로 동심원을 완벽하게 분리합니다(1.00).
커널과 하이퍼파라미터 선택#
거리와 내적은 특성 스케일에 영향을 받으므로 SVM 입력은 먼저 표준화합니다. scikit-learn의 SVC가 사용하는 라이브러리인 LIBSVM 저자들의 실용 가이드에서는 특성을 스케일링하고, RBF 커널부터 시작한 다음 그리드 검색과 교차 검증으로 C와 γ를 선택할 것을 권장합니다. 텍스트처럼 샘플보다 특성이 훨씬 많은 경우 선형 커널의 성능은 대체로 비슷하면서 학습 속도는 훨씬 빠릅니다. 커널 SVM의 학습 시간은 샘플 수에 따라 최소 제곱 규모로 증가하므로, 샘플이 수만 개를 넘으면 정확한 커널 모델 대신 선형 SVM이나 근사 커널 특성을 사용합니다.
컴퓨터 비전에서의 SVM#
초기 컴퓨터 비전에서는 사람이 설계한 특성과 선형 SVM을 결합했습니다. Dalal과 Triggs가 2005년에 개발한 보행자 검출기는 방향성 그래디언트 히스토그램(HOG)을 선형 SVM으로 분류했습니다. 2014년 R-CNN 객체 검출기는 2015년 Fast R-CNN이 네트워크와 함께 학습되는 소프트맥스 계층으로 대체할 때까지 영역 제안마다 하나의 선형 SVM을 사용해 CNN 특성을 분류했습니다. 최신 검출기는 특성과 분류기를 함께 학습하며, SVM은 고정된 특성에 적용하는 고속 분류기로 여전히 사용됩니다. YOLO26이 model.embed()에서 반환하는 벡터(이미지당 하나의 임베딩)로 학습한 선형 SVM은 네트워크를 다시 학습하지 않고 새 이미지 카테고리를 추가하는 선형 프로브입니다.
응용 분야#
- 텍스트 분류: 단어 빈도 벡터에는 희소한 차원이 수만 개 포함됩니다. 선형 SVM은 이러한 공간에서 주제, 스팸, 감정을 정확하게 분류하며, Thorsten Joachims는 1998년 텍스트 범주화에서 이점을 입증했습니다.
- 생물정보학: 유전자 발현 연구에서는 수천 개의 유전자를 측정하고 환자는 수십 명 또는 수백 명뿐인 상황에서 종양을 분류합니다. 이런 환경에서는 마진이 과적합을 제한하며, 문자열 커널은 단백질 서열을 직접 비교합니다.
- 이상 탐지: 원클래스 SVM은 정상 데이터만을 둘러싸는 경계를 학습하고 그 바깥의 포인트를 표시합니다. 따라서 오류가 너무 드물어 라벨링하기 어려운 사기 탐지와 장비 모니터링에 적합합니다.
- 회귀: 서포트 벡터 회귀는 폭이 ε인 튜브 안에 함수를 맞추고 ε보다 작은 오차는 무시하며, 튜브 위나 바깥에 있는 포인트만 서포트 벡터로 유지합니다.
SVM과 관련 알고리즘 비교#
- K-최근접 이웃(KNN): 학습 데이터 전체를 저장하고 예측 시 새 포인트를 이웃과 비교하는 반면, SVM은 서포트 벡터만 유지합니다.
- 결정 트리와 랜덤 포레스트: 한 번에 특성 하나를 기준으로 분기하고 특성 스케일링이 필요 없으며 숫자형 및 범주형 열을 함께 처리합니다. 반면 SVM에는 숫자형으로 스케일링된 입력이 필요합니다.
- 신경망: 커널로 매핑을 고정하는 대신 데이터에서 특성 매핑을 학습하므로, 커널 SVM의 처리 속도가 지나치게 느려지는 수백만 장 규모의 이미지까지 확장할 수 있습니다.
- 로지스틱 회귀: 선형 경계도 학습하지만 모든 학습 포인트에 대해 로그 손실을 최소화하고 확률을 출력합니다. SVM은 경계로부터의 부호 있는 거리를 출력하며, scikit-learn의 SVC는 내부 5겹 교차 검증을 통해 Platt 스케일링을 수행하는
probability=True을 사용할 때만 확률을 출력합니다.










