본문 바로가기
IT/ML

SVM 쉽게 이해하기 - (2) Support Vector Machine(서포트벡터머신)

by 모던네이쳐 2020. 11. 10.
728x90

 Deep learning이 non linear 한 문제를 푸는 데 있어 성능이 아주 좋지만, 심플하면서 간혹 성능이 더 좋은 경우를 찾기 위해 기본적인 머신러닝 기법을 사용하는 경우가 있다. 머신러닝 기법 중 대표적인 것 중 하나가 SVM이다. SVM은 Linear하지 않은 문제에 대해 boundary를 정의하는 방법을 의미한다.

 

Support Vector Classifier의 한계

 Support Vector Classifier로 non linear 한 문제를 풀고자 하면 x2x2와 같이 ‘기존 변수를 제곱한 새로운 변수’등 변환된 변수를 추가하여 linear 한 문제인 것처럼 classify 할 수 있다. 하지만 이러한 변수를 일일이 만들고, 어떤 변수가 좋은지 선정하는 것 자체가 또 하나의 문제가 된다. 이를 알아서 조정해주는 Support Vector Machine으로 이러한 문제를 해결할 수 있다.

 

SVM 쉽게 이해하기 - (1) Maximal Margin Classifier와 Support Vector Classifier

 Deep learning이 non linear 한 문제를 푸는 데 있어 성능이 아주 좋지만, 심플하면서 간혹 성능이 더 좋은 경우를 찾기 위해 기본적인 머신러닝 기법을 사용하는 경우가 있다. 머신러닝 기법 중 대표

modern-manual.tistory.com

Linear classifier 내적(inner products) 표현

 일반적인 linear function을 적어보면 다음과 같다. 여기서는 n개의 training data xi,i=1,,nxi,i=1,,n 를 적합하여 β0,,βpβ0,,βp 계수를 추정한다.

 

f(x)=β0+β1x++βpxf(x)=β0+β1x++βpx

 

 이와 동일한 수식은 벡터 내적(inner products)을 사용하여 다음과 같이 표현 가능하다. 여기서는 training data x1,,xnx1,,xn를 사용하여 β0,α1,αnβ0,α1,αn 계수를 추정한다.

 

f(x)=β0+ni=1αi<x,xi>f(x)=β0+ni=1αi<x,xi>

 

 수식에서 <x,xi><x,xi>는 training data xixi에 대해 새로운 점 xx를 내적 한 값을 의미한다.

 

<xi,xi>=pj=1xijxij

 

 또한 각 training data xi앞에 붙는 추정 값 αi는 각 training data들 간의 내적 값을 사용하여 구할 수 있다. 즉 각 training data xi와 parameter αi들을 사용하여 변수 x의 추정값 f(x)를 구할 수 있다.

 언뜻 보면 기존 linear function에 비해 구해야 하는 계수가 더 많아져 computation에 불리해 보이지만 실제로 대다수의 αi값이 0으로 수렴하고, boundary에 결정적인 역할을 하는 일부 데이터에 대한 계수만 살아남기에 test set에 대한 computation이 훨씬 적다. Support vector가 되는 변수들의 집합 S를 사용하여 다음과 같은 결론이 도출된다.

 

f(x)=β0+iSαi<x,xi>

 

Kernal(커널)

 K는 어떤 function을 제공하는 kernel을 의미한다. 위에 언급된 기본적인 내적을 수행하는 linear kernel은 다음과 같이 적을 수 있다.

 

K(xi,xi)=pj=1xijxij

 

 Non-linear 한 kernel로는 양수 d degree를 가진 polynomial kernel이 있다. 이를 사용하면 d승의 다항식을 추적하는 높은 차원의 classifier로써 역할을 하게 된다.

 

K(xi,xi)=(1+pj=1xijxij)d

 

 또 다른 non-linear 한 성질을 보이는 kernel로는 radial kernel이 있다.

 

K(xi,xi)=exp(γpj=1(xijxij)2)

 

이렇게 정의된 kernel들은 다음과 같이 사용한다.

 

f(x)=β0+iSαiK(x,xi)

 

이 밖의 다른 kernel들도 존재하지만 위 kernel들을 주로 사용하여 성능을 확인한다.

left: polynomial kernel, right: radial kernel

 Support Vector Machine은 Support Vector Classifier에 비해 feature engineering을 어느 정도 자동화한다는 점에서 큰 의미가 있다. 물론 kernel function을 고르는 작업이 수반되고 kernel자체가 제한된 특징만을 살펴본다는 한계가 있지만, 일일이 변수를 생성하는 작업을 대신한다는 점에서 강력한 머신러닝 기법으로 볼 수 있다.

 또한 parameter C가 아주 작으면 답을 찾지 못해 헛도는 경우가 있어 stopping criteria로 시간제한을 줄 필요가 있다. 이보다는 처음에 C를 크게 하여 error budget을 충분히 주고 모델링을 하는 것이 좋다.