
직선으로 풀 수 없는 XOR 문제를, 커널 SVM이 어떻게 해결하는지 코드로 확인합니다
1~4편: 퍼셉트론 → ADALINE → SGD → 로지스틱 회귀 · 5편: SVM · 6편: 결정 트리 & 랜덤 포레스트
SVM이란?
SVM(Support Vector Machine, 서포트 벡터 머신)은 두 클래스 사이의 마진(margin)을 최대화하는 결정 경계를 찾는 알고리즘입니다.
퍼셉트론이나 로지스틱 회귀도 직선으로 데이터를 나누지만, 가능한 직선이 여러 개 있을 때 어떤 것이 "최적"인지는 정하지 않습니다. SVM은 명확한 기준이 있습니다. 결정 경계와 가장 가까운 데이터 포인트(이것을 서포트 벡터라 합니다) 사이의 거리가 최대가 되는 경계를 찾습니다.
선형 SVM으로 붓꽃 분류하기
from sklearn.svm import SVC
svm = SVC(kernel='linear', C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
kernel='linear'는 직선(고차원에서는 초평면)으로 분류하겠다는 의미입니다. C는 로지스틱 회귀와 마찬가지로 규제 강도를 조절합니다. C가 크면 모든 데이터를 맞추려 하고(과적합 위험), C가 작으면 일부 오분류를 허용하더라도 마진을 넓게 잡습니다.
선형 SVM의 한계 — XOR 문제
직선(선형)으로 분류할 수 없는 대표적인 문제가 XOR 문제입니다. XOR은 두 입력이 같으면 한 클래스, 다르면 다른 클래스인 논리 연산입니다.
np.random.seed(1)
X_xor = np.random.randn(200, 2)
y_xor = np.logical_xor(X_xor[:, 0] > 0, X_xor[:, 1] > 0)
y_xor = np.where(y_xor, 1, -1)
이 데이터를 산점도로 보면, 1사분면과 3사분면이 한 클래스, 2사분면과 4사분면이 다른 클래스입니다. 직선 하나로는 절대 분리할 수 없습니다.
커널 트릭이란?
직선으로 분리가 안 되면 어떻게 해야 할까요? 아이디어는 이렇습니다. 데이터를 더 높은 차원으로 보내면 직선(초평면)으로 분리할 수 있게 됩니다.
예를 들어 2차원에서 분리할 수 없는 데이터도, 3차원으로 올리면 평면 하나로 깔끔하게 나눌 수 있는 경우가 있습니다. 하지만 실제로 데이터를 고차원으로 변환하면 계산량이 폭발적으로 늘어납니다.
커널 트릭(Kernel Trick)은 실제로 고차원 변환을 하지 않고, 고차원에서의 내적 결과만 효율적으로 계산하는 수학적 기법입니다. 결과적으로, 적은 계산량으로 고차원에서의 분류 효과를 얻을 수 있습니다.
RBF 커널 SVM으로 XOR 문제 풀기
가장 많이 쓰이는 커널은 RBF(Radial Basis Function, 방사 기저 함수) 커널입니다.
kernel_svm = SVC(kernel='rbf', random_state=1, gamma=0.1, C=1.0)
kernel_svm.fit(X_xor, y_xor)
kernel='rbf' 하나만 바꿨을 뿐인데, 선형 SVM이 전혀 풀지 못했던 XOR 문제가 깔끔하게 해결됩니다. 결정 경계가 곡선으로 그려지면서 4개 영역을 정확히 분리합니다.
gamma 파라미터의 영향
RBF 커널에는 gamma라는 파라미터가 있습니다. 이것은 하나의 데이터 포인트가 영향을 미치는 범위를 조절합니다.
일반화 성능이 좋지만, 복잡한 패턴을 놓칠 수 있음
훈련 데이터에 딱 맞지만, 새 데이터에서 성능이 떨어질 수 있음 (과적합)
GridSearchCV를 사용하면 C와 gamma의 조합을 자동으로 탐색할 수 있습니다.정리와 다음 단계
5편 핵심 정리
SVM은 마진을 최대화하는 결정 경계를 찾아, 일반화 성능을 높입니다.
선형 SVM은 직선으로 분리 가능한 데이터에 효과적이지만, XOR 같은 비선형 문제는 풀 수 없습니다.
커널 트릭은 데이터를 고차원으로 매핑하여 비선형 분류를 가능하게 하되, 계산 효율을 유지합니다.
gamma가 크면 과적합, 작으면 과소적합 위험이 있으므로 적절한 값을 찾는 것이 중요합니다.
👉 6편: 결정 트리와 랜덤 포레스트 — 트리 기반 분류의 모든 것
표준화 없이도 작동하고, 분류 과정을 눈으로 볼 수 있는 트리 모델을 구현합니다.
신경망 밑바닥부터 구현하기 시리즈 [5편]
'정보 > IT 지식 정보' 카테고리의 다른 글
| 범주형 데이터 인코딩이란?매핑부터 원-핫 인코딩까지 완전 정리 [7편] (0) | 2026.03.27 |
|---|---|
| 결정 트리와 랜덤 포레스트란?트리 기반 분류 완전 정리 [6편] (0) | 2026.03.27 |
| scikit-learn으로 퍼셉트론과 로지스틱 회귀 구현하기 [4편] (0) | 2026.03.26 |
| 확률적 경사 하강법(SGD)이란?대규모 데이터를 위한 학습 방법 [3편] (0) | 2026.03.26 |
| ADALINE이란? 경사 하강법으로 학습하는 신경망 구현하기 [2편] (1) | 2026.03.26 |
댓글