ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서포트 벡터 머신(Support Vector Machine, SVM)
    Machine learning 2024. 2. 7. 01:44
    간단하게 정리하면, 데이터에서 최적의 결정 경계(Decision boundary)를 찾는 알고리즘이다.
    비교적 작은 데이터에서도 높은 성능을 보여 많이 사용된다.
    회귀, 분류, 이상치 탐색 등 다양한 용도로 사용 가능하다는 장점도 있다.

     

    개요

    Scikit-learn에서 sklearn.svm.SVC 로 사용할 수 있다.

    주요 파라미터는 아래와 같다.

    • C: Regularization 파라미터, 낮을수록 소프트하게 분류
    • Kernel: 사용할 커널, linaer, poly, rbf 등
    • Degree: 다항식 커널의 차수
    • Gamma: RBF 커널 계수
      • 단일 훈련 포인트가 영향을 미치는 범위 결정
      • Gamma가 클수록 범위가 작아져서 경계선의 굴곡이 심해지고, 국소적인 경계선이 여러 개 생길 수 있다.

    종류

    종류에는 크게 선형 SVM과 비선형 SVM이 있다.

     

    1. 선형SVM

     

    선형 SVM은 말 그대로 클래스 간에 최적의 선형 경계선을 찾는 방식이다.

    클래스를 구분하는 가장 폭이 넓은 경계선을 찾는다. (클래스 사이에 가장 폭이 넓은 일종의 도로를 찾는 것)
    이를 Large margin classification이라고 한다.
    아래 그림 왼쪽 실선은 클래스를 정확하게 나누지만, 결정 경계가 샘플에 너무 가까워 새로운 데이터에 오작동할 가능성 높다.
    반면, 아래 오른쪽 그림 실선은 클래스를 정확하게 나누면서 샘플로부터 가능한 멀리 떨어져 있어, 새로운 데이터에 오작동할 가능성 낮다. 이런 실선이 SVM 찾고자 하는 결정 경계이다.

     

    위 그림과 같이 클래스들이 깔끔하게 넓은 마진을 두고 선형으로 구분되면 좋겠지만, 실제에서는 이상치로 인해 뒤섞이는 경우들이 많다.

    이런 경우 소수의 이상치 때문에 경계선을 찾지 못하거나, 과대적합이 되어버리는 경우가 생긴다. (아래 우측 그림처럼)

    소프트 마진(Soft margin)
    이를 방지하기 위해 나온 개념이 소프트 마진 개념이다. 이상치를 어느정도 허용하는 분류 방식을 의미한다.

    다만, 경계선이 너무 소프트(?)해져서 이상치를 너무 많이 허용하면 과소적합이 될 수 있다.

    따라서 일부 데이터를 잘못 분류하는 마진 오류(Margin violation) 값을 적당히 조절하여야 한다.

    Scikit-learn에서는 파라미터 C로 마진 오류를 조절할 수 있다. 마진 오류와 반비례하여 높을 수록 마진 오류 낮게 허용한다.
    아래의 왼쪽 그림: 마진 오류를 높게 허용한 경우, 오른쪽 그림은 마진 오류를 낮게 허용한 경우를 예시로 보여준다.

    C 값이 낮을 수록 더 많은 오류를 허용하여 마진을 넓게 갖는 것을 볼 수 있다.

     
    2. 비선형 SVM 분류
    (소프트 마진까지 썼건만?) 안타깝게도 현실에서는 선형으로는 풀 수 없는, 비선형 문제가 많이 존재한다.
    예를 들어 아래 그림에서,
    왼쪽 그림은 두 클래스가 선형적으로 구분되지 않지만,
    오른쪽 그림과 같이 2차원으로 확장하면 선형적으로 구분이 가능하다.

     

    비선형 SVM는 특성을 추가(차원 확장)하여 선형적으로 구분되지 않던 데이터를 구분할 수 있다.

    커널(Kernel)
    차원 확정을 어떤 방식으로 하냐, 한다면 커널을 많이 사용한다.
    Input space에 존재하는 데이터를 다른 차원의 공간으로 매핑(Mapping)하고자 할 때, 실제 매핑 함수를 사용하지 않고 SVM에 적용(aka 내적)하는 함수가 커널(Kernel)이다.
    • 고차원 공간으로 매핑할 때 계산량이 매우 많은데 커널은 그 과정을 생략할 수 있어 매우 유용하다. (=빠른 계산 가능)
    , 고차원 매핑과 내적을 한 번에 하는 함수가 커널이다.
    • 고지식한 방법: Input space -> (매핑) -> 고차원 공간 -> (내적) -> SVM 경계선
    • 커널 사용하면: Input space -> (커널) -> SVM 경계선
    대표적인 커널에는 선형 커널(linear), 다항식 커널(poly), 가우시안 RBF 커널(rbf)이 있다.
    • 선형 커널: 단순하므로 학습 및 예측 속도가 가장 빠름, 처음에 베이스라인으로 먼저 시도하는 것이 좋음
    • 다항식 커널: 차수를 높이는 커널, 차수 선택 가능
    • 가우시안 RBF 커널(rbf): 유사도 특성 추가
    다항식 커널

    가우시안 RBF 커널

    그 중에서도 자주 쓰는 커널이 아마 가우시안 RBF 커널일 것이다.

    유사도 특성을 추가하는 방식인데, 유사도란  각 샘플이 특정 랜드마크와 얼마나 닮았는지 측정하는 유사도 함수로 계산한 값이다.

    가우시안 방사 기저 함수(Radial basis function, RBF)가 대표적인 함수이다.

    수식은 아래와 같다.

    l은 유사도 측정의 기준이 되는 포인트인 랜드마크를 의미한다. 랜드마크는 모든 샘플 위치마다 설정할 수 있다.

    아래 그림은 가우시안 RBF의 예시를 보여준다.

    Gamma(γ) 파라미터를 증가시키면 종 모양의 가우시안 함수 곡선이 좁아져서 각 샘플의 영향 범위가 작아진다. 

    간단하게는. 샘플의 영향 범위가 작아질수록 곡선이 뾰족하게 변하고, 그만큼 디테일한 경계선을 그릴 수 있다고 이해하면 될 것 같다.

     

    실제 유사도 측정을 어떻게 하는지 예시를 살펴보자. (위의 Figure 5.5를 풀어보자)

    가우시안 RBF 커널을 이용하여 유사도 특성 $ X_2 $, $ X_3 $ 을 만들었다.
    유사도 특성 $ X_2 $, $ X_3 $ 에 샘플 x를 대입하여 클래스를 분류해본다.
    $ X_2 $, $ X_3 $의 랜드마크가 각각 -2, 1이고 Gamma가 0.3이라면,
    샘플 x가 -1일 때 커널에 의해 $ X_2 $와의 유사도는 0.74, $ X_3 $과의 유사도는 0.3으로 계산이 된다.
    이를 모든 샘플에 대해 계산하면 아래 우측에 있는 그림처럼 새로운 공간에서 클래스를 구분할 수 있게 된다.

    3.SVM 회귀

    SVM은 처음에 잠깐 언급했듯이 회귀 문제에도 쓸 수 있다.

    분류 모델과는 반대로 학습이 진행된다.

    즉, 제한된 마진 오류 안에서 마진(도로) 안에 가능한 한 많은 샘플이 들어가도록 학습한다.

    (반대로, 분류 문제에서는 마진 밖에 가능한 한 많은 샘플이 존재하도록 학습하였다.)

     

    epsilon은 마진의 폭을 결정하는 파라미터이다. epsilon이 커질수록 마진의 폭이 넓어진다. (아래 그림 참고)

    즉, 너무 크게 설정하면 과소적합될 가능성이 높아진다.

     

    결론

    이렇게 내용 정리를 했지만,

    사실 개인적으로 SVM은 계산시간 대비 성능이 별로라는 인식이 있어서 거의 쓰지 않는다.

     

     

    참고자료

    1. 핸즈온 머신러닝 (매우 많이 참고)

Designed by Tistory.