끄적이는 개발노트
260612_강의 정리 (SVM) 본문
728x90
machine learning · scikit-learn
SVM — 서포트 벡터 머신 정리
- 퍼셉트론의 선형 분류기를 수학적으로 정교하게 발전시킨 모델
- 마진 최대화, 서포트 벡터, 커널 트릭의 핵심 개념 정리
- scikit-learn의 7가지 SVM 모델과 주요 하이퍼파라미터 안내
1. SVM이란 무엇인가?
"두 클래스 사이의 경계를 가장 넓게 벌려서 긋는 것" — SVM의 핵심 아이디어
- 퍼셉트론의 선형 분류기를 수학적으로 정교하게 발전시킨 모델임
- 단순히 분류 경계선을 긋는 것이 아니라, 경계선과 데이터 사이의 간격(마진)을 최대화하는 경계를 찾음
- 마진이 클수록 새로운 데이터에 대한 일반화 성능이 높아짐
- 분류(SVC)와 회귀(SVR) 문제 모두에 적용 가능함
💡 새 개념
결정 경계 Decision Boundary / Optimal Hyperplane
- 두 클래스를 나누는 경계선(2D) 또는 초평면(고차원)
- SVM은 가능한 경계 중 마진이 가장 큰 것을 선택함
직선 하나로 고양이와 개를 분류한다면, SVM은 고양이들과 개들로부터 가장 멀리 떨어진 직선을 찾음
서포트 벡터 Support Vectors
- 결정 경계에 가장 가까이 있는 데이터 포인트들
- 이 포인트들만이 결정 경계의 위치를 결정함 — 나머지 데이터는 영향을 주지 않음
줄다리기에서 맨 앞줄에 선 선수들만이 경계선 위치를 결정하는 것과 같음
마진 Margin
- 결정 경계와 가장 가까운 서포트 벡터 사이의 거리
- SVM의 목표 = 이 마진을 최대화하는 것 (Margin Optimization)
도로의 중앙선을 양쪽 차선으로부터 가장 멀리 떨어진 곳에 긋는 것
📐 결정 함수 (Decision Function)
d(x) = (wᵀx + b) / ‖w‖
d(x)점 x가 결정 경계로부터 얼마나 떨어져 있는지를 나타내는 부호 있는 거리. 양수면 한쪽 클래스, 음수면 반대 클래스로 분류됨
wᵀ가중치 벡터 w의 전치(transpose). 결정 경계의 방향을 결정함
x분류할 입력 데이터 벡터
b편향(bias). 결정 경계가 원점에서 얼마나 이동했는지를 나타냄
‖w‖가중치 벡터의 크기(노름). 거리를 정규화해 실제 공간의 거리로 변환함
핵심 요약
· SVM은 서포트 벡터들만을 기반으로 결정 경계를 정의함
· 결정 함수 d(x)의 부호로 클래스를 판별하고, 절댓값으로 확신도를 나타냄
· SVM은 서포트 벡터들만을 기반으로 결정 경계를 정의함
· 결정 함수 d(x)의 부호로 클래스를 판별하고, 절댓값으로 확신도를 나타냄
2. 분류 방식 — 2진 분류와 다중 분류
SVM은 원래 2진 분류기이지만, 전략을 통해 다중 클래스도 처리할 수 있음
- 2진 분류: Hinge Loss를 최소화하는 방향으로 학습함
- 다중 분류: OvO 또는 OvR 전략을 통해 여러 2진 분류기를 조합함
💡 새 개념
Hinge Loss
- SVM의 손실 함수. 올바르게 분류했더라도 마진 안에 있으면 손실이 발생함
- 결정 경계로부터 충분히 먼 데이터는 손실 = 0 (그래프에서 0으로 평탄해지는 부분)
마진 경계(+1) 바깥에 있으면 패널티 없음. 마진 안에 들어올수록 패널티가 선형적으로 증가함
OvO (One-vs-One)
- 모든 클래스 쌍마다 분류기를 하나씩 학습시키는 전략
- N개 클래스 → N(N-1)/2개의 분류기 필요
3가지 꽃 종류 분류 시: (A vs B), (B vs C), (A vs C) 3개의 분류기를 만들어 다수결로 결정
OvR (One-vs-Rest) / OvM
- 각 클래스를 나머지 전체와 구분하는 분류기를 학습시키는 전략
- N개 클래스 → N개의 분류기 필요
3가지 꽃 분류 시: (A vs 나머지), (B vs 나머지), (C vs 나머지)를 만들어 가장 확신 높은 쪽 선택
분류 전략 선택 기준
· 클래스 수가 적고 데이터가 많으면 → OvO가 유리 (각 분류기가 작은 데이터로 학습)
· 클래스 수가 많고 학습 속도가 중요하면 → OvR이 유리 (분류기 수가 적음)
· 클래스 수가 적고 데이터가 많으면 → OvO가 유리 (각 분류기가 작은 데이터로 학습)
· 클래스 수가 많고 학습 속도가 중요하면 → OvR이 유리 (분류기 수가 적음)
3. 커널 트릭 — 비선형 분류의 비밀
"직선으로 분류할 수 없을 때, 차원을 높여서 선형 분류가 가능하게 만드는 것" — 커널의 핵심
- 현실 데이터는 직선 하나로 깔끔히 나뉘지 않는 경우가 많음
- 데이터를 더 높은 차원으로 변환(φ)하면, 그 공간에서는 선형 분류가 가능해짐
- 커널 함수는 이 변환을 실제로 계산하지 않고도 고차원 내적 결과를 계산하는 수학적 트릭임
💡 새 개념
커널 함수 Kernel Function
- 두 데이터 포인트를 고차원에서 변환 후 내적한 결과를 직접 계산하는 함수
- 실제로 고차원 공간으로 이동하지 않아도 되므로 계산이 효율적임
2D에서 XOR처럼 원형으로 얽힌 데이터를 3D로 올리면 평면으로 나눌 수 있게 됨
커널 종류
| 커널 | 특징 | 파라미터 | 적합한 상황 |
|---|---|---|---|
| linear | 선형 분류. 변환 없이 원래 공간에서 작동 | 없음 | 고차원·대용량 데이터, 선형 분리 가능한 경우 |
| poly | 다항식 특징 조합을 통한 비선형 분류 | degree, coef0 | 특징 간 곱셈 관계가 중요한 데이터 |
| rbf | 가우시안 커널. 가장 많이 쓰이는 범용 커널 | gamma | 기본값; 비선형 구조를 모를 때 |
| sigmoid | 신경망의 활성화 함수와 유사한 형태 | gamma, coef0 | 특수한 경우에 한해 사용 |
RBF 커널 — gamma 파라미터의 의미
· gamma = 가우시안 커널 폭의 역수 (1/σ²)
· gamma 작음 → 넓은 영역을 고려 → 경계가 부드러워짐 (과소적합 위험)
· gamma 큼 → 각 점 주변 좁은 영역만 고려 → 경계가 구불구불해짐 (과적합 위험)
· gamma = 가우시안 커널 폭의 역수 (1/σ²)
· gamma 작음 → 넓은 영역을 고려 → 경계가 부드러워짐 (과소적합 위험)
· gamma 큼 → 각 점 주변 좁은 영역만 고려 → 경계가 구불구불해짐 (과적합 위험)
4. 주요 하이퍼파라미터
SVM 성능을 결정하는 세 가지 핵심 조절 손잡이
C
규제 매개변수 (Fudge Factor)
오분류를 얼마나 허용할지 결정하는 손잡이
- C가 크면 오분류를 최대한 줄이려 함 → 마진이 좁고 경계가 복잡해짐 → 과적합 위험
- C가 작으면 오분류를 어느 정도 허용함 → 마진이 넓고 경계가 단순해짐 → 일반화에 유리
→ "시험에서 1문제 틀려도 되냐(C 작음) vs 무조건 다 맞아야 하냐(C 큼)"의 차이
gamma
가우시안 커널 폭의 역수 (RBF/poly/sigmoid)
각 데이터 포인트의 영향이 미치는 반경을 결정함
- 작은 값 → 넓은 영역에 영향 → 경계가 부드럽고 완만함
- 큰 값 → 좁은 영역에만 영향 → 경계가 각 데이터 주변에 꼭 맞게 구불구불해짐
ν (nu)
Nu 파라미터 (NuSVC / NuSVR 전용)
C 대신 직관적인 비율(0~1)로 모델을 조절하는 파라미터
- 이상치(Outlier) 허용 비율의 상한: ν = 0.1이면 전체 데이터의 최대 10%까지 오분류 허용
- 서포트 벡터 비율의 하한: 최소 ν × 100% 이상의 데이터가 서포트 벡터가 됨
- C처럼 스케일에 영향받지 않으므로 직관적으로 해석하기 쉬움
파라미터 튜닝 방향
· 모델이 너무 복잡함(과적합) → C 줄이기 또는 gamma 줄이기
· 모델이 너무 단순함(과소적합) → C 키우기 또는 gamma 키우기
· C와 gamma를 동시에 GridSearchCV로 탐색하는 것이 일반적임
· 모델이 너무 복잡함(과적합) → C 줄이기 또는 gamma 줄이기
· 모델이 너무 단순함(과소적합) → C 키우기 또는 gamma 키우기
· C와 gamma를 동시에 GridSearchCV로 탐색하는 것이 일반적임
5. scikit-learn SVM 모델 7종
목적과 데이터 규모에 따라 적합한 SVM 클래스를 선택함
분류 (Classification)
svm.SVC
Support Vector Classifier
가장 표준적인 SVM 분류기. 커널 지원, 소규모~중규모 데이터에 적합
- 커널: linear / poly / rbf / sigmoid 모두 지원
- 다중 분류 전략: OvO 기본값
- 확률 예측이 필요하면
probability=True 설정 → Platt Scaling 적용됨
svm.LinearSVC
Linear Support Vector Classifier
선형 커널에 특화된 고속 분류기. 대용량 데이터에 적합
- liblinear 라이브러리 사용 → SVC(kernel='linear')보다 훨씬 빠름
- 다중 분류 전략: OvR 기본값
- 확률값 직접 출력 불가 (
predict_proba 미지원)
svm.NuSVC
Nu Support Vector Classifier
C 대신 ν(nu) 파라미터로 조절하는 분류기
- SVC와 수학적으로 동등하지만, 파라미터를 직관적 비율(0~1)로 설정 가능
- ν가 이상치 허용 비율의 상한을 직접 제어함
회귀 (Regression)
svm.SVR
Support Vector Regressor
SVM을 회귀 문제에 적용한 버전. ε(epsilon) 마진 내 오차는 무시함
- 커널: SVC와 동일하게 linear / poly / rbf / sigmoid 지원
- ε(epsilon) 파라미터로 허용 오차 범위를 설정함
svm.LinearSVR
Linear Support Vector Regressor
선형 회귀에 특화된 고속 SVR. 대용량 데이터에 적합
- LinearSVC의 회귀 버전으로, 대규모 데이터셋에서 SVR보다 빠름
svm.NuSVR
Nu Support Vector Regressor
ν 파라미터로 서포트 벡터 비율을 조절하는 회귀 모델
- NuSVC의 회귀 버전. ε 대신 ν로 서포트 벡터 수를 제어함
이상 탐지 (Anomaly / Novelty Detection)
svm.OneClassSVM
One-Class SVM
"정상" 데이터만 학습하여 이상치(신규 이상 패턴)를 탐지하는 비지도 모델
- 정상 데이터만으로 학습 → 경계 밖의 데이터를 이상치로 판단함
- ν 파라미터로 이상치 허용 비율을 조절함
- 결정 경계를 점수화하여 이상 여부를 판정함
신용카드 사기 탐지, 네트워크 침입 탐지, 제조 불량 검출 등에 활용
모델 선택 가이드
· 일반 분류, 소규모 데이터 → svm.SVC
· 대용량 선형 분류 → svm.LinearSVC
· 이상치 비율을 직접 설정하고 싶음 → svm.NuSVC / NuSVR
· 이상 탐지 → svm.OneClassSVM
· 일반 분류, 소규모 데이터 → svm.SVC
· 대용량 선형 분류 → svm.LinearSVC
· 이상치 비율을 직접 설정하고 싶음 → svm.NuSVC / NuSVR
· 이상 탐지 → svm.OneClassSVM
6. 확률 출력 — Platt Scaling
SVM은 기본적으로 클래스 레이블만 출력함. 확률이 필요할 땐 Platt Scaling을 사용함
- SVM의 결정 함수 d(x)는 "얼마나 떨어져 있는가"를 나타낼 뿐, 확률이 아님
- Platt Scaling은 이 점수 f(x)를 시그모이드 함수에 통과시켜 확률로 변환하는 후처리 기법임
- scikit-learn에서는
SVC(probability=True) 로 활성화하며, 내부적으로 교차 검증을 추가 수행하므로 학습 시간이 늘어남
📐 Platt Scaling 변환 수식
P(y=1|x) = 1 / (1 + exp(A·f(x) + B))
P(y=1|x)입력 x가 클래스 1일 확률
f(x)SVM 결정 함수의 출력값 (부호 있는 거리)
A, B훈련 데이터로 학습하는 스케일링 파라미터 (로지스틱 회귀로 추정)
exp(·)자연 지수 함수. 어떤 값이든 0~1 사이의 확률로 변환해 줌
SVM 학습
→
결정 함수 f(x) 출력
→
Platt Scaling (A·f(x)+B)
→
확률 P(y=1|x)
주의
·probability=True 는 내부적으로 5-fold 교차검증을 수행하므로 학습이 약 5배 느려짐
· 확률이 반드시 필요한 경우에만 사용하고, 단순 분류가 목적이라면 기본값(False) 유지를 권장함
·
· 확률이 반드시 필요한 경우에만 사용하고, 단순 분류가 목적이라면 기본값(False) 유지를 권장함
7. 전체 개념 흐름 요약
데이터 입력
→
커널로 고차원 변환
→
마진 최대화
→
서포트 벡터 결정
→
결정 경계 확정
→
(선택) Platt Scaling
→
분류/회귀 결과
마진 최대화
커널 트릭
서포트 벡터
C / gamma / nu
이상 탐지
Platt Scaling
SVC / SVR
728x90
'머신러닝' 카테고리의 다른 글
| 260616_강의 정리 (신경망) (0) | 2026.06.16 |
|---|---|
| 260615_강의 정리 (Text Mining) (0) | 2026.06.15 |
| 260611_강의 정리 (차원 축소) (0) | 2026.06.11 |
| 260610_강의 정리 (KNN, K-Means) (0) | 2026.06.10 |
| 260609_강의 정리 (나이브 베이즈) (0) | 2026.06.09 |