본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] SVM 커널 트릭의 3가지 핵심 원리와 비선형 데이터 해결 방법

by Papa Martino V 2026. 4. 8.
728x90

SVM(Support Vector Machine)
SVM (Support Vector Machine)

데이터 과학의 세계에서 선형적으로 분리되지 않는 복잡한 데이터를 처리하는 것은 매우 까다로운 작업입니다. SVM(Support Vector Machine)의 핵심 기술인 커널 트릭(Kernel Trick)은 저차원의 데이터를 직접 고차원으로 계산하여 옮기지 않고도, 마치 고차원에서 데이터를 다루는 것과 같은 효과를 내는 혁신적인 수학적 기법입니다. 본 포스팅에서는 커널 트릭의 내부 메커니즘을 심도 있게 분석하고 파이썬을 이용한 실무 적용 예제를 상세히 다룹니다.


1. 커널 트릭(Kernel Trick)이란 무엇인가?

단순한 직선이나 평면으로 나눌 수 없는 데이터셋을 만났을 때, 우리는 흔히 데이터를 더 높은 차원으로 보내 해결하려고 합니다. 예를 들어 2차원 평면의 점들을 3차원 공간으로 보내면 선형 분리가 가능해질 수 있습니다. 하지만 실제 고차원 계산은 메모리와 연산 비용이 기하급수적으로 증가하는 '차원의 저주'를 유발합니다.

커널 트릭의 핵심: 데이터를 실제로 고차원으로 변환하는 대신, 저차원에서 데이터 간의 내적(Dot Product)만을 계산하여 고차원에서의 거리를 알아내는 함수(커널 함수)를 사용하는 것입니다.

주요 커널 함수의 종류 및 차이점 비교

커널 명칭 수학적 정의 주요 특징 적합한 데이터 유형
Linear (선형) $K(x_i, x_j) = x_i^T x_j$ 가장 단순하고 빠름 선형 분리가 가능한 대량의 특성
RBF (가우시안) $\exp(-\gamma ||x_i - x_j||^2)$ 가장 널리 쓰이며 강력함 복잡한 비선형 관계의 일반 데이터
Polynomial (다항식) $(\gamma x_i^T x_j + r)^d$ 차수(d)에 따라 유연성 결정 특성 간의 조합이 중요한 데이터
Sigmoid (시그모이드) $\tanh(\gamma x_i^T x_j + r)$ 신경망의 활성화 함수와 유사 인공신경망 구조 모방 시 사용

2. 왜 커널 트릭을 사용해야 하는가? (장점 3가지)

  • 연산 효율성: 복잡한 고차원 좌표 계산 과정을 생략하고 단순한 내적 연산으로 대체하여 속도를 비약적으로 높입니다.
  • 강력한 비선형성: 무한 차원(RBF 커널의 경우)까지 고려할 수 있어, 어떤 형태의 복잡한 경계선도 찾아낼 수 있습니다.
  • 메모리 절약: 고차원 데이터를 생성하여 저장할 필요가 없으므로 대규모 데이터셋에서도 구동이 가능합니다.

3. 실전 파이썬 SVM 커널 트릭 활용 Example 7가지

실무 환경에서 데이터 특성에 맞춰 커널을 선택하고 튜닝하는 구체적인 파이썬 코드 예제입니다.

Example 01. 비선형 데이터 생성을 위한 RBF 커널 적용

원형으로 분포되어 직선으로 나눌 수 없는 데이터에 가우시안 커널을 적용하는 기본 예제입니다.

from sklearn.svm import SVC
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt

# 비선형 데이터 생성
X, y = make_circles(n_samples=500, factor=0.1, noise=0.1, random_state=42)

# RBF 커널을 사용하여 학습
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X, y)

print(f"RBF SVM 정확도: {model.score(X, y):.4f}")

Example 02. Gamma 파라미터 제어를 통한 과적합 해결

