SVM에 대해 학습해보겠습니다.
정말 잘 설명해주신 글이 있어 참고하였습니다.
https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-2%EC%84%9C%ED%8F%AC%ED%8A%B8-%EB%B2%A1%ED%84%B0-%EB%A8%B8%EC%8B%A0-SVM
머신러닝 - 2. 서포트 벡터 머신 (SVM) 개념
서포트 벡터 머신(SVM, Support Vector Machine)이란 주어진 데이터가 어느 카테고리에 속할지 판단하는 이진 선형 분류 모델입니다. (Reference1) 본 포스트는 Udacity의 SVM 챕터를 정리한 것입니다. 아래 그
bkshin.tistory.com
https://www.hackerearth.com/blog/developers/simple-tutorial-svm-parameter-tuning-python-r/
Simple Tutorial on SVM and Parameter Tuning in Python and R
Introduction Data classification is a very important task in machine learning. Support Vector Machines (SVMs) are widely applied in the field of pattern
www.hackerearth.com
https://ko.wikipedia.org/wiki/%EC%84%9C%ED%8F%AC%ED%8A%B8_%EB%B2%A1%ED%84%B0_%EB%A8%B8%EC%8B%A0
서포트 벡터 머신 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 선형 SVM이 두 자료(흰색 원, 검은색 원)을 직선으로 분리하고 있다. 서포트 벡터 머신(support vector machine, SVM[1][2])은 기계 학습의 분야 중 하나로 패턴 인식, 자료
ko.wikipedia.org
1. SVM(Support Vector Machine) 이란?
서포트 벡터 머신이란 분류 및 회귀 문제에 모두 사용할 수 있는
지도 기계학습 알고리즘입니다.
kernel Trick이라는 기술을 따르고 이 방식으로
데이터를 나눠주는 최적의 경계를 찾는다고 하네요!
아래의 그림으로 보면
하얀색 동그라미 카테고리와
검정색 동그라미 카테고리를
하나의 직선으로 분리하고 있습니다.
이 중 가운데 가장 두꺼운 선이 최적의 경계입니다.
이 두꺼운 선을 찾는게 서포트 벡터 머신 알고리즘이구요.
2. Margin의 최대화
Margin이란 선과 가장 가까운 양 옆 데이터와의 거리라고 합니다.
이 이미지에서 두 데이터를 가장 잘 구분하는 선은 B라고 생각되시나요?
위의 이미지에서 왜 B가 두 데이터를 가장 잘 구분하는 선일까요?
Margin을 최대화 하기 때문이라고 합니다.
아래 그림에서 선과 가장 가까운 포인트를 Support Vector 라고 합니다.
이 SupportVector와 hyperplane(최적의 구분선)과의 거리를 Margin이라고 하구요.
3. Robustness
마찬가지로 아래의 세개의 선 중 Margin을 최대화 하는 선은 B입니다.
C선은 빨간색 서포트 벡터와 거리는 짧지만 왼쪽 초록색 서포트벡터와의 거리는 길게 됩니다.
A선은 초록색 서포트 벡터와의 거리는 짧지만 빨간색 서포트벡터와의 거리는 길구요,
그래서 B선이 가장 적절한 hyperplane이 됩니다.
이 개념을 Margin을 최대화해서 robustness를 최대화 한다고 합니다.
Robust란 우리말로 강건하다는 뜻이고 이상치(outline)에
영향을 가장 덜 받는다는 의미라고 합니다.
빨간색 포인트가 A선 기준으로 왼쪽에 찍혔다고 해도
가장 데이터를 잘 구분할 수 있는 선은 B이고
B선은 margin 이 최대화 된, robustness가
최대화 된 hyperplane이라고 하는 것 같아요.
4. 이상치(Outlier) 처리
아래 그림을 보면 초록색 원 사이에 빨간색 원이 섞여있습니다.
초록색원도 hyplerplane을 넘어 빨간포인트 쪽에 가깝게 위치해 있습니다.
SupportVectorMachine 알고리즘은 두 데이터를 구분하는 직선을 긋는다고 하면
이 두 포인트를 정확히 나눌 수 있는 직선을 존재하지 않다고 판단해
두 이상하게 찍힌 원을 outlier로 보고 무시하고
최적의 구분선을 찾는다고 합니다.
5. 커널 트릭 (Kernel Trick)
왼쪽의 이미지를 보면 빨간색 포인트와 초록색 포인트를 구분할 수 있는 선형line은 없습니다.
위에서 설명한 outlier도 무시 할 수 있지도 않구요.
이런 경우 오른그림처럼 차원을 바꿔주어 구분선을 그어
데이터를 분류할 수 있다고 합니다.
이렇게 저차원의 공간(low dimensional space)를
고차원 공간(high dimensional space)로 매핑하는 작업을
커널트릭(kernel trick)이라고 한다고 합니다.
커널트릭을 이용해서 저차원 공간을 고차원 공간으로 매핑하고
linear separable line을 구해서다시 line을 저차원 공간으로 매핑하면
non linear separable line을 구할 수 있다고 합니다.
저차원에서 구하기 힘든 구분선을 커널트릭을 이용해서
구하기 쉽게 만들어 주는 개념이라고 하네요.
이 개념은 머신러닝의 중요한 기법 중 하나라고 합니다!
6. scikit-learn의 SVM 살펴보기
이 알고리즘을 반영해서 Scikit learn에서는 SVM을 구현해 놨습니다.
https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm
API Reference
This is the class and function reference of scikit-learn. Please refer to the full user guide for further details, as the class and function raw specifications may not be enough to give full guidel...
scikit-learn.org
Scikit learn에서의 SVM의 중요한 파라미터라고 하면
kernel, C, Gamma 가 있습니다.
1) Kernel
sklearn 에서는 위에서 설명한 kernel 트릭의 방식을 선택해 줄 수 있습니다.
kernel parameter로 linear, polynomial, sigmoid, rbf 를
선택할 수 있다고 합니다. default 는 rbf입니다.
아래의 공식 문서에서 각 요소에 대한 자세한 내용을 설명해 주고 있습니다.
https://scikit-learn.org/stable/auto_examples/svm/plot_svm_kernels.html#sphx-glr-auto-examples-svm-plot-svm-kernels-py
Plot classification boundaries with different SVM Kernels
This example shows how different kernels in a SVC(Support Vector Classifier) influence the classification boundaries in a binary, two-dimensional classification problem. SVCs aim to find a hyperpla...
scikit-learn.org
2) C
C는 문서에서는 정규화 매개변수라고 설명하고 있습니다.
양수의 입력이 가능합니다.
default 값은 1입니다.
C가 커지게 되면 왼쪽처럼 더 굴곡진 구분선을 그려주게 되고
작아지게 되면 우측의 직선에 가깝게 구분선이 그려집니다.
3) Gamma
rbf, poly, sigmoid 에 대한 커널 계수라고 합니다.
기본값은 'scale' 입니다.
reach라는 개념은
경계선에 굴곡에 영향을 주는 데이터의 범위라고 합니다.
Gamma 값이 작으면 reach가 멀고,
크다면 reach 의 범위가 좁다는 의미입니다.
Gamma 값이 크게 주어지면 아래의 그림처럼
reach가 좁아지고
경계선을 그리는데 영향을 주는 포인트들이 많아집니다.
(연결된 고무줄(reach)이 짧아 경계선이 구부러질 가능성이 높다고 이해했습니다!)
Gamma 값이 작으면
reach값이 커지고, 아래의 그림처럼 고무줄(reach)이
널널하게 되어 경계선이 구부러지는 데에 영향이
덜 받게 됩니다.
결론적으로 Gamma가 크면 경계선이 더 굴곡지게 되고,
Gamma값이 작으면 직선에 가깝다고 합니다.
7. 과적합 (Overfitting)
과적합이란 훈련데이터에 대해서는 좋은 성능을 내지만
실제 테스트 데이터에 대해서는 성능이 떨어질 수 있는 현상입니다.
위의 파라미터들은 모두 과적합에 영향을 주는 파라미터라고 합니다.
아래 그림은 C와 Gamma가 지나치게 높아 오버피팅된 그림입니다.
성능을 높이고 오버피팅을 막기 위해 해당 파라미터들의
균형을 잘 지키는게 중요하다고 합니다!.
이상으로 SVM 에 대해서
정리를 해봤습니다.
틀린점이 있다면 지적 부탁드립니다.!
'인공지능 개발하기 > Machine Learning' 카테고리의 다른 글
교차검증(Cross-Validation) (0) | 2024.02.18 |
---|---|
퍼셉트론과 XOR 문제 (0) | 2024.02.18 |
[Tensorflow] 32. 앙상블(Ensemble) (0) | 2024.02.11 |
[Tensorflow] 31. 임베딩(Embedding) (0) | 2024.02.04 |
[Tensorflow] 30. keras RNN 모델 살펴보기 (0) | 2024.02.03 |