머신러닝 서포트 벡터, 마진, 결정 경계, 커널 트릭이란?
서포트 벡터
앞서 서포트 벡터(support vector)는 바로 이 결정 경계선을 찾는 데 사용되는 개념이라고 설명했는데, 먼저 서포트 벡터라는 단어에서 벡터는 바로 2차원 공간 상에 나타난 데이터 포인트를 의미합니다. 벡터는 보통 방향과 크기를 갖는 선인데, 어떻게 점이 벡터냐고 궁금한 분도 계실 것입니다. 하지만 벡터 공간에서 점은 벡터로 표현되기도 합니다. 단순히 위치에서 특정 지점까지의 벡터를 점으로 형상화했을 뿐이라고 생각하면 됩니다.
서포트 벡터라는 단어에서 벡터는 데이터 포인트를 의미한다는 것을 알았으니, 이제 서포트 벡터의 의미를 알아봐야겠네요. 서포트 벡터는 결정 경계선과 가장 가까이 맞닿은 데이터 포인트를 의미합니다. 그림에서 점선 위에 있는 데이터 포인트, 즉, 한남, 동작, 압구정이 바로 서포트 벡터입니다.
마진
서포트 벡터와 결정 경계 사이의 거리를 마진(margin)이라고 합니다. SVM의 목표는 바로 이 마진을 최대로 하는 결정 경계를 찾는 것입니다. 앞서 설명한 대로 마진이 클수록 우리가 현재 알지 못하는 새로운 데이터에 대해 안정적으로 분류할 가능성이 높기 때문입니다.
마진을 최대로 하는 결정 경계를 학습 단계를 통해 찾아낸 후, 테스트 단계에서 입력되는 새로운 데이터가 결정 경계의 위쪽이냐, 아래쪽이냐에 따라 분류 값이 달라집니다. 지금까지 설명한 개념들을 간략하게 정리해 봅시다.
- 결정 경계: 서로 다른 분류 값을 결정하는 경계
- 서포트 벡터: 결정 경계를 만드는 데 영향을 주는 최전방 데이터 포인트
- 마진: 결정 경계와 서포트 벡터 사이의 거리
비용
사실 실전에서 다룰 데이터는 강남, 강북 예제만큼 간단하지 않습니다. 다음 예제를 보겠습니다.
후보 1과 후보 2 중에서 어떤 후보가 더 나은 결정 경계선을 가지고 있는 걸까요? 후보 1의 경우 학습 시 세모 한 개가 잘못 분류되지만 마진이 크기 때문에 실제 테스트 및 운용 시 새로운 데이터에 대한 분류가 안정적일 것으로 보입니다. 후보 2의 경우 학습 시 에러율이 0%로 아주 좋아 보이지만 마진이 작아서 실제 테스트 및 운용 시 분류가 잘못 이뤄질 가능성이 높아 보입니다.
그런데 성능이 좋은 머신러닝 모델이란 학습 시 에러가 적은 모델이 아니라 테스트 및 운용 시 에러가 적은 모델이기 때문에 후보 1이 더 나은 모델이라고 할 수 있습니다.
후보 1과 같이 약간의 오류를 허용하기 위해 SVM에서는 비용(C)이라는 변수를 사용합니다. 비용(cost)이 낮을수록, 마진을 최대한 높이고, 학습 에러율을 증가시키는 방향으로 결정 경계선을 만듭니다. 비용이 높을수록, 마진은 낮아지고, 학습 에러율은 감소하는 방향으로 결정 경계선을 만듭니다. 비용이 너무 낮으면 과소 적합의 위험이 있고, 너무 높으면 과대 적합의 위험이 있으니 적절한 비용 값을 찾는 과정이 상당히 중요합니다.
결정 경계
SVM에서 가장 중요한 개념은 결정 경계입니다. 결국 SVM 학습의 최종 목적은 주어진 데이터를 통해 결정 경계를 찾는 것이기 때문입니다. 앞의 예제에서 결정 경계라는 말보다 결정 경계선이라는 단어를 많이 썼는데, 그 이유는 강남/강북 구분하기의 데이터가 2차원 공간에 존재하고, 결정 경계는 언제나 선(1차원)으로 나타나기 때문입니다. 데이터의 벡터 공간을 N차원이라고 할 경우, 결정 경계는 다음과 같이 정해집니다.
결정 경계 = N -1차원
그렇다면 데이터가 3차원 공간에 분포할 경우 결정 경계는 선일 까요? 아니면 면일까요? 3 - 1 = 2차원이므로 3차원 공간의 결정 경계는 면으로 나타납니다. 때로는 초평면(hyperplane)이라고 칭하기도 합니다.
커널 트릭
앞에서 SVM의 핵심은 주어진 데이터 분포 속에서 결정 경계를 찾아내는 것이라고 이야기했습니다. 2차원 공간에서는 두 개의 데이터 집합을 가로지르는 선을 찾는 것이고, 3차원 공간에서는 두 개의 데이터 집합을 가로지르는 초평면을 찾는 것이죠.
아래 그림을 보겠습니다. 세모와 동그라미 집단을 구분 짓는 결정 경계를 찾을 수 있나요?
1차원의 결정 경계는 0차원으로 나타나니 점 하나로 세모 집단과 동그라미 집단을 구분해야 합니다. 하지만 점 하나로 완벽히 세모 집단과 동그라미 집단을 구분하는 방법은 동그라미들이 두 세모 사이에 위치하고 있기 때문에 아래의 그림에서 확인할 수 있듯이 존재하지 않습니다.
N-1차원의 초평면으로 두 데이터 집단을 구분해야 하는 SVM의 입장에서 이 문제는 상당히 흥미로운 문제였으며, 주어진 저 차원 벡터 공간의 데이터(벡터)를 고차원 벡터 공간으로 옮겨줌으로써 결정 경계를 찾는 방법을 고안하게 됩니다.
1차원 데이터는 x축 위의 점들이지만 이 데이터들을 2차원으로 옮겨줄 경우 y축이 생기겠죠. y = r라는 함수를 통해 1차원 데이터를 2차원으로 옮기면 아래의 표와 같은 결과를 얻을 수 있습니다.
위의 데이터들을 2차원 공간에 시각화하면 다음 그림과 같습니다.
2차원 공간으로 옮겨진 데이터들이 1차원의 결정 경계서 데이터들이 1차원의 결정 경계선으로 완벽히 분리된 것을 확인할 수 있습니다.
예제와 같이 저 차원의 데이터를 고차원의 데이터로 옮겨주는 함수를 매핑 함수라고 합니다. 하지만 이 매핑 함수를 가지고 실제로 많은 양의 데이터를 저 차원에서 고차원으로 옮기기에는 계산량이 너무 많아서 현실적으로 사용하기가 어렵습니다. 그래서 실제로 데이터를 고차 원으로 보내진 않지만 보낸 것과 동일한 효과를 줘서 매우 빠른 속도로 결정 경계선을 찾는 방법이 고안됐으며, 그 방법이 바로 커널 트릭(kernel trick)입니다.
예를 들어, 케이크 위에 파란색 양초가 꽂혀 있고, 케이크 주변에 빨간색 양초들이 나열돼 있는데 누군가가 케이크 위에서 사진을 찍었을 때 그 사진은 2차원 상의 데이터처럼 표현될 것입니다. 한칼에 파란색 양초들을 분리하는 것이 사진 상에서는 불가능해 보이지만 실제로 케이크를 자를 경우에는 한칼로 파란색 양초들을 빨간색 양초들과 분리할 수 있습니다. 이처럼 저 차원에서 결정 경계를 찾지 못할 때 고차원으로 데이터(벡터)를 옮겨서 결정 경계를 찾는 법이 커널 트릭입니다. 3차원 벡터 공간에서의 결정 경계는 2차원 공간에서 다음과 같이 표현될 수 있습니다.
이처럼 SVM이 2차원 벡터 공간 상에서 직선이 아닌 결정 경계에서 이를 보신다면 모두 커널 트릭의 결과라고 보시면 되겠습니다.
파라미터 튜닝
이번 SVM 실습을 할 때는 정확도를 높이기 위해 조절 가능한 파라미터로 딱 두 개만 기억하면 됩니다. 바로 비용(cost)과 감마(gamma)이며, 수치를 조정함으로써 정확도를 높일 수 있습니다.
- 비용: 마진 너비 조절 변수, 클수록 마진 너비가 좁아지고, 작을수록 마진 너비가 넓어진다.
작을수록 데이터 포인트의 영향이 커져서 경계가 완만해지고, 클수록 데이터 포인트가 결정 경계에 영향을 적게 미쳐 경계가 구부러진다.