머신 러닝

[머신러닝 코세라 강의] (7주차) "SVM (Support Vector Machines" Machine Learning (by Andrew Ng)

마빈 Marvin 2022. 6. 28. 10:31

 

이번은 앤드류 응 선생님의 머신러닝 코세라 강의의 7주차 내용이다. 이번에는 Support Vector Machine 알고리즘을 배운다. 

 

Large Margin Classification

Optimization Objective

로지스틱 회귀식에서는 $y=1$ 일 때, $\theta^T x  >>0$ 이다. $z = \theta^T x$ 가 $z=1$ 일 때 cost function 이 0이 되도록 되도록 한다. 비슷하게, $y=0$ 일 때, $z=-1$ 일 때 cost function 이 0이 되도록 한다. Cost function 에서 $A + \lambda B$ 에서, $\lambda$ 는 training 데이터로부터의 에러와 파라미터러부터 나오는 에러 사이의 가중치가 된다. $c A + B$ 형태로도 표시할 수 있다. $c = \frac{1}{\lambda}$ 일 때 동일한 optimization 결과를 가져다준다. 

 

Largin Margin Intuition

C 가 굉장히 클 때, $A$ 의 값이 0에 가까워져야 한다. SVM 은 margin 이 크도록 하는 기준을 파악한다. 

이 때, outlier 가 있으면 C 가 클 때 outlier 에 의존하는 경향이 크다. 만약, C 가 그리 크지 않으면, 좀 더 일반적인 기준을 구한다. 

 

Large Margin Classification 의 수리적인 이해

이 소단원에서는 이전에 등장했던 수식들이 어떻게 Large Margin Classification 결과를 가져다 주는지에 대해서 공부한다. 먼저 vector inner product 에 대해 복습한다. $u^T v$ 와 같은 계산이다. 

$\min_\theta \frac{1}{2} \sum_{j=1}^n \theta_j^2$

s.t. $\theta^T x^{(i)} \ge 1$ if 

$\theta^T x^{(i)} \le -1$ if 

 

그림을 이용한 예제에서 parameter vector ($\theta$) 가 decision boundary 와 직교한다고 하는데, 왜 그런지에 대해서는 알려주지 않는 것 같다. 

Kernels

Kernels I

SVM 을 complex non-linear classifier 에 적용하기 위해서 Kernel 기법을 응용한다. $x$ 와 $l^{1}, l^{2}, l^{3}$ 사이의 similarity 를 구하는 함수를 kernel 이라고 한다. ($l^{number}$ 를 landmark 로부터의 proximity 라고 정의하는데, landmark 가 무엇인지 모르겠다). $l^{(1)}$ 에 대한 $f_1$ 은 $x$ 와 $l^{(1)}$ 이 가까울 때, 1 에 가까워진다. 반대로, 두 값이 멀어질 때, $f_1$ 은 0에 가까워진다. Non-linear decision boundary 를 만들어낸다. 

Kernels II

$l^{1}, l^{2}, l^{3}$ 을 어떻게 얻는가? 

Predict $y=1$ if $\theta^T f \ge 0$. 

Training: $\min_\theta C \sum_{i=1}^m y_{(i)} cost_1 (\theta^T f^{(i)}) + (1-y^{(i)} ) cost_0 (\theta^T f^{(i)}) + \frac{1}{2} \sum_{j=1}^m \theta_j^2$

이 training cost 함수에 대한 패키지는 이미 많이 있다. 

SVM parameters: $C (=\frac{1}{\lambda}$.

Large C: lower bias, high variance (small $\lambda$). -> prone to overfitting

Small C: High bias, low variance (large $\lambda$). -> prone to underfitting

$\sigma^2$.

Large $\sigma^2$: features $f_i$ vary more smoothly. Higher bias, lower variance. 

Small $\sigma^2$: features $f_i$ vary less smoothly. Lower bias, higher variance. 

SVMs in Practice

Using An SVM

SVM 을 직접 코딩하는 것은 불필요하게 복잡하다. 따라서 이미 존재하는 좋은 라이브러리를 사용하는 것이 효율적이다. 하지만, 사용자가 정해야할 것들이 있다 (parameter C, kernel). 그리고 가우시안 커널의 경우에는 $\sigma^2$ 을 선택한다. Kernel 함수를 사용자가 제공해야하는 경우도 있다. 다른 커널을 선택할 때는 "Mercer's Theorem" 이 성립하는지 확인이 필요하다. 다른 커널의 예로는 polynomial 커널, string kernel, chi-square 커널 등이 있다. 

 

SVM 은 multi-class 분류가 가능하다. 대부분의 SVM 패키지는 multi-class 분류가 가능하지만, 그렇지 않은 경우에는 one-vs.-all 방법을 사용한다. 

 

Logistic regression vs. SVM. 두 가지 방법론 중 어떠한 것을 언제 사용할 것인가? $n$ 이 클 때, 즉, $n >> m$ ($n$ 은 feature 개수, $m$ 은 트레이닝 데이터 개수) 예를 들어, 텍스트 분류의 경우다. $n$ 은 작고, $m$ 이 보통일때 ($n = 1 - 1,000$ 이고 $m = 10 - 10,000$). SVM with Gausian Kernel. $n$ 은 작고, $m$ 이 클 때, 추가적으로 feature 을 더 추가한다. 그리고 logistic regression 이나 SVM without kernal 을 사용한다. 그리고, Neural Network 은 언급한 모든 상황에 대해서 잘 될 것이지만, train 속도가 느린 단점이 있다.