Gamma는 커널의 영향력 범위를 결정합니다. 너무 크면 과적합, 작으면 과소적합이 발생합니다.

# Gamma 값을 조정하여 모델의 복잡도 제어
# gamma='auto' 또는 구체적인 실수값(0.1, 1, 10 등) 입력 가능
model_high_gamma = SVC(kernel='rbf', gamma=10).fit(X, y)
model_low_gamma = SVC(kernel='rbf', gamma=0.1).fit(X, y)

print(f"High Gamma Score: {model_high_gamma.score(X, y)}")
print(f"Low Gamma Score: {model_low_gamma.score(X, y)}")

Example 03. Polynomial 커널의 차수(Degree) 튜닝

다항식 커널에서 degree를 높이면 더 복잡한 곡선을 그리지만 연산 비용이 증가합니다.

# 3차 다항식 커널 적용
poly_svc = SVC(kernel='poly', degree=3, C=1.0)
poly_svc.fit(X, y)

print(f"Poly Kernel(d=3) Score: {poly_svc.score(X, y)}")

Example 04. GridSearch를 통한 커널 및 C값 최적화

어떤 커널이 최적인지 모를 때, 교차 검증을 통해 최상의 조합을 찾는 실무 필수 기법입니다.

from sklearn.model_selection import GridSearchCV

param_grid = {
    'kernel': ['linear', 'rbf', 'poly'],
    'C': [0.1, 1, 10],
    'gamma': ['scale', 'auto']
}

grid = GridSearchCV(SVC(), param_grid, cv=5)
grid.fit(X, y)

print(f"최적 커널: {grid.best_params_['kernel']}")
print(f"최적 파라미터: {grid.best_params_}")

Example 05. 커널 트릭을 이용한 서포트 벡터(Support Vectors) 확인

모델이 결정 경계를 만들기 위해 선택한 핵심 데이터 포인트를 추출합니다.

# 학습된 모델에서 서포트 벡터 추출
support_vectors = model.support_vectors_

print(f"서포트 벡터 개수: {len(support_vectors)}")
# 시각화 시 이 포인트들을 강조하여 모델 해석에 활용 가능

Example 06. 데이터 스케일링 전처리와 커널 성능의 상관관계

커널 함수는 거리 기반 연산을 수행하므로 StandardScaler 적용 유무가 성능 차이를 만듭니다.

from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

# 파이프라인을 통한 스케일링과 SVM 결합
clf = make_pipeline(StandardScaler(), SVC(kernel='rbf'))
clf.fit(X, y)

print(f"스케일링 적용 후 정확도: {clf.score(X, y)}")

Example 07. 사용자 정의 커널(Custom Kernel) 구현

Scikit-learn에서는 직접 정의한 수학 함수를 커널로 사용할 수 있습니다.

import numpy as np

def my_kernel(X, Y):
    # 단순한 선형 내적 예시 (사용자 정의 가능)
    return np.dot(X, Y.T)

custom_svc = SVC(kernel=my_kernel)
custom_svc.fit(X, y)
print("사용자 정의 커널 학습 완료")

4. 결론 및 실무적 조언

커널 트릭은 SVM을 단순한 분류기에서 강력한 비선형 학습기로 격상시킨 핵심 기술입니다. 하지만 RBF 커널이 항상 만능은 아닙니다. 데이터의 특성 수가 샘플 수보다 훨씬 많은 경우에는 Linear 커널이 더 빠르고 효율적일 수 있습니다. 실무에서는 데이터의 차원과 비선형성을 먼저 파악한 뒤, 위에서 제시한 GridSearch를 통해 모델을 검증하는 프로세스를 권장합니다.

내용 출처 및 참고 자료:

  • Scikit-learn Documentation: Support Vector Machines (User Guide 1.4)
  • Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow (Aurélien Géron)
  • Statistical Learning with Support Vector Machines (Schölkopf & Smola)
  • Pattern Recognition and Machine Learning (Christopher Bishop)
728x90