100% 정확도는 포기하고 경계선에만 집중한다
SVM(Support Vector Machine)의 발상은 단순하다. 데이터를 완벽하게 분류하는 곡선을 찾으려 애쓰는 대신, 두 그룹을 나누는 경계선(Decision Boundary) 근처의 데이터에만 집중한다. 경계에서 멀리 떨어진, 이미 잘 분류된 데이터는 경계를 정하는 데 영향을 주지 않는다.
Maximum Margin: 가장 넓은 여백을 가진 경계를 찾는다
SVM은 두 그룹을 나누는 무수히 많은 직선(또는 초평면) 중에서, 양쪽 그룹과의 여백(Margin)이 가장 넓은 것을 고른다. 이 여백의 경계에 걸쳐 있는 데이터 포인트를 서포트 벡터(Support Vector)라고 부르고, 이 이름이 알고리즘 이름의 유래가 됐다. 여백이 넓을수록 새로운 데이터가 조금 다르게 들어와도 잘못 분류될 여지가 줄어든다.
실제 데이터는 완벽히 선형으로 나뉘지 않는 경우가 많다. 이때는 일부 오분류를 허용하는 대신 여백을 넓게 유지하는 Soft Margin을 쓴다. 오분류를 얼마나 허용할지는 뒤에서 볼 C 파라미터가 결정한다.
선형으로 안 되면 커널로 차원을 바꾼다
두 그룹이 직선 하나로 나뉘지 않는 경우도 많다. 이럴 때 SVM은 데이터를 더 높은 차원의 공간으로 옮겨서, 그 공간에서는 선형으로 나뉘도록 만드는 커널(Kernel) 기법을 쓴다. “Kernel”은 독일어로 핵심·중심을 뜻하는데, 여기서는 두 데이터 포인트 사이의 관계(유사도)를 계산하는 함수를 뜻한다. 실제로 데이터를 고차원으로 옮기는 계산을 직접 하지 않고도 그 효과를 얻을 수 있다는 것이 커널 기법의 핵심(Kernel Trick)이다.
하이퍼파라미터 C와 gamma
SVM(RBF 커널 기준)의 복잡도는 주로 두 하이퍼파라미터로 조절한다.
파라미터 | 의미 | 값이 클 때 | 값이 작을 때 |
|---|---|---|---|
C (Cost) | 오분류에 얼마나 벌점을 줄지 결정 — 마진 위반을 얼마나 허용할지 조절 | 오분류를 최대한 줄이려다 마진이 좁아지고 과적합 위험 증가 | 마진을 넓게 잡아 일부 오분류를 허용, 지나치면 과소적합 |
gamma | 한 데이터 포인트의 영향이 얼마나 멀리까지 미치는지 결정 (RBF 커널) | 가까운 데이터에만 민감하게 반응해 경계가 복잡해지고 과적합 위험 증가 | 먼 데이터까지 영향을 줘 경계가 단순해지고 과소적합 위험 증가 |
scikit-learn의 SVC는 gamma의 기본값으로 'scale'(= 1 / (특성 수 × X의 분산))을 쓴다. C와 gamma는 함께 조절하며 최적화하는 경우가 많다.
코드로 확인하기
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
X, y = make_moons(n_samples=200, noise=0.2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(X_train, y_train)
print(round(accuracy_score(y_test, model.predict(X_test)), 3))
0.967
초승달 두 개가 겹친 모양처럼 선형으로 나눌 수 없는 데이터( make_moons)에서도 RBF 커널 SVM은 비선형 경계를 학습해 높은 정확도를 낸다. 값은 scikit-learn 버전에 따라 소수점 뒤가 달라질 수 있다.
언제 SVM을 고려할까
표본 수는 적은데 변수는 많은 고차원 데이터(예: 유전자 발현 데이터, 텍스트 벡터)에 강하다.
EDA로 비선형 경계가 필요하다는 것을 확인했을 때 커널 SVM을 우선 고려할 수 있다.
반대로 변수가 매우 많고 관계가 대체로 선형이라면, SVM보다 해석이 쉬운 정규화 회귀(LASSO 등)가 더 적합할 수 있다.
데이터가 아주 크면(수백만 행 이상) 학습 시간이 급격히 늘어난다는 점도 고려해야 한다.
정리
SVM은 데이터 전체를 다 맞추려 하지 않고, 경계 근처 데이터로 여백이 가장 넓은 경계를 찾는 알고리즘이다. 선형으로 안 되면 커널로 차원을 바꿔 비선형 경계를 만들고, C와 gamma로 과적합·과소적합의 균형을 맞춘다. 표본이 적고 변수가 많은 고차원 데이터, 비선형 경계가 필요한 상황에서 특히 좋은 선택지가 된다.
참고 자료
SVC — scikit-learn 공식 문서 — C·gamma 파라미터 정의와 기본값 (2026-08-07 확인)
RBF SVM parameters — scikit-learn 공식 예제 — C·gamma 조합에 따른 결정 경계 변화 시각화 (2026-08-07 확인)
댓글 0
댓글을 불러오는 중…