본문 바로가기
Python/머신러닝

[머신러닝] 서포트 벡터 머신 (SVM) 개념

by 빵으니 2020. 7. 24.

머신러닝

서포트 벡터 머신(SVM) - Support Vector Machine

  • 다양한 연구를 통해 굉장히 높은 인식 성능 발휘
  • 선을 구성하는 매개변수를 조정해서 요소의 구분선을 찾고 이른 기반으로 패턴 인식
  • 주어진 데이터가 어느 카테고리에 속할지 판단하는 이진 선형 분류 모델

서포트 벡터 머신 (SVM) 개념

빨간 X와 파란 O를 구분 하는 선 중 두 데이터를 잘 구분한 선은?  (SVM 알고리즘의 매개변수를 조절해서 선을 그림)

 

Margin의 최대화

  • 가운데 선이 Margin을 최대화
  • Margin은 선과 가장 가까운 양 옆 데이터와의 거리
  • 서포트 벡터(Support Vector) : 선과 가장 가까운 데이터
  • Margin은 선과 서포트 벡터와의 거리
  • Descision Boundary : 데이터 구분하는 선

Robustness

 

  • 양 옆 서포트 벡터와의 Margin을 최대화하면 robustness도 최대화
  • 데이터 과학에서 로버스트(robust)
    • 아웃라이어(outlier)의 영향을 받지 않는다는 뜻
  • 평균은 '로버스트(robust)하지 않다'고 하고, 중앙값은 '로버스트(robust)하다'고 표현

 

데이터의 정확한 분류

둘 중 어떤 선이 SVM의 구분선으로 적절할까요?

  • 첫 번째 구분선이 Margin이 더 큼
  • 하지만 첫 번째 구분선은 데이터를 정확히 구분하지 못함 (하나의 데이터만 너무 멀리 떨어져있기 때문)
  • 데이터를 정확히 분류하는 범위를 먼저 찾고, 그 범위 안에서 Margin을 최대화하는 구분선을 택하는 것

Outlier 처리

  • SVM은 우선 두 데이터를 정확히 구분하는 선을 찾음
  • 두 데이터를 정확히 구분하는 직선은 없음
  • 어느 정도 outlier를 무시하고 최적의 구분선을 찾음
  • 빨간 포인트 사이에 섞인 파란 포인트는 outlier로 취급
  • outlier는 무시하고 Margin을 최대화하는 구분선을 찾음

커널 트릭 (Kernel Trick)

  • 저차원 공간(low dimensional space)을 고차원 공간(high dimensional space)으로 매핑해주는 작업

 

  • 빨간 포인트와 파란 포인트를 구분할 수 있는 linear line은 없음
  • 차원을 바꿔주어 구분선을 그림
  • z = x^2 + y^2
  • 빨간 포인트는 원점으로부터의 거리가 짧아 z가 작음
  • 파란 포인트는 원점으로부터의 거리가 길어 z가 큼

차원 변환 후

 

  • 오른쪽 그래프에서 linear하게 그린 구분선은 왼쪽에서 원형으로 된 구분선과 동일
  • 차원이 달라져서 구분선의 모양이 다른 것 뿐
  • 저차원 공간(low dimensional space)을 고차원 공간(high dimensional space)으로 매핑해주는 작업
  • 처음부터 저차원 공간에서 non linear separable line을 구하려면 쉽지 않음
  • 고차원 linear를 구하고 저차원의 non linear한 해를 구한 것

 

sklearn SVM Parameter

Kernel parameter

  • linear, polynomial, sigmoid, rbf 등의 kernel을 선택 가능
  • 디폴트는 rbf
  • decision boundary의 모양을 선형으로 할지 다항식형으로 할지 등을 결정

kernel = linear 인 SVM은 어떤 것일까요?

 

C

  • Controls tradeoff detween smooth decision boundary and classfying training points correctly

 

- 초록색 구분선은 C가 decision boundary

- 주황색 구분선은 C가 작은 decision boundary

- C가 크면 training 포인트를 정확히 구분

- C가 작으면 smooth한 decision boundary

- C가 크면 decision boundary는 굴곡짐

- C가 작으면 decision boundary는 직선에 가까움

 

Gamma(γ)

  • Gamma: Defines how far the influence of a single training point reaches
  • reach는 decision boudary의 굴곡에 영향을 주는 데이터의 범위
  • Gamma가 작다면 reach가 멀다는 뜻
  • Gamma가 크다면 reach가 좁다는 뜻

Gamma 값이 클 때

  • Gamma가 크면 decision boundary는 더 굴곡짐

 

- Gammar 값이 크다는 것은 위와 같이 reach가 좁다는

- reach가 좁기 때문에 원형 안에 있는 포인트는 decision boundary에 영향을 주지 않음

- 가까이 있는 포인트들만이 선의 굴곡에 영향

- decision boundary는 굴곡지게 됨

- 멀리 있는 포인트는 영향이 없으므로 선과 가까이 있는 포인트 하나하나의 영향이 상대적으로 크기 때문

 

 

Gamma 값이 작을 때

  • Gamma가 작으면 decision boundary는 직선에 가까움

  • decision boundary와 가까이 있는 포인트 하나하나가 decision boundary에 주는 영향이 상대적으로 작음
  • 그래서 선이 포인트 하나 때문에 구부러지지 않음

 

C 와 Gamma

  • 값이 커짐에 따라 C는 두 데이터를 정확히 구분하는 것에 초점
  • Gamma는 개별 데이터마다 decision boundary를 만드는 것에 초점
  • C는 아무리 커져도 outlier가 없다면 decision boudnary는 하나
  • Gamma는 커짐에 따라 여러 decision boundary

 

오버피팅 (과적합, Overfitting)

  • 오버피팅이란 훈련 데이터를 지나치게 학습하는 것
  • 훈련 데이터에서는 100%에 가까운 성능을 내지만 테스트 데이터에서는 성능이 굉장히 떨어짐
  • Kerenl, C, Gamma 모두 오버피팅에 영향을 줄 수 있는 파라미터
  • 머신러닝에서도 성능을 높히는 것과 오버피팅을 막는 것 사이의 균형을 잘 지켜야 함
  • SVM은 training time이 길기 때문에 사이즈가 큰 데이터 셋에는 부적합
  • 노이즈가 많은 데이터 셋에서는 오버피팅이 될 수 있어 부적합

댓글