본문 바로가기

🛠머신러닝

[머신러닝] 서포트 벡터 머신(Support Vector Machine) : 서포트 벡터의 의미 / 마진 / 초평면(결정경계) /하드마진/소프트 마진/ 커널(kernel) 트릭

반응형

1. 서포트 벡터 머신(Support Vector Machine)

서포트 벡터 머신은 분류, 회귀에 모두 사용할 수 있는 매우 강력한 모델로서, 특히 복잡한 분류 문제, 작거나 중간 크기의 데이터셋에 적합하다. 

 

 

서포트 벡터 머신의 이론을 설명하기 위해 위의 그림을 예시로 들어보자. (왼쪽 그림) 좌표평면상에 존재하는 빨간색과 파란색 집단을 어떻게 하면 잘 나눌 수 있을까? 빨간색과 파란색을 나누는 분류 선은 무수히 많이 그릴 수 있지만 대표적으로 오른쪽 그림과 같이 1,2,3번의 직선이 있다고 가정해보자. 1,2,3번 직선 모두 두 집단을 잘 나눴다. 그렇다면 1,2,3번 중 어느 직선이 가장 두 집단을 잘 분류했다고 할 수 있을까? 그리고 잘 분류했다는것은 어떤 의미일까?

 

여기서 서포트 벡터 머신의 개념이 나온다. 서포트 벡터 머신은 여러 집단들을 가장 잘 구분할 수 있는 최적의 선을 찾는것이 목표이다. 그럼 1,2,3번 직선 모두 두 집단을 잘 분류했으니 아무 직선을 사용하여 모델을 만들면 되는 것일까? 그렇지 않다. 1,2,3번 직선 모두 train data로 학습할 때는 집단을 100% 잘 분류할 수 있을지라도, 그보다 더 중요한 것은 서포트 벡터 머신 모델을 만들고 그것을 실제로 사용할 때 새로운 데이터가 들어와도 잘 분류를 할 수 있을지가 관건인 것이다. 따라서 그을 수 있는 수많은 직선들 중 최적의 직선을 골라 모델을 만들어야 하는것이다. 오른쪽 그림의 3개의 직선 중에서는 1번 직선이 두 집단을 가장 잘 분류한 최적의 직선이라고 할 수 있다.

 

 

 

 

2. 서포트 벡터 머신(Support Vector Machine)에서의 최적의 직선

그렇다면 왜 1번 직선이 최적의 직선이라고 할 수 있을까? 우리는 새로운 데이터가 들어왔을 때도 잘 분류할 수 있게 최적의 직선을 긋는 것이 서포트 벡터 머신이라는 것을 알았다. 따라서 이번에는 최적의 직선이 무엇이며 그 선을 구하는 방법에 대해 알아보자.

 

 

 

1️⃣

서포트 벡터 머신에서는 두 집단(빨간색/파란색)의 데이터 중, 영역의 경계 부분에 위치한 데이터들의 사이가 최대로 떨어져있으면 두 집단이 잘 분류되었다고 간주한다. 따라서 최적의 직선을 구하는 첫 번째 단계는 경계 인접 부분에 위치한 두 서포트 벡터들을 지나는 평행 직선을 그리는 것이다.

 

*서포트 벡터: 마진을 만들 때 기준이 되고 도와준 벡터라고 해서 '서포트 벡터'리고 한다.

 

 

 

2️⃣

두 번째로는 평행으로 그은 두 직선에 직교(직각)하는 선을 긋는다. 이것을 '마진(Margin)'이라고 하며, 마진은 두 집단 사이의 거리라고 볼 수 있는데, 이 거리가 최대로 멀수록 두 집단이 잘 분류되었다고 생각하면 된다. 이때 '거리'를 '유사도'라고 볼 수 있다. 예를 들어, 나와 가장 가까이 지내는 사람들일수록 나와 비슷한 사람들일 확률이 높기 때문에 유사도가 높다고 할 수 있다. 반면 거리가 멀 수록 두 집단 간의 유사도가 적다(=즉, 잘 분류되어있다.)고 할 수 있는 것이다. 

 

 

 

간단한 예로, 위의 두 그림을 비교해보면 왼쪽보다 오른쪽에서 두 집단 사이의 거리가 멀다는 것을 알 수 있다. 따라서 오른쪽과 같은 경우에 새로운 데이터가 들어왔을 때 그 데이터가 어느 집단에 속할지 헷갈리지 않고 더 잘 분류될 수 있을 것이다. 

 

