본문 바로가기
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 한 문제를 풀고자 하면 $x^2$와 같이 ‘기존 변수를 제곱한 새로운 변수’등 변환된 변수를 추가하여 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 $x_i, i=1,…,n$ 를 적합하여 $\beta_0, …, \beta_p $ 계수를 추정한다.

 

$ f(x) = \beta_0 + \beta_1x+ … + \beta_px $

 

 이와 동일한 수식은 벡터 내적(inner products)을 사용하여 다음과 같이 표현 가능하다. 여기서는 training data $x_1, …, x_n$를 사용하여 $\beta_0, \alpha_1…, \alpha_n $ 계수를 추정한다.

 

$f(x) = \beta_0 + \sum^n_{i=1}\alpha_i<x,x_i>$

 

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

 

$<x_i, x_{i’}> = \sum^p_{j=1}x_{ij}x_{i’j}$

 

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

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

 

$f(x) = \beta_0 + \sum_{i \in S}\alpha_i<x,x_i>$

 

Kernal(커널)

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

 

$K(x_i, x_{i’}) = \sum^p_{j=1}x_{ij}x_{i’j’}$

 

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

 

$K(x_i, x_{i’}) = (1+\sum^p_{j=1}x_{ij}x_{i’j’})^d$

 

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

 

$K(x_i, x_{i’}) = exp(-\gamma\sum^p_{j=1}(x_{ij}-x_{i’j’})^2)$

 

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

 

$f(x) = \beta_0 + \sum_{i \in S}\alpha_iK(x,x_i)$

 

이 밖의 다른 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을 충분히 주고 모델링을 하는 것이 좋다.