반응형

Support Vector Machine(SVM)은 결정 경계(Decision Boundary)

즉, 분류를 위한 기준 선을 정의하는 모델로 볼 수 있다.

 

분류를 통해 모든 데이터를 A그룹과 B그룹으로 나누게 되면 새로운 데이터에 대해 이 새로운 데이터가

어느 경계에 속하는지, A그룹인지 B그룹인지를 분류할 수 있게 된다.

(Support Vector Machine에서 Support Vectors는 결정 경계와 가까이 있는 데이터 포인트들을 의미한다.

아직 결정 경계와 데이터 포인트가 어떤건지 잘 모르니 그런가보다 하고 아래 내용을 보자.)

 

 

 

위와 같이 점들이 존재할 때 이를 그룹화시키는 선을 나타내고 그 선을 기준으로 파란그룹, 빨간그룹으로 나뉘게 된다.

하지만 이를 어떠한 기준으로 구분할 것인가?

 

아래 그림을 보자.

 

 

A~F까지 다양한 방법으로 그룹을 나눌 수 있다.

 

그럼 첫번째 의문이 생긴다.

 

 

이들 중 어떤 방법이 좋은 방법인가?

 

 

그룹F가 가장 좋은 방법이라고 볼 수 있다.

기준선에서 빨간, 파란 데이터까지의 거리가 멀수록 좋은 방법이라 볼 수 있다.

 

이를 좀 어렵게 얘기하면 "최적의 결정 경계는 마진을 최대화한다." 라고 말할 수 있다.

 

그럼 여기서 두번째 의문이 생긴다.

 

 

마진이란 무엇인가?

 

 

마진(Margin)은 결정 경계와 서포트 벡터 사이의 거리를 의미한다.

 

 

 

가운데 실선이 바로 앞에서의 기준선이고 이를 결정경계(Decision Boundary) 라고 한다.

 

그리고 결정경계로부터 검은 테두리가 있는 빨간점 1개, 파란점 2개까지의 영역을 두고 점선을 그었다.

여기서 보이는 점선에서부터 기준선까지의 거리가 바로 마진(Margin)이다.

 

그리고 위 그림에서 x축과 y축 2개의 속성을 가진 데이터로 결정경계를 나타내기 위해

총 3개의 데이터 포인트(서포트 벡터)가 필요했다.

 

즉, n개의 속성을 가진 데이터는 최소 n+1개의 서포트 벡터가 존재한다는 것을 알 수 있다.

 

다시 위의 그림을 보자.

 

파란 점 2개(2개의 데이터포인트)를 통해 하나의 직선을 나타낼 수 있다.

그리고 이와 평행하면서 빨간 점과 만나는 선을 긋자.

이 과정을 통해 Margin값을 구할 수 있고 최대의 Margin값을 갖는 결정경계를 우수한 결정경계로 볼 수 있다.

 

이렇게 첫번째 의문도 해결이 되었다.

 

 

그리고 이 과정을 통해 SVM의 장점을 파악할 수 있다.

 

SVM에서 결정경계를 정의하는 것은 결국 서포트 벡터이고 그렇기 때문에 데이터 포인트 중 서포트 벡터만 잘 골라내었다면 그 외에 수많은 데이터 포인트들은 무시될 수 있다. 그래서 매우 빠르다고 한다.

 

 

다음은 이상점, 이상치라고 불리는 Outlier에 대한 내용이다.

 

우선 아웃라이어란 데이터 상의 다른 값들의 분포와 비교했을때 비정상적으로 떨어져있는 관측치이다.

즉 데이터를 취득하는 과정에서 어떠한 문제로 튄 값이 발생한 경우가 이에 해당될 수 있을 것이다.

 

아래 그림에서 초록색 사각형으로 나타낸 데이터들이 아웃라이어 데이터이다.

 

 

그럼 위의 그림에서 Margin값은 어떤 값을 갖는게 좋은 것일까?

 

우선 상단에 보이는 Margin값이 작은 그림을 Hard Margin(하드마진)이라고 한다.

아웃라이어를 허용하지 않도록 기준을 까다롭게 세운 것이다. 그리고 이는 오버피팅(Over Fitting)을 일으킬 수 있다.

 

***  오버피팅(Over fitting)이란?  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ****

**                                                                                                                                            **

**  데이터들을 표현하기 위해 모든 데이터들을 참고하여 나타내는 것으로 볼 수 있다.                                  **

**  예를 들어 1, 2, 3, 4, 5 이렇게 총 5개의 데이터가 있다고 보자. 이 데이터들의 평균은 3이고 중앙값도 3이다.  **

**  다음으로 1, 2, 3, 4, 100 이렇게 데이터가 바뀌었다고 보자. 이제 평균은 22, 중앙값은 여전히 3이다.             **

**  여기서 100이 아웃라이어에 해당하게 되고 아웃라이어를 고려하게 되면 평균값이 22가 되어버려                **

**  이 데이터들을 표현하기가 어려워진다.                                                                                          **

**  즉 이렇게 아웃라이어가 발생하게 되면 어느정도 이를 무시하고 추세를 나타내어줄 수 있어야 하는데           **

**  오버피팅은 이러한 아웃라이어 데이터들을 모두 계산에 포함시켜 데이터들에 영향을 주게 되는 것을 말한다.  **

**                                                                                                                                              **

*** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ***

 

 

그리고 위의 그림 중 하단에 나타난 그림은 아웃라이어들이 마진 안에 어느정도 포함되도록 여유롭게 기준을 잡았다.

이를 소프트 마진(Soft Margin)이라고 하고 이러한 경우 서포트 벡터와 결정 경계 사이의 거리가 멀어지게 되고

