Deep learning이 non linear 한 문제를 푸는 데 있어 성능이 아주 좋지만, 심플하면서 간혹 성능이 더 좋은 경우를 찾기 위해 기본적인 머신러닝 기법을 사용하는 경우가 있다. 머신러닝 기법 중 대표적인 것 중 하나가 SVM이다. SVM을 이해하기 전, 보다 기본적인 Maximal Margin Classifier와 Support Vector Classifier에 대한 이해가 필요한데, D dimension이 있을 때 이를 구분하는 d-1차원의 hyperplane을 긋는 것을 목적으로 하는 알고리즘으로 이해하면 된다.
Maximal Margin Classifier와 Support Vector Classifier는 관찰 데이터 x들을 두 개의 class $y_1, …, y_n \in \{-1, 1\}$ 로 나누는 문제를 푼다고 우선 가정한다.
Hyperplane(초평면)
P 차원 공간 (p-dimensional space)이 있을 때, hyperplane은 이를 두 공간으로 가르는 평평한 p-1차원의 공간을 의미한다. 예를 들어 2차원에서는 hyperplane이 1차원의 선을 의미한다. p-dimensional hyperplane은 다음과 같이 수식을 쓸 수 있다.
$ f(X) = \beta_0 + \beta_1X_1 + … + \beta_pX_p $
$ f(X)= 0$
이때 어떤 점 $X = (X_1, X_2, … X_p)^T$ 가 위 수식을 만족한다면, 해당 점 X는 hyperplane위에 있다고 볼 수 있다.
Hyperplane 나누기
점 X가 아래 수식을 만족하는 경우, hyperplane으로 나뉜 한 쪽 공간에 있다고 볼 수 있다. 또한 이쪽 공간의 class는 1로 설정할 수 있다.
$ f(X_i) > 0 $
반면, 점 X가 다음 수식을 만족하는 경우, 위의 반대 쪽 공간에 있다고 볼 수 있다. 또한 이쪽 공간의 class는 -1로 설정할 수 있다.
$ f(X_i) < 0$
아래 그림과 같이 검은선(초평면)으로 나뉘어진 두 공간이 있을 때, 파란 점의 정답 class를 1로 두고 붉은 점의 class를 -1로 둔다고 가정을 한다. 아래 수식을 적용하면 관찰 데이터 x에 대해 class를 잘 맞추었다면 양수가 나오는 것을 알 수 있다. 이를 사용하여 모든 점 x에 대해 양수가 크게 나오는 초평면을 구하면 분류가 잘 되는 모델을 생성했다고 말할 수 있다.
$ Y_i(\beta_0 + \beta_1X_{i1} + … + \beta_pX_{ip}) > 0 $
Maximal Margin Classifier
하지만 다음 그림을 보면 정답을 잘 분류하는 hyperplane이 다양하게 나올 수 있다는 것을 알 수 있다. 이를 보완하기 위해 margin이 가장 큰 선을 찾는 최적화 문제를 정의하게 된다.
여러 hyperplane 중 두 class를 나누는 margin이 가장 큰 선을 찾는 최적화 문제를 다음과 같이 정의할 수 있다. 여기서 단순히 0이 아닌 특정 margin $M$을 넘는다는 제한이 생기고 이를 최대화하는 것을 목적으로 한다는 것을 확인할 수 있다.
해당 classifier는 크게 두가지 문제점을 가지고 있다.
첫번째로는, 데이터가 완벽히 분리되지 않는 경우 사용하기 어렵다.
두번째로는, Noisy 한 데이터가 있는 경우 너무 민감하게 반응하여 Variance가 큰 모델을 만들게 된다. 아래에서 Noisy 한 데이터셋의 그림과 튀는 파란 데이터 한 개로 인해 hyperplane이 급격히 기운 그림을 볼 수 있다.
Support Vector Classifier
Support Vector Classifier는 위 데이터 속성을 고려하여 soft margin을 최대화 하는 수식을 사용한다.
오차를 어느정도어느 정도 허용해주는 Tuning parameter C를 추가하여 각 관찰 데이터 $x_i$마다 잘못 분류되는 경우의 오차 $\epsilon_i$ 도 어느 정도 허용하여 soft 한 margin을 갖게 된다.
C 파라미터 값을 크게 하면 마진이 큰 아주 느슨한 초평면이 만들어져 bias가 커질 수 있다. 너무 값을 작게하면 최대한 현재 데이터를 잘 맞추어 variance가 큰 초평면이 생성된다. 이를 주의하여 C값을 조절하면 된다.
Support Vector Classifier로 non linear한 문제를 풀고자 하면 $x^2$와 같이 ‘기존 변수를 제곱한 새로운 변수’등을 만들어 linear 하게 변환된 변수를 추가하여 classify 할 수 있다. 하지만 이러한 변수를 일일이 만들고, 어떤 변수가 좋은지 선정하는 것 자체가 또 하나의 문제가 된다. 이를 알아서 조정해주는 Support Vector Machine으로 이러한 문제를 해결할 수 있다.
'IT > ML' 카테고리의 다른 글
K-Means Clustering(K-평균 군집화) 예시로 쉽게 이해하기 (0) | 2020.11.19 |
---|---|
SVM 쉽게 이해하기 - (2) Support Vector Machine(서포트벡터머신) (0) | 2020.11.10 |
Boosting(부스팅) 쉽게 이해하기, Adaboost 파이썬 코드 (0) | 2020.11.03 |
의사결정트리 배깅(Bagging)과 랜덤포레스트(Random Forest) 쉽게 이해하기 (0) | 2020.11.03 |
Bootstrap sampling (Bootstrapping, 부트스트랩 샘플링) 쉽게 이해하기 (0) | 2020.11.03 |