SVM (Support Vector Machine)
- class 별 데이터를 가장 잘 구분하는 최적의 하이퍼플레인(Hyperplane)을 찾는 알고리즘
- 하이퍼플레인 (Hyperplane)
- 데이터가 분포되어 있는 n차원 피처 공간을 두 공간으로 나누는 n-1차원의 평면.
- ex
- 2차원 피처 공간에서 하이퍼플레인은 '선' (line)
- 3차원 피처 공간에서 하이퍼플레인은 '형면' (surface)
- 하이퍼플레인에 의해 양분된 두 공간 내에 있는 가장 가까운 데이터 포인트(벡터) 간의 거리(Margin)가 최대인 상태
- 가장 가까운 데이터 포인터 : 서포트 벡터(Support Vector)
작동 알고리즘
- 단계 1 : 하이퍼플레인 표현하기
- 하이퍼플레인도 부분공간으로 생각하면 된다. (벡터들의 집합)
- 2차원 공간의 하이퍼플레인을 생각했을 때, 하이퍼플레인(line)이 포함하는 벡터(데이터 포인트)들은 다음과 같은 식으로 정의될 수 있다.
- w*x + b = 0
- 흔히 선을 표현할 때 사용하는 일차식 ax + by + c = 0을 벡터로 표현했다고 생각하면 된다.
- 최적의 하이퍼플레인 조건1
- 두 클래스의 데이터들을 양분하기 위해서 하이퍼플레인은 아래의 조건을 만족해야 한다.
- 2개의 클래스 중 한 쪽에 속한 모든 데이터 x에 대해 wx + b > 0
- 2개의 클래스 중 다른 쪽에 속한 모든 데이터 x에 대해 wx + b < 0
- 하지만, 이 조건을 만족하는 하이퍼플레인은 무수히 많을 수 있다 => 조건이 더 필요함!
- 두 클래스의 데이터들을 양분하기 위해서 하이퍼플레인은 아래의 조건을 만족해야 한다.
- w*x + b = 0
- 단계 2 : 서포트 벡터 표현하기
- 두 공간 내 가장 가까운 벡터들 사이의 거리가 멀면 멀수록 두 공간을 잘 가르는 하이퍼플레인일 것
- 즉, Margin이 크면 클수록 좋은 하이퍼플레인
- 이를 수학적으로 표현해보면?
- Decision Hyperplane
- 두 공간을 양분하는 하이퍼플레인
w*x + b = 0
- Positive Hyperplane
- decision hyperplane보다 큰 곳에서 평행하는 하이퍼플레인
- 위치한 공간에서 decision hyperplane과 가장 가까운 데이터를 포함.
w*x_(p) + b = 1
- Negative Hyperplane
- decision hyperplane보다 작은 곳에서 평행하는 하이퍼플레인
- 위치한 공간에서 decision hyperplane과 가장 가까운 데이터를 포함.
w*x_(n) + b = -1
- 이 때, 1과 -1이라는 숫자는 계산 편의상 합이 0이 되게 하기 위해 사용하는 숫자로, b로 조정 가능하기 때문에 사실 어떤 수여도 상관없다.
- positive/negative hyperplane 내의 데이터가 서포트 벡터가 된다!
- 단계 3 : Margin 표현하기
- positive hyperplane의 점 x_p에서 직선 wx + b = 0 사이의 거리 d_p
- negative hyperplane의 점 x_n에서 직선 wx+b = 0 사이의 거리 d_n
- 결과적으로 margin은 아래와 같이 표현 가능하다.
- 최적의 하이퍼플레인 조건2
- 서포트 벡터 사이의 거리가 최대가 되도록 하는 ||w||가 최소인 하이퍼플레인
- 단계 4 : 최적의 하이퍼플레인 찾기
- 조건1 : 데이터 양분
- 2개의 클래스 중 한 쪽에 속한 모든 데이터 x에 대해 wx + b > 0
- 2개의 클래스 중 다른 쪽에 속한 모든 데이터 x에 대해 wx + b < 0
- 조건 1을 positive/negative hyperplane 표현으로 다시 바꿔보면
- wx_i + b >= 1 (if y_i = 1)
- wx_i + b <= -1 (if y_i = -1)
- x_i와 y_i는 i번째 데이터의 피처와 클래스 레이블을 표현.
- 2개의 식을 하나로 정리하면
- y_i * (wx_i + b) >= 1
- 즉, 조건 1은 모든 학습 데이터 (x_i, y_i)에 대하여 y_i * (wx_i + b) >= 1을 만족.
- 조건2 : 최대 Margin
- ||w||가 최소
- 이 조건들을 만족하는 하이퍼플레인을 찾는 것이 SVM의 학습 과정.
- 하지만! 현실적으로 조건1에 대해서 모든 학습 데이터를 모두 양분하는 선형 식을 찾기는 어렵다. 완화된 조건으로 수정이 필요.
- 완화된 조건
- 학습 단계에서 현재 선형식으로 학습 데이터를 분류해봤을 때, 올바르게 분류(양분)되지 못한 경우를 다음과 같이 수치화한다.
- 이를 Error라 하기도 하고, 힌지 손실 (Hinge Loss)라고 하기도 한다.
- Error가 0이라면 이상적이겠지만, 실질적으로 존재할 수 있기 때문에 학습 과정에서 Error가 최소가 되게 하는 조건을 추가하면 좋다.
- 조건1 : 데이터 양분
- 최종 조건 (완화된 데이터 양분 + 최대 Margin)
- 아래의 값이 최소.
- 파라미터 C
- Margin과 Error 중 어떤 것을 더 중요하게 볼 것인지 결정하는 하이퍼 파라미터
- C가 크면 Error 값을 더 고려, 학습 데이터에 오버피팅 이슈가 있을수도 있음
- C가 작으면 Error 값을 거의 고려 안함, 학습 데이터에 대한 정확도가 떨어질 수 있음.
- C로 모델의 바이어스와 분산 사이 밸런스를 결정한다고 볼 수 있다.
- 이러한 하이퍼 파라미터를 찾는 과정을 '모델 튜닝'이라고 하며 다른 파라미터 상황에서 모델의 성능으로 최적의 파라미터를 결정.
- Margin과 Error 중 어떤 것을 더 중요하게 볼 것인지 결정하는 하이퍼 파라미터
- 단계 5 : 학습 후 예측
- 학습을 통해 최적의 w와 b를 찾아 wx+b 식을 완성했다면
- 새로운 x'가 주어졌을 때 x'의 레이블 y'는 다음과 같이 결정.
SVM : 다중 클래스
- 앞서 봤던 SVM 모델은 데이터를 "양분"하는 하이퍼플레인을 찾기 때문에 이진 분류에 대한 모델이다.
- 만약 클래스가 3개 이상인 다중 클래스 분류 문제에 대해서는 SVM을 사용할 수 없을까?
- 사용할 수 있다! 각 클래스 별로 "해당 클래스"와 "그 외 다른 클래스들"을 가르는 하이퍼플레인을 찾는다고 생각하면 된다.
- 일대다 방법
- K-클래스 문제에 대해 K개의 (서로 다른) 이진 SVM 분류기를 만들어낸다.
- K번째 분류기의 경우 K번째 클래스를 양성 케이스로 처리하고 나머지 K-1개의 클래스는 음성 케이스로 처리한다.
- 이를 학습하여 하이퍼플레인 W_k * x + b_k = 0을 찾는다.
- K번째 분류기의 경우 K번째 클래스를 양성 케이스로 처리하고 나머지 K-1개의 클래스는 음성 케이스로 처리한다.
- 학습 후 x'의 클래스 y'는 이진 분류기의 W_k * x + b_k의 값이 가장 큰 값을 가지는 클래스 K를 x'의 클래스로 결정한다.
- y' = argmax_(k=1, ..., K) ( W_k * x + b_k )
- K-클래스 문제에 대해 K개의 (서로 다른) 이진 SVM 분류기를 만들어낸다.
- 일대일 방법
- 클래스의 각 쌍을 구분하는 이진 SVM 분류기를 생성
- 쌍 비교 방법 (Pairwise comparison)
- K개의 클래스가 있으면 K(K-1)/2개 분류기 생성
- 학습 후, 새로운 데이터 x'를 분류할 때는 모든 이진 분류기에 데이터를 넣고 결과를 뽑아보고 가장 많이 예측된 클래스를 x'의 최종 예측 클래스 y'로 결정한다.
- 클래스의 각 쌍을 구분하는 이진 SVM 분류기를 생성
- 일대다 vs. 일대일
- 일대일 방법은 일대다 방법보다 분류기가 훨씬 더 많이 만들어진다.
- 일대일 : K(K-1)/2
- 일대다 : K
- 일대다 방법은 한 분류기를 학습시킬 때 학습데이터로 전체 데이터를 사용하지만, 일대일 방법은 대상이 되는 두 클래스에 속하는 데이터만 사용한다.
- 한 분류기를 학습하는 상황에서는 일대일이 메모리 활용, 컴퓨팅 계산 효율이 더 좋다.
- 일대일 방법은 일대다 방법보다 분류기가 훨씬 더 많이 만들어진다.
Kernel
- default : linear
- 비선형 문제 (Non-Linear Problem)
- 아래와 같이 어떤 데이터들은 선형 식으로 완벼하게 잘 분류할 수 없다.
- 선형으로 모델링할 수 없는 문제를 비선형 문제라고 한다.
- SVM과 비선형 문제
- 기본적으로 SVM은 선형식으로 표현되는 하이퍼플레인에 기반하고 있어 비선형 문제에 적합하지 않다.
- 그러나, 선형으로 양분할 수 있도록 피처 공간을 변환(Transform)한 뒤에 SVM을 적용하는 것이 가능하다.
- 고차원 피처 공간으로 변환한다?
- 원의 모양을 linear하게 변환할 수 있다.
- 대표적인 커널 함수
커널 함수 | |
다항식 커널 | |
RBF 커널 | |
하이퍼볼릭 탄젠트 커널 |
- RBF Kernel (Radial Basis Function)
- 대표적인 SVM 커널이며, 가우시안 커널이라고도 불린다.
- RBF Kernel은 파라미터 감마를 가지는데, 이 값에 따라서 변환 결과를 조절할 수 있다.
- 감마 값이 크면 학습 데이터를 정확히 맞추는 변환 함수가 만들어져서 오버피팅 위험이 높아진다.
- 감마 값이 작으면 학습 데이터를 덜 정확히 맞추도록 변환 함수가 만들어져서 학습 데이터를 잘 대변하지 못할 수도 있다.
- Gamma for RBF Kernel
- gamma 값에 따라 어떤 변화가 있을까?
- gamma가 클수록 decision graph가 작아지고 세밀해진다.
- gamma 값에 따라 어떤 변화가 있을까?
- Linear Kernel과 RBF Kernel
- 기본적으로는 RBF Kernel의 사용을 추천하나, 아래와 같은 가이드라인을 참고할 수 있다.
'Study > 머신러닝' 카테고리의 다른 글
5. Logistic Regression (0) | 2024.02.21 |
---|---|
4. Decision Tree (0) | 2024.02.20 |
2. Naive Bayes (1) | 2024.02.14 |
1. overfitting & underfitting (0) | 2024.02.13 |
공부 리스트 (0) | 2024.02.11 |