[선형 대수] SVM(Support Vector Machine)

2022. 12. 3. 13:28TIL💡/Linear Algebra

서포트 벡터 머신(SVM: Support Vector Machine)은 분류 과제에 사용할 수 있는 강력한 머신러닝 지도 학습 모델이다.

 

서포트 벡터 머신

SVM은 결정 경계(Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델이다.

그래서 분류되지 않은 새로운 점이 나타나면 경계의 어느 쪽에 속하는지 확인해서 분류 과제를 수행할 수 있게 된다.

 

결국 이 결정 경계라는 걸 어떻게 정의하고 계산하는지 이해하는 게 중요하다.

 

만약 데이터에 속성(feature)이 2개만 있다면 결정 경계는 이렇게 간단한 선 형태가 된다.

그러나 속성이 3개로 늘어난다면 이렇게 3차원으로 그려야 한다.

그리고 이때의 결정 경계는 선이 아니라 평면이 된다.

 

우리가 이렇게 시각적으로 인지할 수 있는 범위는 딱 3차원까지다.

차원, 즉 속성의 개수가 늘어날 수록 당연히 복잡해진다.

결정 경계도 단순한 평면이 아닌 고차원이 될텐데 이를 초평면(hyperplane)이라고 부른다.

 

최적의 결정 경계(Decision Boundary)

결정 경계는 무수히 많이 그을 수 있다. 어떤 경계가 좋은 경계일까?

어떤 그래프가 제일 위태로워 보이는가?

C를 보면 선이 파란색 클러스터와 너무 가까워서 아슬아슬해보인다.

 

그렇다면 어떤 경계가 가장 적절해보이는가?

당연히 F다. 두 클래스 사이에서 거리가 가장 멀기 때문이다.

 

이제 결정 경계는 데이터 군으로부터 최대한 멀리 떨어지는 게 좋다는 점을 알게 되었다.

 

Margin

결정 경계와 서포트 벡터 사이의 거리를 의미한다.

가운데 실선이 하나 그어져 있는데, 이게 바로 결정 경계가 된다.

그리고 그 실선으로부터 검은 테두리가 있는 빨간 점 1개, 파란 점 2개까지 영역을 두고 점선을 그어놓았다.

 

점선으로부터 결정 경계는 마진을 최대화한다.

 

그리고 위 그림에서는 x축과 y축 2개의 속성을 가진 데이터로 결정 경계를 그었는데, 총 3개의 데이터 포인트(서포트 벡터)가 필요했다.

즉 n 개의 속성을 가진 데이터에는 최소 n + 1개의 서포트 벡터가 존재한다는 것을 알 수도 있다.

 

이번엔 SVM 알고리즘의 장점을 하나 알 수 있다.

 

대부분의 머신러닝 지도 학습 알고리즘은 학습 데이터 모두를 사용하여 모델을 학습한다.

그런데 SVM에서는 결정 경계를 정의하는 게 결국 서포트 벡터이기 때문에, 데이터 포인트 중에서 서포트 벡터만 잘 골라내면 나머지 쓸데없는 수많은 데이터포인트들을 무시할 수 있다.

 

이상치(Outlier)를 얼마나 허용할 것인가

SVM은 데이터 포인트들을 올바르게 분리하면서 마진의 크기를 최대화해야 하는데, 결국 이상치를 잘 다루는 게 중요하다.

  • 위의 그림은 아웃라이어를 허용하지 않고 기준을 까다롭게 세운 모양이다. → Hard Margin. 그리고 서포트 벡터와 결정 경계 사이의 거리가 매우 좁다. 즉, 마진이 매우 작아진다. 이렇게 개별적인 학습 데이터들을 다 놓치지 않으려고 아웃라이어를 허용하지 않는 기준으로 결정 경계를 정해버리면 오버 피팅 문제가 발생할 수 있다.
  • 아래 그림은 아웃라이어들이 마진 안에 어느 정도 포함되도록 너그럽게 기준을 잡았다. → Soft Margin. 이렇게 너그럽게 잡아놓으니 서포트 벡터와 결정 경계 사이의 거리가 멀어졌다. 즉 마진이 커진다. 대신 언더 피팅 문제가 발생할 수 있다.

커널(Kernel)

지금까지 선형으로 결정 경계를 그을 수 있는 형태의 데이터 세트를 예시로 들었다.

그런데 만약 SVM이 선형으로 분리할 수 없는 데이터 세트가 있다면 어떻게 해야할까?

 

이 경우 kernel을 linear이 아니라, poly 같은 것을 넣어줄 수 있다.

poly 외에도 디폴트로 RBF(Radial Bias Function, 가우시안 커널)이다.

추가적으로 어려운 부분은 선형 대수학에서 익히자..

 

파라미터 감마

gamma는 SVC의 파라미터로 결정 경계를 얼마나 유연하게 그을 것인지 정해준다.

  • gamma 값을 높이면 학습 데이터에 많이 의존해서 결정 경계를 구불구불 긋게 된다. → 오버피팅 초래
  • 반대로 gamma를 낮추면 학습 데이터에 별로 의존하지 않고 결정 경계를 직선에 가깝게 긋게 된다. → 언더피팅 초래

 

참고

https://hleecaster.com/ml-svm-concept/