menu

머신러닝 서포트 벡터 머신 알고리즘이란?

서포트 벡터 머신(SVM) 

사용하기 편하면서 높은 정확도를 보이는 지도 학습 머신러닝 알고리즘을 찾는다면 여기에 그 답이 있습니다. 제가 처음으로 서포트 벡터 머신(SVM)을 접했을 때 이름이 난해해서 접근하기 어려웠던 기억이 납니다. 하지만 이름만 난해할 뿐 이 알고리즘은 상당히 간단하게 이해할 수 있습니다. 또한 간단한 알고리즘에 비해 성능이 너무나 우수해서 꾸준히 사랑받는 알고리즘이기도 합니다.

서포트 벡터 머신이란?

만약 누군가가 여러분을 서울 어딘가에 데려다 놓고 ’여기가 강남일까요, 강북일까요?’라고 물어본다면 여러분은 어떻게 이곳의 위치를 예측하시겠습니까? kNN 알고리즘은 주변의 가까운 사람들에게 물어봐서 대다수의 답변과 동일하 게 답변하는 방법이었고, 나름 괜찮은 결과를 볼 수 있었습니다. 하지만 주변의 이웃 3명한테 물어봤는데, 2명이 거짓말(noise)로 강남인데 강북이라고 속였다면 여러분의 예측은 틀리게 됩니다. 

이번에는 다른 방법으로 위치를 예측해 보겠습니다. 내게 예측을 요구한 사람에게 이렇게 질문합니다. “지금 현재 이곳이 한강의 북쪽인가요, 남쪽인가요?” 만약 이곳이 한강의 북쪽이면 여러분은 강북이라고 대답할 것이고, 한강의 남쪽이면 강남이라고 대답할 것입니다. 바로 이 같은 문제 해결법이 서포트 벡터 머신(SVM)입니다. 

상당히 쉽죠? 그렇습니다. 왜 이름을 서포트 벡터 머신으로 지어서 괜히 어려운 알고리즘체 럼 보이게 했는지 저도 처음에는 도무지 이해되지 않았습니다. 사실 이 서포트 벡터라는 개념을 앞의 예제에 빗대어 설명하자면 한강의 위치를 찾는 데 사용되는 개념입니다. 한강은 도시가 강북인지, 강남인지를 구분하는 결정 경계선(decision boundary)이고, 한강 위는 강북, 아래는 강남이 됩니다. 

도시의 위치 데이터만으로 이뤄진 2차원 공간에서 당연히 한강의 위치는 표시돼 있지 않습니다(한강은 도시가 아니니까요). 하지만 현재 강북과 강남으로 구분된 도시의 위치 데이터를 가지고 대략적으로 한강의 위치를 2차원 공간에 선으로 예측할 수 있습니다. 아래 두 개의 한강 위치 후보를 보겠습니다. 

한강 후보 1과 후보 2 모두 강남과 강북 도시의 위치 데이터 기반으로 예측 가능한 한강이 위치입니다. 단, 후보 1이 후보 2보다 강남과 강북을 구분하는 결정 경계선이 더 나아 보입니다. 왜일까요? 후보 2는 결정 경계선과 데이터 포인트가 상당히 가깝습니다. 결정 정게 신이 데이터 포인트(도시 지점)에 가까이 위치할수록 조금의 속성 차이에도 분류 없이 달라질 수 있기 때문에 예측의 정확도가 불안정해집니다.

SVM 알고리즘의 장점과 단점

지금까지 SVM 알고리즘에 대해 알아봤습니다. 실습하기에 앞서 마지막으로 이 알고리즘의 장점과 단점을 간략히 정리해 보겠습니다. 

먼저 장점은 다음과 같습니다. 첫째, 커널 트릭을 사용함으로써 특성이 다양한 데이터를 분류하는 데 강하다는 장점이 있습니다. N개의 특성을 가진 데이터는 N차원 공간의 데이터 포인트로 표현되고, N차원 공 간 또는 그 이상의 공간에서 초평면을 찾아 데이터 분류가 가능하기 때문입니다. 둘째, 파라미터를 조정해서 과대적합 및 과소 적합에 대처할 수 있습니다. 셋째, 적은 학습 데이터로도 딥러닝만큼 정확도가 높은 분류를 기대할 수 있습니다. 

단점은 다음과 같습니다. 첫째, 데이터 전처리 과정(data preprocessing)이 상당히 중요합니다. 특성이 비슷한 수치로 구성된 데이터, 예를 들면 앞에서 실습한, 농구선수의 3점슛 횟수, 블로킹 횟수로 농구선수 포지션 예측하기 같은 경우에는 SVM을 쉽게 활용할 수 있지만 특성이 다양하거나 혹은 확연히 다른 경우에는 데이터 전처리 과정을 통해 데이터 특성 그대로 벡터 공간에 표현해야 합니다. 둘째, 특성이 많을 경우 결정 경계 및 데이터의 시각화가 어렵습니다. 결정 경계를 시각화하기가 어렵다 보니 수학적 전문 지식이 없는 사람에게는 SVM의 분류 결과를 이해하기 힘듭니다.