SVM (Support Vector Machine)
서포트 벡터 머신은 인공지능의 기계학습 분야 중 하나로, 패턴인식, 자료분석을 위한 지도학습 모델이다.
즉, 2개의 범주를 분류하는 이진 분류기이다.
주로 분류와 회귀 분석을 위해 사용되며, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할 것인지 판단하는 비확률적 이진 선형 분류 모델을 만들게 된다.
SVM의 기본적인 원리는 위와 같은 사진에서 살펴 봤을 때, 흰색 바둑알과 검은색 바둑알이 학습용 데이터로 주어졌다고 하자 두 그룹에서 각각의 데이터 간 거리를 측정하여 두 개의 데이터 사이의 중심을 구한 후에 그 가운데에서 최적의 초평면(Optimal Hyper Plane)을 구함으로써 흰색과 검은색 그룹을 나누는 방법을 학습하게 된다. 여기서 직선으로 나눌 수 있다면 선형 분류 모델을 적용하고, 직선으로 나눌 수 없는 경우 비선형 분류 모델을 사용하게 된다.
위 그림과 같은 벡터 가운데 같은 범주를 기준으로 바깥으로 위치한 벡터들의 연결선으로 이루어진 닫혀진 다각형을 Convex Hull 이라고 한다. 이러한 convex hull 안의 벡터들은 그룹을 분류하는데 그다지 영향을 미치지 않는다.
그룹을 분류하는데 가장 큰 영향을 미치는 것들은 바깥에 위치한 벡터들이다.
이러한 벡터들을 기준으로 분류가 행해지게 되믄데, 그룹을 분류하는 데이터를 기준으로 한 선 또는 면을
Hyper plane 이라고 하는 것이다. 이러한 그룹을 나눌 수 있는 hyper plane은 무수히 많을 수 있다.
하지만 직관적으로 그룹들의 convex hull에 속한 벡터들 중 가장 가까운 벡터와 수직거리로 가장 먼 거리를 가진 hyper plane이 두 그룹을 효과적으로 분리할 수 있을 것이다.
이러한 hyper plane을 maximum hyper plane (최대 초 평면)이라고 부르고, 이 때 가장 가까운 벡터들을 support vector 라고 한다. 초평면이 재조정 될때는 support vector 역시 재계산 되어야 한다.
두 그룹간의 거리를 최대한으로 하여 categorization 할 때 발생할 수 있는 오류를 최소화 해야한다. 이 때 라고랑지의 미정계수법을 사용하게 된다.
SVM은 선형 분류와 더불어 비선형 분류에서도 사용될 수 있는데 비선형 분류를 하기 위해서는 주어진 데이터를 고차원 특징 공간으로 사상하는 작업이 필요하다. 이를 효율적으로 실행하기 위해서 '커널 트릭'을 사용하기도 한다.
예를들어 아래와 같은 데이터 집합이 들어왔다고 가정을 해보자.
이런 데이터 집합이 들어왔을 때, 두개의 집합으로 나누는 방법 중 하나는 아래 그림처럼 곡선 형태의 결정선을 구하여 가운데 집합을 잘라내어 구분하는 방법이다.
이러한 방법도 있고, 다른 방법은 직선으로 주어져 있던 입력샘플의 공간을 아래처럼 휘어진 공간으로 변형시키고 이전에 사용했던 직선으로 잘라내는 방법이다.
이 때 주어진 데이터를 고차원 특징 공간으로 사상하는 작업을 해주는 '커널 트릭'을 사용하는 것이다.
이러한 Kernel을 이용하여 차원을 변경하게 되면, 위 예시 뿐만아니라 정신사납게 흩뿌려져있는
데이터에 대해서도 차원을 변경하여 간단하게 나눌 수 있다는 장점을 가지게 된다.
주로 비선형문제들에 대해서 효력을 발생시키고 있는 주된 커널들은 다음과 같다.
Linear Kernel, Polynomial Kernel, RBF(Radial Basis Function) Kernel
각각의 커널에서는 최적화를 도와주는 파라미터들이 따로 존재한다. 일반적으로 각 문제에 대해서 어떠한 커널의 파라미터를 선택하는 것이 가장 좋은지를 자동적으로 알려주는 방법은 없다.
모든 조건을 바꾸면서 SVM의 학습과 예측을 반복해서 최적의 예측률을 보여주는 조건을 찾아야 한다.
이러한 Support Vector Machine은 이미 개발되어 상용화 되고 있다.
이미 라이브러리로 제공되고 있는 대표적인 SVM으로는 다음과 같다.
1. SVM light ( http://svmlight.joachims.org)
: C로 구현된 서포트 벡터 머신 코드 / 무료 / Windows, Mac OS X, Linux, Cygwin, Solaris 사용 가능
2. mySVM ( http://www-ai.cs.uni-dortmund.de/SOFTWARE/MYSVM/index.html)
: C로 구현된 서포트 벡터 머신 코드 / SVM ligh를 최적화 하는데 기반을 둠 / 무료 / Windows, Linux 사용 가능
3. LIBSVM ( http://www.csie.ntu.edu.tw/~cjlin/libsvm)
: 서포트 벡터 머신만을 위한 라이브러리 / 파이썬 뿐만아니라 다양한 언어 지원 / 무료 / Windows, Mac OS X, Linux 사용 가능
'Computer Science > 학부 및 대학원 과목' 카테고리의 다른 글
[분산알고리즘] Hadoop(하둡) 이란 ? (0) | 2017.09.26 |
---|---|
[인공지능] LIBSVM 사용법 / visual studio 2013 / c++ (0) | 2016.07.18 |
Kruskal Algorithm and Prim Algorithm (크루스칼, 프림 알고리즘) (0) | 2016.04.11 |
Greedy Algorithm (탐욕 알고리즘, 그리디 알고리즘) (0) | 2016.04.11 |
OpenGL 사각형그리기 예제2 - glViewport (0) | 2015.11.22 |