그런데 우리가 가진 데이터들을 좌표평면상에 그렸을 때 바로 그 직선의 길이(거리)를 구하기 힘들기 때문에 여기서 유클리드 거리(L2 노름)의 개념이 사용되는 것이다

 

 

 

3️⃣

마지막으로 두 서포트 벡터들의 중앙을 지나면서 직교(직각)하는 직선을 구한다. 이 직선은 두 집단을 분류하는 최적의 직선이며, '초평면'(Hyper plane) 또는 '결정 경계'라고 하며, 이것을 구하는 게 서포트 벡터 머신의 핵심이라고 할 수 있다. 또한 서포트 벡터 머신은 스케일링에 따라 데이터들이 찍히는 위치가 달라지고, 그에 따라서 결졍 경계가 달라지기 때문에 스케일링을 잘해주는 것이 중요하다. 

 

* 스케일링 : 데이터들의 차원을 맞춰주는것

 

 

3. 서포트 벡터 머신의 종류

데이터가 깔끔하게 처리되어있지 않고 혼재되어 있는 경우 마진 값을 설정하여 결정 경계를 조절할 수 있는데, 이를 하드 마진과 소프트 마진으로 구분할 수 있다.

 

 

➰ 하드 마진 SVM

 

먼저 마진 값을 타이트하게 잡는 하드 마진 SVM은 이상치(outlier)들을 허용하지 않는다. 때문에 과적합(overfitting)이 발생하기 쉽고, 노이즈로 인해 최적의 결정 경계를 잘못 구분하거나 못 찾는 경우가 발생할 수 있다.

 

 

 

➰ 소프트 마진 SVM

 

이러한 하드 마진 SVM의 특징을 보완하려면 소프트 마진 (Soft Margin) SVM을 사용하면 된다. 소프트 마진은 이상치들을 어느 정도 허용하면서 결졍경계를 설정하는 것이다.

 

 

 

 

4. 서포트 벡터 머신(Support Vector Machine)에서 분류와 회귀 비교

맨 처음 언급했듯이 서포트 벡터 머신은 분류와 회귀 문제에서 모두 사용할 수 있다. 먼저 분류 문제에 서포트 벡터 머신을 사용할 경우, 지금까지 정리한 것처럼 각 집단의 경계에 인접해 있는 데이터들의 거리가 가장 멀어지게 폭(마진)을 설정하여 마진의 가운데를 결정 경계로 잡는다. 이러한 분류의 경우, 두 집단 사이의 거리(마진)가 클수록 좋기 때문에 소프트 마진을 사용하는 것이 좋다. 반면 회귀 문제로 서포트 벡터 머신을 사용하는 경우에는 데이터들을 대표하는 직선을 만드는 것이 목표이기 때문에 데이터들을 아우를 수 있게 마진을 잡고 그 중앙에 회귀선을 그어주는 방식으로 작동한다. 따라서 마진이 좁을수록 데이터들을 대표할 수 있는 회귀선을 잘 만들 수 있기 때문에 하드 마진을 사용하는 것이 좋다. 

 

 

 

 

 

 

5. 커널(kernel) 트릭

단순한 데이터 세트의 경우 쉽고 간단하게 선으로 분리가 가능하지만 데이터 세트가 복잡하고 많아지게 되면 하나의 선 또는 면으로 쉽게 분리하기 어려워진다.

 

 

예를 들어, 위의 그림과 같이 2차원 좌표평면상에 복잡하게 존재하는 데이터들은 어떻게 분류할 수 있을까? 

 

 

 

 

 

이러한 경우, 2차원 평면에 있는 데이터들을 3차원으로 차원을 변환시켜 보면 두 집단을 어떻게 분류할 수 있을지가 더 쉽게 보인다. 이처럼 저차원에서 해결하기 어려운 문제들을 고차원으로 변환시켜 문제를 해결할때 사용하는것이 커널 함수(kenel function)이다.

 

 

 

왼쪽 그림처럼 커널 함수를 사용하여 2차원 평면에 있던 데이터들을 3차원으로 변환시켜 두 집단을 구분하는 하나의 면 생성한다. 그 다음 오른쪽 그림과 같이 다시 2차원으로 차원을 축소해주면 두 집단을 잘 분류 되었음을 알 수 있다.

반응형