9. SVM (Support Vector Machine)
서포트 벡터 머신은 굉장히 자주 쓰이는 선형,비선형분류 , 회귀 , 이상치 탐지에도 쓰이는 다목적의 인공지능 모델이다.
특히나 복잡한 분류모델에 잘 들어맞으며 작거나 중간 정도 크기의 데이터 셋에서 유연하게 동작한다.
선형 SVM 분류

위 그림 터럼 두 클래스가 직선으로 예쁘게 나뉘어 있다.
선형적으로 구분되어 있다는 의미이다.
이렇게 클래스 분류의 최전선에 있는 초평면 h 들을 서포트 벡터 (지지벡터)라고 하며
가장 가까운 다른 클래스의 샘플과 최대한 멀리 떨어져 있고자 한다.
그리고 그 중간의 optinal한 초평면을 결정경계 라고 한다.
이 직선은 두개의 클래스를 나누고 있을 뿐 아니라 제일 가까운 훈련 샘플로부터 최대한 멀리 떨어져 있다.
SVM 분류기를 클래스 사리에 가장 폭이 넓은 도로를 찾는 과정이라고 생각할수 있는데
그래서 이를 Large Margin Classification 이라고 한다.
다른 클래스와 가장 가까운 샘플이 존재하고 이는 서포트 벡터를 생성하는데 그 밖에 있는 수많은 같은 클래스의 다른점들은 결정 경계에 전혀 영향을 주지 않는다.
Soft Margin Classification

모든 샘플이 위에 그림처럼 예쁘게 나뉘어 있으면 얼마나 좋을까? 이를 하드 마진 분류 하라고 한다. 하지만 데이터가 선형적으로 분류 되어야만 하고 이상치에 민감하게 반응한다.
만약 다른클래스에 발을 들이고 있는 이상치 (위 그림처럼)가 있다면 하드마진을 찾을수 없게 된다. 그리고 일반화 또한 잘되지 않는다.
이런 문제를 피하기 위해서는 좀더 유연한 모델이 필요하다. 도로의 폭을 넓게 유지하는것과 마진오류사이에서 적절한 균형을 잡아야 한다는 의미이다. 이를 소프트 마진 분류 라고 한다.
비선형 SVM 분류
선형 SVM이 잘 동작하기는 하지만 선형적으로 분류할수 없는 경우가 있다. 이 경우는 다항식의 특성을 데이터셋에 더하는것이다.
이렇게 되면 선형적이지 않은 데이터셋을 선형적으로 변환 할 수 있다.
다항식 커널
다항식의 특성을 추가하는것은 간단하고 많은 기계학습 알고리즘에서 올바르게 동작한다.
하지만 낮은 차수의 다항식은 매우 복잡한 데이터셋을 잘 표현하지 못하고 높은 차수의 다항식은 많은 특성을 추가하게 되므로 모델을 느리게 한다.
(다항식의 특성을 데이터셋에 추가한다는것은 각 특성을 조합하여 추가적인 특성을 생성하는 방식을 의미한다.
자세한 사항은 sklearn의 PolynomialFeatures를 참조 바란다)
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html
sklearn.preprocessing.PolynomialFeatures — scikit-learn 0.24.2 documentation
scikit-learn.org
어쨋든 이러한 다항적인 특성은 모델을 느리게 한다.
하지만 SVM을 사용할때는 커널트릭을 사용 할 수 있다. 실제로는 어떤 특성을 추가하지 많으면서 다항식의 특성을 추가한것과 같은 효과를 불러오는 기법이다.