본문 바로가기
Machine learning/ANN, SVM

SVM (Support Vector Machine)

by ciwhiz 2012. 5. 8.

[출처] - http://iiai.blog.me/98066736 

바이오인포메틱스(생명정보학 or 생물정보학)에서는 컴퓨터를 사용한 기계학습알고리즘(machine learning algorithm)이라는 것을 사용해서 문제를 풀곤 한다. 기 계학습알고리즘이란 주어진 데이터를 컴퓨터에 입력하고 어떠한 특정 알고리즘을 기반으로 학습을 수행하여 판별기준을 구축함으로써 새로운 데이터가 주어졌을 때 그 데이터가 어떠한 종류로 판별되는지를 예측하게 되는 과정을 가리킨다. 다양한 종류의 알고리즘 중에서 최근 등장하여 여러 가지 문제에 대하여 우수한 해결능력을 보여주는 SVM(Support Vector Machine)이라는 기계학습알고리즘에 대해서 살짝 소개한다.

 그림 1. SVM의 기본적인 원리

그 림 1은 SVM의 기본원리를 소개한다. 왼쪽은 일반적인 판별분석방법으로 흰색 원과 검은색 원의 데이터가 학습용으로 주어졌을 경우, 두 그룹에서 각각의 데이터 간 거리를 측정하여 두 개의 중심을 구한 후에 그 가운데에서 최적의 초평면(optimal hyper plane)을 구함으로써 흰색과 검은색 그룹을 나누는 방법을 학습한다. 하지만, 오른쪽의 SVM에서는 각 그룹의 중심이 아닌 두 그룹 사이의 경계에 있는 데이터에 초점을 맞추는 것이 다르다. 흰색과 검은색 두 그룹의 경계에 먼저 H1과 H2 선을 그어서 파이프를 구한 후에 그 파이프 안에서 가운데에 새로운 선을 그어서 최적의 초평면으로 정한다. 여기에서 보통 H1, H2를 구하는 방식은 무한히 존재할 수 있지만 H1, H2 두 선분 사이에 데이터가 존재하지 않는다는 점과 두 선분 사이의 거리인 margin이 최대가 된다는 제약조건을 둠으로써 SVM의 초평면이 하나로 정해지도록 한다는 점이 특징이다. 이렇게 되면 그림에서 새롭게 등장한 new data라는 하얀색 데이터는 왼쪽의 일반적인 선형판별에서는 검정색으로 잘못 분류되지만 SVM에서는 흰색으로 올바르게 예측된다는 것을 알 수 있다.

하 지만 실제로는 H1, H2 사이에 학습용 데이터가 존재하지 않는 경우가 거의 없으며, 따라서 어느 정도의 학습용 데이터가 H1, H2 선분 사이에 또는 상대편 영역에 존재하더라도 최대 margin을 가진 초평면을 가지도록 허용하는 slack variable을 수식에 추가하는 soft margin이라는 기법을 추가로 적용한다(그림 2). 참고로 SVM의 이름에 들어가는 Support Vector라는 것은 그림에서 H1, H2를 정하는데 기여하는, 즉 두 개의 선분에 접한 학습용 데이터를 가리킨다. 그림에서는 하얀색 데이터 두 개와 검은색 데이터 두 개가 Support Vector로 사용되었음을 알 수 있다.

 

그림 2. Soft Margin with slack variable

이 렇게 두 가지 종류의 데이터를 적절하게 나누는 판별방식을 컴퓨터로 학습하여 새로운 데이터에 대한 예측을 수행할 수 있는 SVM은 soft margin을 적용하더라도 실제 우리 주위에 존재하는 비선형분류라는 현실적인 문제들에서는 효과적인 성능을 낼 수 없다는 한계가 존재했다. 하지만 SVM에서 커널(kernel)이라는 함수를 사용한 mapping (매핑 or 사상) 방식을 적용할 수 있게 되면서 마침내 SVM이 비선형문제들에 대해서도 효력을 발휘하기 시작하였고 생명정보학(bioinformatics)을 포함한 다양한 분야에서 적극적으로 사용되게 되었다. 커널을 사용한 mapping이라는 것은 우리가 실제로 데이터를 배치하는 입력공간(input space)에서는 잘 나누어지기 힘든 비선형문제를 feature space라는 고차원의 공간으로 이동시켜서 이 새로운 공간에서 SVM의 선형판별을 수행함으로써 마치 처음의 입력공간에서 매우 복잡한 비선형 판별 문제를 해결한 것과 같은 효과를 얻는 것을 가리킨다.

 

주 로 사용되는 커널은 linear kernel, polynomial kernel, RBF(Radial Basis Function) kernel을 들 수 있으며, 각각의 커널에서는 최적화를 도와주는 파라미터들이 따로 존재한다. 일반적으로 각 문제에 대해서 어떠한 커널의 어떠한 파라미터를 선택하는 것이 가장 좋은지를 자동적으로 알려주는 방법은 없으며, 모든 조건을 바꾸면서 SVM의 학습과 예측을 반복해서 최적의 예측률을 보여주는 조건을 찾아야 한다