서포트 벡터 머신은 대표적인 머신러닝 모델이다.
SVM은 SVR과 SVC로 나뉘는데, SVR은 회귀 모델이고 SVC는 분류모델이다.
하지만 통상적으로 SVM이라 하면, 주로 이진분류를 진행한다.
ex) 사진이 개인지 고양이인지 분류, 영화 리뷰가 긍정인지 부정인지 판별 등
다음 사진과 볼 수 있듯이, 우리는 이 데이터들을 기반으로 무한대에 가까운 다양한 선을 그을 수 있다.
하지만 어느 선이 개와 고양이를 가장 잘 분류하는지 알 수 없다.
따라서 새로운 데이터에 대해서 일반화 성능이 높은(잘 분류할 수 있는) 직선을 찾는 것이 목표이다.
그렇다면 어떻게 최적의 선을 찾을 수 있을까?
-> SVM 머신러닝 알고리즘을 통해 다음을 해결해보자
SVM은 Hyper-Plane을 결정짓기 위해서 Margin을 최대화 한다.
Margin을 최대화한다고 했는데, 그럼 Margin은 무엇인가?
Plus-Plane은 치와와 강아지에 걸쳐있는 점선이고,
Minus-Plane은 고양이에 걸쳐있는 점선이다.
일반화 성능을 가장 잘 내는 직선을 찾기 위해서 마진을 최대화 해야한다고 했다.
그럼 마진을 결정짓는 요소를 보자.
Margin은 Plus-Plane과 Minus-Plane 사이의 거리인데,
- Plus-Plane을 결정 짓는 것은 다양한 개들 중에 치와와이고
- Minus-Plane을 결정 짓는 것은 하늘을 나는 고양이 사진이다.
즉 하늘을 나는 고양이와 치와와가 두 클래스를 전체를 대표해서 Hyper-Plane을 찾았다.
왜 많고 많은 데이터들 중에, 하늘을 나는 고양이와 치와와가 두 클래스의 대표가 되었을까?
-> Support Vector에 대해서 알아보자.
직선 w^T • x + b = 1을 만족하는 데이터 x와 w^T • x + b = -1을 만족하는 데이터 x가
Support Vector (서포트 벡터) 데이터가 된다.
SVM으로 Prediction을 하기 위해, 데이터 전체가 아닌 오직 서포트 벡터만 이용하기 때문에 연산량이 매우 적다.
w^T • x + b > 0 인 경우
w^T • x + b < 0 인 경우
개 고양이 데이터는 선형적으로 잘 분리되는 데이터였다.
하지만 대부분 Feature가 여러개이고, 선형적으로만 데이터가 존재하지 않는다.
따라서 SVM으로 Non-Linear Data를 Classification 하기 위해서는 커널을 이용해 차원을 변경시켜주어야 한다.
-> Not Linearly Separable한 데이터는 Hyper-Plane을 찾을 수 없다.
따라서 2D data를 3D로 차원을 변경시켜주면 Hyper-Plane을 찾을 수 있다.
(Kernel Trick)
https://medium.com/pursuitnotes/day-12-kernel-svm-non-linear-svm-5fdefe77836c
https://yngie-c.github.io/machine%20learning/2020/04/26/SVM/