서포트벡터머신
결정경계 (Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델
그리하여, 분류되지 않은 새로운 점이 나타나면, 경계의 어느 쪽에 속하는지 확인해서 분류 과제를 수행할 수 있게됨.
차원이 늘어남에따라, 선이 아닌 평면의 형태로 결정경계가 바뀌는데, 더욱 고차원으로 가게되면 이를 초평면 (Hyperplane)이라 함
어떤 경계가 좋을까
위와 같은 경계들을 보면, A~E 보다 F가 더욱 안정적으로 보인다. 결정경계가 데이터 군으로부터 최대한 멀리 떨어지는게 좋다는 것이다.
실제로 Support Vectors는 결정경계와 가까이 있는 데이터 포인트들을 의미한다.
Margin 마진
마진은 결정경계와 서포트벡터 사이의 거리를 의미한다.
초록실선이 결정경계이고, 그 실선으로부터 검은 테두리가 있는 빨간 점 1개, 파란 점 2개가 영역을 두고 점선을 그려놓았는데, 점선으로부터 결정경계 까지의 거리가 바로 마진(margin)이다.
최적의 결정경계는 마진을 최대화 한다.
위 그림엔 2개의 속성을 가진 데이터들을 기반으로 결정경계를 그었는데, 이때 총 3개의 데이터포인트가 필요했다. 즉 n개의 속성을 가진 데이터에는 최소 n+1개의 서포트 벡터가 존재한다는 것을 알 수 있다.
SVM에서는 결정경계를 정의하는것이 결국 서포트벡터이기에, 데이터포인트 중 서포트벡터만 잘 골라낸다면, 나머지 쓸데없는 수많은 데이터포인트들을 무시할 수 있기에 매우 빠르다.
이상치를 얼마나 허용할것인가
선을 튀어나가버린 데이터가 발생하기마련이다.
여기서 하드마진과 소프트마진을 이야기한다.
하드마진
아웃라이어를 허용하지않고 까다로운 기준으로 세운것을 말한다. 그렇기에 서포트벡터와 결정경계 사이의 거리가 매우 좁다. (Margin이 작아진다).
이렇게 될 경우 오버피팅문제가 발생할 수 있다.
소프트마진
아웃라이어들이 마진안에 어느정도 포함되도록 너그럽게 기준을 잡은것이다. 이렇게 잡으니, 서포트벡터와 결정경계 사이의 거리가 멀어진다 (margin이커진다)
즉 대충대충 학습하는 꼴이라 언더피팅문제가 발생할 수 있다.
파라미터 C
from sklearn.svm import SVC
classifier = SVC(C=0.01)
이런식으로 C를 설정할 수 있는데, SVM모델이 오류를 어느정도 허용할 것인지 파라미터를 통해 지정할 수 있다.
C값이 클 수록 하드마진 (오류허용X) , 작을수록 소프트마진 (허용)이다.
Kernel 커널
poly
선으로 그을 수 없는 경우라면?
SVM을 사용할 떄 kernel을 지정하여 해결할 수 있다.
from sklearn.svm import SVC
SVC(kernel = 'poly')
와 같이 사용함으로써 사용할 수 있다. 그치만, 다른 커널을 사용할 떄 주의가 필요하다.
단순히 outlier때문에 선형분리가 불가능하다고 판단해서는 안된다.
RBF (방사기저함수 = 가우시안커널)
RBF커널은 2차원의 점을 무한한 차원의 점으로 변환한다.. 상당히 선형대수학적으로 어려운 내용이다..
Kernel 커널
poly
선으로 그을 수 없는 경우라면?
SVM을 사용할 떄 kernel을 지정하여 해결할 수 있다.
from sklearn.svm import SVC
SVC(kernel = 'poly')
와 같이 사용함으로써 사용할 수 있다. 그치만, 다른 커널을 사용할 떄 주의가 필요하다.
단순히 outlier때문에 선형분리가 불가능하다고 판단해서는 안된다.
RBF (방사기저함수 = 가우시안커널)
RBF커널은 2차원의 점을 무한한 차원의 점으로 변환한다.. 상당히 선형대수학적으로 어려운 내용이다..
파라미터 gamma
결정경계를 얼마나 유연하게 그을 것인가.
gamma값을 높이면 학습 데이터에 많이 의존해서 결정경계를 구불구불 긋게된다. → 오버피팅
낮추면, 결정경계를 직선에 가깝게 긋게된다 → 언더피팅
요약
어쩜 이렇게 잘 정리하셨을까.... 대단하시다..
- SVM은 분류에 사용되는 지도학습 머신러닝 모델이다.
- SVM은 **서포트 벡터(support vectors)**를 사용해서 결정 경계(Decision Boundary)를 정의하고, 분류되지 않은 점을 해당 결정 경계와 비교해서 분류한다.
- **서포트 벡터(support vectors)**는 결정 경계에 가장 가까운 각 클래스의 점들이다.
- 서포트 벡터와 결정 경계 사이의 거리를 **마진(margin)**이라고 한다.
- SVM은 허용 가능한 오류 범위 내에서 가능한 최대 마진을 만들려고 한다.
- **파라미터 C**는 허용되는 오류 양을 조절한다. C 값이 클수록 오류를 덜 허용하며 이를 **하드 마진(hard margin)**이라 부른다. 반대로 C 값이 작을수록 오류를 더 많이 허용해서 **소프트 마진(soft margin)**을 만든다.
- SVM에서는 선형으로 분리할 수 없는 점들을 분류하기 위해 **커널(kernel)**을 사용한다.
- **커널(kernel)**은 원래 가지고 있는 데이터를 더 높은 차원의 데이터로 변환한다. 2차원의 점으로 나타낼 수 있는 데이터를 다항식(polynomial) 커널은 3차원으로, RBF 커널은 점을 무한한 차원으로 변환한다.
- RBF 커널에는 **파라미터 감마(gamma)**가 있다. 감마가 너무 크면 학습 데이터에 너무 의존해서 오버피팅이 발생할 수 있다.
참조의 첫번째 아무튼워라밸님의 블로그에 정말 잘 소개되어있는것을 보고 기억하고자 많은 부분을 가져왔다.
이분의 블로그에 SVM말고도 다른 많은 좋은 자료들이 있으니, 들어가서 찾아보면 공부할거리들을 많이 얻을 수 있을 것이다.
참조 : http://hleecaster.com/ml-svm-concept/ , https://scikit-learn.org/stable/modules/svm.html
'Machine Learning' 카테고리의 다른 글
크로스엔트로피 Cross Entropy, KL Divergence (0) | 2021.06.07 |
---|