이는 언더피팅(UnderFitting) 문제가 발생할 수 있다.

 

 ** Under Fitting은 모델이 너무 간단하게 표현되어 데이터들의 분류 정확도가 떨어지는 것을 말한다.

 

따라서 Hard Margin같이 아웃라이어를 모두 포함시켜서 데이터들에 영향을 주는 Margin값도 아닌,

그렇다고 너무 유한 범위로 데이터 분류 정확도를 떨어뜨리는 Soft Margin값도 아닌

SVM이 어느정도 Outlier을 무시하고 최적의 구분선을 찾는 (세상에서 제일 어려운 말이라는)"적당한" 값을

사용해야 한다.

 

 

다음은 커널에 대한 이해이다.

 

지금까지는 선형으로 결정 경계(Decision Boundary)를 그을 수 있는 형태의 데이터 시트를 예시로 진행하였다.

그런데 만약 SVM이 선형으로 분리할 수 없는 데이터 세트가 있다면 어떻게 해야 할까?

아래 그림을 보자.

 

이는 결정 경계 직선을 어떻게 그려도 빨간 점들과 파란 점들을 구분하기 어려운 데이터 분포이다.

그리고 이러한 상황에서는 차원을 바꿔줌으로서 구분선을 나타낼 수 있게 된다.

 

위의 그림은 x축과 y축으로 표현되는 2차원 데이터들이다.

그럼 z = x^2 + y^2 라는 식을 통해 x와 z축 상에서 이 데이터들을 나타내어보자.

 

빨간색으로 나타내어진 데이터들과 파란색으로 나타내어진 데이터들 모두 원형인 모습을 띄고 있으므로

파란색 점들의 데이터들은 어느정도 일정한 z값을 갖게 될 것이고 빨간색 점들 역시 어느정도 일정한 z값을

갖게 될 것임을 예측할 수 있다.

 

즉 x축과 z축을 통해 위의 그림과 같이 표현될 수 있고 이렇게 표현되어진 데이터들은 다시 선형으로

구분되어질 수 있게 되었다.

 

이렇듯 저차원 공간(Low Dimensional Space)을 고차원 공간(High Dimensional Space)으로 매핑해주는 작업을

커널 트릭(Kernel Trick)이라고 한다.

 

그럼 이제 사이킷 런(sklearn) SVM의 중요한 파라미터인 kernel, C, Gamma에 대해 알아보자.

 

우선 sklearn이란 파이썬에서 가장 유명한 머신러닝 라이브러리 중 하나로 분류, 회귀, 군집화, 의사결정 트리 등의

다양한 머신러닝 알고리즘을 적용할 수 있는 함수들을 제공한다.

 

sklearn의 파라미터 중 첫번째 kernel은 linear, polynomial, sigmoid, rbf 등의 kernel을 선택할 수 있다.

(기본값은 rbf로 설정된다.)

 

자세한 내용은 아래 링크를 확인해보면 정보가 많다.

scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

 

kernel은 decision boundary 즉 결정 경계를 선형으로 할지, 다항식형으로 할지 결정하는 파라미터이다.

(linear은 gamma값의 영향을 받지 않는다. poly, sigmoid, rbf 의 kernel 방식에서 gamma가 사용된다.)

 

앞에서 2차원의 데이터를 3차원으로 변경하여 나타내는 Kernel은 poly(다항식)방식이다.

 

그 외 sigmoid, rbf 값은 추가적인 공부가 필요하다.

 

 

그 다음으로 알아볼 파라미터는 C이다.

C: Control tradeoff between sooth decision boundary and classfying training points correctly

 

 

 

위의 그림에서 초록색 구분선은 C가 큰 Decision boundary이고, 노란색 구분선은 C가 작은 Decision Boundary이다.

C가 크면 training point들을 정확히 구분하는 반면 C가 작으면 smmoth한 Decision Boundary를 그린다.

 

이는 앞에서 언급했던 Hard Margin, Soft Margin과 같은 얘기로

C가 크면 Margin이 작아져 Hard Margin 형태를 갖고( 아웃라이어를 모두 포함)

C가 작으면 Soft Margin 형태를 갖는다. ( 아웃라이어는 버림)

 

 

 

 

마지막으로 알아볼 파라미터 감마(Gamma).

 

Gamma는 결정 경계를 얼마나 유연하게 그을 것인지 정해준다.

Gamma 값을 높이면 학습 데이터에 많이 의존해서 결정 경계를 구불구불 긋게 되고 이는 위에서의 Hard Margin과 같이

오버피팅을 초래할 수 있다.

 

반대로 Gamma 값을 낮추면 학습 데이터에 크게 의존하지 않고 결정 경계를 직선에 가깝게 긋게 되고

이는 Soft Margin과 같이 언더피팅을 유발할 수 있다.

 

 

 

 

 

위의 사진은 Gamma가 1인 값일때를 나타낸 것이다.

 

그리고 비교를 위해 아래에 Gamma를 아주 높인 Gamma=10 인 경우와

Gamma를 많이 낮워 0.1의 값을 지정하였을때를 나타낸다.

 

 

 

 

이렇게 Support Vector Machine(SVM)에 대해 간단하게 알아봤다.

 

 

그리고 내용은 아래 블로그들을 참고하여 작성하였다.

 

 

 

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

 

hleecaster.com/ml-svm-concept/

 

서포트 벡터 머신(Support Vector Machine) 쉽게 이해하기 - 아무튼 워라밸

서포트 벡터 머신은 분류 과제에 사용할 수 있는 강력한 머신러닝 지도학습 모델이다. 일단 이 SVM의 개념만 최대한 쉽게 설명해본다. 결정 경계, 하드 마진과 소프트 마진, 커널, C, 감마 등의 개�

hleecaster.com

 

반응형

+ Recent posts