머신러닝 심화 5일차 - SVM 심화: Hard/Soft Margin과 Kernel Methods

컬럼월드·2025년 11월 15일
post-thumbnail

안녕하세요. 오늘 다룰 주제는 바로 Support Vector Machine(SVM) 심화입니다. 이름은 많이 들어봤는데, 막상 C나 gamma 같은 하이퍼파라미터를 조정하려고 하면 "이게 정확히 뭘 하는 거였지?" 하고 헷갈릴 때가 많죠.
이걸 타파하여 Support Vector Machine 완벽 마스터가 되도록 해봅시다.

📚 오늘 배울 내용 키워드 요약
1. Hard Margin vs Soft Margin: 완벽함을 추구하는 SVM과 현실과 타협하는 SVM
2. C 파라미터: 마진의 너비와 오류(Slack) 사이의 줄다리기를 조절하는 값
3. 커널 트릭 (Kernel Trick): 직선으로 못 나누면? 데이터를 더 높은 차원으로 보내서 나누는 마법
4. 실무자를 위한 마지막 조언 (Tips & Tricks)

1. Hard Margin vs Soft Margin: 완벽함을 추구하는 SVM과 현실과 타협하는 SVM

Hard Margin SVM은 이름 그대로 아주 '딱딱한' 녀석입니다.

Hard Margin SVM란,

모든 데이터 포인트를 완벽하게 분류해야 합니다.
Hard Margin SVM : 단 하나의 오류도 용납 못 한디.

문제점:
1. Outlier(이상치)에 극도로 민감합니다. 단 하나의 이상치 때문에 전체 경계선이 확 휘어버릴 수 있습니다.

  1. 현실 데이터에 적용이 불가능합니다. 현실의 데이터는 대부분 노이즈가 껴있고 완벽하게 분리되지 않습니다.

  2. 과적합 위험이 있습니다. Training 데이터에 지나치게 최적화가 됩니다.

Soft Margin SVM: "현실을 받아들일게... 조금은 봐줄게"
그래서 등장한 것이 바로 Soft Margin SVM입니다.
실무에서는 거의 항상 Soft Margin SVM 사용이 됩니다여.

Soft Margin SVM란,

일부 오분류(margin을 침범하는 것)를 허용하면서 마진을 최대화합니다. 핵심은 Slack Variable (슬랙 변수, ξ) 라는 '봐주는 정도'를 도입을 한 것입니다. 패널티(ξ)를 부과하는 소프트 마진 접근하는 것이 key-point.

ξ(슬랙 변수)의 값에 따라서 분류가 잘 되었는지 판단할 수 있습니다.

ξ = 0 : 완벽! 마진 밖에 잘 있습니다.
0 < ξ < 1 : 봐줄 만함. 마진 안쪽에 있지만, 분류는 맞았습니다.
ξ >= 1 : 문제! 마진을 넘어 아예 반대편으로 가버렸습니다. (오분류)

2. C 파라미터: 마진의 너비와 오류(Slack) 사이의 줄다리기를 조절하는 값


C가 클수록 오분류에 대한 페널티가 커집니다.
Soft Margin SVM은 두 가지 목표 사이에서 줄다리기를 합니다.
1. 마진은 최대한 넓게 (Underfitting 방향, 1/2{||w||}^2$ 최소화)
2. 오류(Slack)는 최대한 적게 (Overfitting 방향, Σξ 최소화)
C 파라미터 (The Trade-off)는 핵심 인자로서 이 둘 사이의 균형을 잡아주는 역할을 합니다.

C가 작을 때 (C \to 0) 25 "난 마진이 넓은 게 좋아. 오류(Slack)는 좀 있어도 돼." 26 결과: 넓은 마진, 단순한 경계, 오류를 많이 허용 (Underfitting 위험)

C가 클 때 (C \to \infty) 28 "오류(Slack) 절대 안 돼! 마진이 좁아져도 상관없어." 29 결과: 좁은 마진, 복잡한 경계, 오류를 거의 불허 (Overfitting 위험, Hard Margin과 비슷해짐)
보통 실무에 계신 분들은 C=1.0 정도에서 시작해서 값을 조절하는 것이 일반적입니다.

