Python/머신러닝
[머신러닝] 서포트 벡터 머신 (SVM) 개념
빵으니
2020. 7. 24. 11:17
머신러닝
서포트 벡터 머신(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이 길기 때문에 사이즈가 큰 데이터 셋에는 부적합
- 노이즈가 많은 데이터 셋에서는 오버피팅이 될 수 있어 부적합