안녕하세요. 오늘 다룰 주제는 바로 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)
Hard Margin SVM은 이름 그대로 아주 '딱딱한' 녀석입니다.
모든 데이터 포인트를 완벽하게 분류해야 합니다.
Hard Margin SVM : 단 하나의 오류도 용납 못 한디.
문제점:
1. Outlier(이상치)에 극도로 민감합니다. 단 하나의 이상치 때문에 전체 경계선이 확 휘어버릴 수 있습니다. 
현실 데이터에 적용이 불가능합니다. 현실의 데이터는 대부분 노이즈가 껴있고 완벽하게 분리되지 않습니다.
과적합 위험이 있습니다. Training 데이터에 지나치게 최적화가 됩니다.
Soft Margin SVM: "현실을 받아들일게... 조금은 봐줄게"
그래서 등장한 것이 바로 Soft Margin SVM입니다.
실무에서는 거의 항상 Soft Margin SVM 사용이 됩니다여.
일부 오분류(margin을 침범하는 것)를 허용하면서 마진을 최대화합니다. 핵심은 Slack Variable (슬랙 변수, ξ) 라는 '봐주는 정도'를 도입을 한 것입니다. 패널티(ξ)를 부과하는 소프트 마진 접근하는 것이 key-point.
ξ(슬랙 변수)의 값에 따라서 분류가 잘 되었는지 판단할 수 있습니다.
ξ = 0 : 완벽! 마진 밖에 잘 있습니다.
0 < ξ < 1 : 봐줄 만함. 마진 안쪽에 있지만, 분류는 맞았습니다.
ξ >= 1 : 문제! 마진을 넘어 아예 반대편으로 가버렸습니다. (오분류)

C가 클수록 오분류에 대한 페널티가 커집니다.
Soft Margin SVM은 두 가지 목표 사이에서 줄다리기를 합니다.
1. 마진은 최대한 넓게 (Underfitting 방향, 1/2{||w||}^2$ 최소화)
2. 오류(Slack)는 최대한 적게 (Overfitting 방향, Σξ 최소화)
C 파라미터 (The Trade-off)는 핵심 인자로서 이 둘 사이의 균형을 잡아주는 역할을 합니다.
C가 작을 때 (C 0) 25 "난 마진이 넓은 게 좋아. 오류(Slack)는 좀 있어도 돼." 26 결과: 넓은 마진, 단순한 경계, 오류를 많이 허용 (Underfitting 위험)
C가 클 때 (C ) 28 "오류(Slack) 절대 안 돼! 마진이 좁아져도 상관없어." 29 결과: 좁은 마진, 복잡한 경계, 오류를 거의 불허 (Overfitting 위험, Hard Margin과 비슷해짐)
보통 실무에 계신 분들은 C=1.0 정도에서 시작해서 값을 조절하는 것이 일반적입니다.
지금까지의 SVM은 선형(Linear), 즉 직선으로만 데이터를 나눌 수 있었습니다. 하지만 만약 데이터가 비선형 그래프라면,,,?
이때 등장하는 마법이 바로 커널 트릭(Kernel Trick)입니다. 원리는 데이터를 고차원(e.g., 3D)으로 '매핑'해서 선형(평면)으로 분리할 수 있게 만듭니다. 커널 함수()**는 이 '고차원에서의 내적'을, '저차원에서 간단히 계산'할 수 있게 해주는 마법 같은 모델입니다.
γ 값에 따라 변화되는 것
γ가 작을 때(0.1) "내 영향력은 아주 넓어!" (조금만 멀어져도 exp안의 값이 0에 가까워짐)
결과: 넓은 영향 범위, 부드러운 경계 (Underfitting 가능)
γ가 클 때 (100) "난 내 주변(아주 가까운 곳)에만 영향을 줄 거야!"
결과: 좁은 영향 범위, 데이터 포인트 하나하나에 민감하게 반응하는 복잡한 경계 (Overfitting 위험)
실무 Tip: 시도 순서
1. Linear Kernel: 가장 먼저 시도 (baseline)
2. RBF Kernel: Linear가 부족하면 시도
3. Polynomial: 도메인 지식이 있을 때
4. Sigmoid: 특별한 이유가 있을 때만 시도
• 데이터 정규화는 필수
• Linear → RBF 순서로 시도
• Grid Search + Cross-validation으로 최적화
• Support Vector 수로 과적합 판단
• 실습 코드를 단계별로 이해하며 적용

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