3. 커널 트릭 (Kernel Trick): 직선으로 못 나누면? 데이터를 더 높은 차원으로 보내서 나누는 마법

지금까지의 SVM은 선형(Linear), 즉 직선으로만 데이터를 나눌 수 있었습니다. 하지만 만약 데이터가 비선형 그래프라면,,,?
이때 등장하는 마법이 바로 커널 트릭(Kernel Trick)입니다. 원리는 데이터를 고차원(e.g., 3D)으로 '매핑'해서 선형(평면)으로 분리할 수 있게 만듭니다. 커널 함수(KK)**는 이 '고차원에서의 내적'을, '저차원에서 간단히 계산'할 수 있게 해주는 마법 같은 모델입니다.

🌀 주요 커널 함수들

  1. Linear Kernel: 선형 분류
  2. Polynomial Kernel: 다항식 경계
  3. RBF (Gaussian) Kernel: 비선형 분류의 강자이자, 실무에서의 기본 선택 핵심 파라미터는 γ (gamma)입니다.

γ 값에 따라 변화되는 것
γ가 작을 때(0.1) "내 영향력은 아주 넓어!" (조금만 멀어져도 exp안의 값이 0에 가까워짐)
결과: 넓은 영향 범위, 부드러운 경계 (Underfitting 가능)

γ가 클 때 (100) "난 내 주변(아주 가까운 곳)에만 영향을 줄 거야!"
결과: 좁은 영향 범위, 데이터 포인트 하나하나에 민감하게 반응하는 복잡한 경계 (Overfitting 위험)

  1. Sigmoid Kernel: 신경망과 유사 특수한 경우에만 사용

실무 Tip: 시도 순서
1. Linear Kernel: 가장 먼저 시도 (baseline)
2. RBF Kernel: Linear가 부족하면 시도
3. Polynomial: 도메인 지식이 있을 때
4. Sigmoid: 특별한 이유가 있을 때만 시도

4. 실무자를 위한 마지막 조언 (Tips & Tricks)

  1. 데이터 전처리 (필수!)
  • 정규화/스케일링 : RBF, Polynomial 커널 사용 시 필수입니다. Linear 커널도 해주면 수렴 속도에 도움이 됩니다.
  • 불균형 처리 : 데이터 클래스가 불균형하다면 svm.SVC(class_weight='balanced') 옵션을 사용하세요.
  1. 파라미터 튜닝 순서
  • Linear Kernel : 무조건 가장 먼저 시도합니다. 데이터가 고차원이거나(예:텍스트) 샘플 수에 비해 특징이 많으면 Linear가 RBF보다 성능이 좋을 때가 많습니다.
  • RBF Kernel : Linear가 부족하면 RBF를 시도합니다.
  • C, γ 튜닝 : C와 gamma는 로그 스케일( 0.01, 0.1, 1, 10, 100)로 탐색하는 것이 효율적입니다.
  1. 과적합 판단
  • 학습(Train) 데이터 성능은 100점인데 테스트(Test) 성능이 낮으면 과적합입니다. 이때는 C를 줄이거나 γ를 줄여서 모델을 더 단순하게 만들어야 합니다.
  • 또 다른 꿀팁은 Support Vector의 수를 보는 것입니다. Support Vector가 전체 데이터의 50%를 넘어가는 등 너무 많다면, 모델이 과적합되었을 가능성이 큽니다.
  1. 대용량 데이터
  • SVM은 샘플 수가 많아지면 학습 속도가 매우 느려집니다.
  • 이때는 LinearSVC 또는 SGDClassifier인 확률적 경사 하강법을 사용하는 것이 훨씬 효율적입니다.

실전 전략

• 데이터 정규화는 필수
• Linear → RBF 순서로 시도
• Grid Search + Cross-validation으로 최적화
• Support Vector 수로 과적합 판단
• 실습 코드를 단계별로 이해하며 적용


사람이 몇 명이 있는 걸까요~?

profile
안녕하세요, 코딩과 잡다한 얘기도 좋아해요.

0개의 댓글