
이 문서는 머신러닝 인강을 보면서 SVM(Support Vector Machine) 알고리즘을 정리한 내용입니다.
강의에서 설명이 빠르게 지나간 부분이나, 스스로 더 궁금했던 내용을 보충해서 정리했습니다.
SVM은 지도학습(Supervised Learning) 알고리즘 중 하나로
이진 분류 문제에 주로 사용되며, 회귀 문제로도 확장 가능합니다.
처음엔 단순히 "선을 그어 분류한다"고 생각했지만,
"어떻게 선을 그을까?"가 핵심이라는 걸 깨달았습니다.

모델 학습 시 모든 데이터를 쓰지 않고,
Support Vector만 사용해서 계산량을 줄이고 일반화 성능을 높입니다.
Minimize: (1/2) * ||w||²
Subject to: yᵢ(w·xᵢ + b) ≥ 1
Minimize: (1/2)||w||² + C * ∑ ξᵢ
Subject to: yᵢ(w·xᵢ + b) ≥ 1 - ξᵢ, ξᵢ ≥ 0
현실 데이터는 대부분 선형 분리 불가능합니다.
이럴 땐 고차원 공간으로 데이터를 변환해야 선형 분리가 가능해집니다.
근데 고차원 연산은 부담이 크기 때문에,
커널 트릭(Kernel Trick)을 통해 효율적으로 계산합니다.
| 커널 | 설명 |
|---|---|
| Linear | 선형 문제 |
| Polynomial | 다항식 특성 확장 |
| RBF (가우시안) | 비선형 문제 대응에 가장 널리 사용됨 |
| Sigmoid | 신경망에서 사용되는 함수 기반 |
| 파라미터 | 설명 |
|---|---|
| C | 오차 허용도. 크면 정확하지만 과적합 위험 |
| gamma | RBF에서 포인트의 영향력 반경 조절 |
| kernel | 어떤 커널 함수를 쓸지 설정 |
| 설정 | 분류 경계 | 과적합 위험 | 일반화 |
|---|---|---|---|
| C ↓ | 마진 넓음 | 과소적합 가능 | ↑ |
| C ↑ | 마진 좁음 | 과적합 가능 | ↓ |
| gamma ↓ | 부드러운 경계 | 낮음 | ↑ |
| gamma ↑ | 복잡한 경계 | 높음 | ↓ |


from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': [0.001, 0.01, 0.1, 1],
'kernel': ['rbf']
}
grid = GridSearchCV(SVC(), param_grid, cv=5)
grid.fit(X_train, y_train)
Scikit-learn을 사용하면 간단하게 하이퍼파라미터 튜닝이 가능합니다.

StandardScaler)| 항목 | 설명 |
|---|---|
| 마진 | Support Vector와 경계 간 거리 |
| C | 마진과 오차 간 균형 조절 |
| gamma | 포인트 영향 범위 조절 |
| 커널 | 고차원 비선형 문제 해결 방식 |
| GridSearch | 자동 파라미터 최적화 |
처음엔 그냥 복잡해 보였는데,
결국 핵심은 "어떤 기준으로 데이터를 나눌 것인가"였음.
수학적으로 최적화된 경계를 찾는 게 포인트고,
커널 트릭이나 C/gamma 튜닝을 하면서 모델이 어떻게 달라지는지 직접 보는 것이 제일 중요했다.