본문 바로가기

수업내용정리/인공지능

[SckitLearn]지도학습 알고리즘(3)_비선형 SVM 분류기의 특징과 사용법

저번 시간에는 서포트 벡터 머신(SVM)의 기본적인 개념과 이를 활용한 선형 SVM 분류기의 사용법을 살펴보았다.

이번시간에는 비선형 SVM 분류기에 대해 알아보도록 하자.


비선형 SVM 분류기란?

먼저 비선형 SVM 분류기에 대해 알아보기 전에, 왜 이러한 비선형 SVM 분류가 필요하였는지 알아볼 필요가 있다. 

대체로 많은 경우에선, 선형 SVM 분류기는 잘 작동한다. 하지만 아래의 [그림-1]과 같이 비선형적인 특징을 가진 데이터들은 기존의 선형 SVM 분류기만으론 구분을 할 수가 없다. 

 

[그림 1] sklearn.datasets.make_moons() 으로 만든 데이터셋

비선형적인 데이터들을 분류하기 위해서는 기존의 선형 분류기에 비선형적인 특징을 추가해야하한다. 

이를 위한 다항식, 가우시안RBF, 문자열, 문자열 서브시퀀스, 레벤슈타인 거리 커널 등 다양한 커널함수가 존재한다.

 

커널 함수란?

 

커널함수분류를 위한 축을 하나 더 추가해 주는 것이라 이해하면 된다. 사례를 들어 살펴보자.

아래 [그림-2]와 같이 하나의 축(x)을 가진 데이터축(y=x^2)을 하나 추가함으로써 선형적으로 분류가 가능해진다.

이때 축에 사용되는 함수를 커널 함수라고 한다. 아래 사례에서커널 함수는 y=x^2이 될 것이다.

이처럼 커널함수는 특성을 새롭게 추가해 분류를 보다 쉽게 해 준다는 장점이 있다.

 

[그림-2] 1차원 데이터에 새로운 축 추가

 

이제 각각의 커널함수에 대해 알아보도록 하자.

 

다항식 커널

 

가장 간단하면서도 기본적이다. 낮은 차수의 다항식은 복잡한 데이터를 잘 표현 못하며 높은 차수의 다항식은 많은 특성을 추가하기 때문에 모델이 느려진다는 단점이 존재한다. [그림 3-1]와 같이 사용이 가능하다.

 

 

가우시안RBF 커널

 

비선형적인 특성을 가진 데이터에 대해 유사도함수를 사용해 계산한 값을 새로운 특성으로 삼을 수 있다.

유사도 함수란 각 샘플이 특정 랜드마크와 얼마나 유사한지를 측정하는 지표이다.

가우시안 RBF 커널은 유사도 함수로써 가우시안 RBF를 사용한다.  가우시안 RBF는 다음과 같다. 

[식 1]가우시안 RBF

위 함수는 x랜드마크 l 와 같은 위치인 경우 1, 멀리 갈수록 0에 가까워지는 함수이다.

 

어떤 방식으로 유사도 함수가 사용되는지 알아보기 위해 [그림-2]의 왼쪽 그래프를 가져와 예시로 들어보자.

랜드마크가 x = -2, x =1 , 𝛾 = 0.3 인 가우시안 RBF를 유사도 함수로 사용하자.

 

x = -1에 대해 살펴보면 랜드마크 -2에 대해선 대략 0.74,

[식 2-1] 감마가 0.3, x가 -1, 랜드마크 -2에 대한 가우시안RBF

랜드마크 1에 대해선 대략 0.3이다.

[식 2-2] 감마가 0.3, x가 -1, 랜드마크 1에 대한 가우시안RBF

가우시안 RBF를 적용해 첫 번째 랜드마크 -2를 통해 얻은 값들을 특성 x2로, 두번째 랜드마크 1을 통해 얻은 값들을 특성 x3으로 하여 시각화하면 아래 [그림 3-2]와 같다.

 

[그림 3-2] 가우시안RBF를 통해 얻은 새 특성

[그림 3-2]의 우측 그래프를 보면 분류가 불가능했던 데이터가 비선형적인 특성을 추가함으로써 분류가 가능해졌다.

 

실제로 가우시안RBF 커널 함수를 사용할때에는 모든 샘플을 랜드마크로 잡는다.

예를들어 n개의 특성을 가진 m개의 샘플이 있으면 m개의 특성을 가진 m개의 샘플이 된다.

 

 

+문자열 커널 문자열 서브시퀀스 레벤슈타인 거리 커널

위 커널들은 특정 종류의 데이터를 분류하는데 특화된 커널 함수들이며 잘 사용하지 않는다.

 

비선형 SVM 분류기 사용하기

개념에 대해 알아보았으니 실제 사용 방법에 대해 알아보도록 하자.

맨 위의 [그림 1]의 데이터셋을 분류해보자.

 

비선형 분류를 위해 사이킷런에서 SVM 분류기에 다항식 커널가우시안 RBF를 사용할 수 있다.

 

다항식 커널

from sklearn.svm import SVC
from sklearn.datasets import make_moons

#훈련 샘플 생성
X,y = make_moons(n_samples=100,noise=0.3,random_state=2021)

#다항식 커널 SVM 분류 모델 생성 및 훈련
poly_svc = SVC(kernel="poly", degree=3, coef0=1, C=5)
poly_svc.fit(X,y)

 

파라미터

gamma 다항식 커널의 감마 값을 결정
degree 사용할 다항식의 차수. 아래 [식 3]의  다항식 커널의 d에 해당
coef0 모델이 고차 다항식에 얼마나 영향을 받을지 결정한다. 아래 [식 3]의다항식 커널의 r에 해당
C 오류를 얼마나 허용할 지에 대한 수치. C가 클수록 오류를 적게 허용하고, 낮을수록 오류를 많이 허용한다. (규제항)

 

[식 3] 다항식 커널

사이킷런 내에서 다항식 커널함수는 이렇게 정의되며 𝛾는 gamma에 해당하며, r은 coef0, d는 degree에 해당한다.

위 정의에 따르면 coef0이 클수록 모델은 고차 다항에 큰 영향을 받게 된다.

 

 

가우시안커널

from sklearn.svm import SVC
from sklearn.svm import LinearSVC
from sklearn.datasets import make_moons

#훈련 샘플 생성
X,y = make_moons(n_samples=100,noise=0.3,random_state=2021)

#가우시안RBF 커널 SVM 분류 모델 생성 및 훈련
rbf_svc = SVC(kernel="rbf",gamma=5,C=0.001)
rbf_svc.fit(X,y)

 

파라미터

gamma 가우시안 RBF에서 감마 값. 값이 커질수록 샘플에 가까워지며 샘플에 따라 경계선이 형성된다.
C 감마와 비슷하게 동작한다. 오류를 얼마나 허용할 지에 대한 수치. C가 클수록 오류를 적게 허용하고, 낮을수록 오류를 많이 허용한다.(규제항)

 

기존의 선형 SVM 분류기와 비교해 보자. [그림 5]와 [그림 6]을 살펴보면 확실히 분류를 잘하는 것을 확인할 수 있다.

[그림5] 다항식 커널 SVM 분류(좌) 가우시간RBF 커널 SVM 분류(우)
[그림6] 선형 SVM 분류

 

이번시간엔 비선형 SVM 분류기의 개념과 사용 방법에 대해 알아보았다.
혹시 더욱 궁금한 점이 있거나 잘못된 부분이 있다면 자유롭게 댓글을 통해 알려주세요!

참고

Geron  Aurelien, 박해선 역, 핸즈온 머신러닝, 한빛미디어, 2020

 

https://scikit-learn.org/stable/modules/svm.html#classification

 

1.4. Support Vector Machines

Support vector machines (SVMs) are a set of supervised learning methods used for classification, regression and outliers detection. The advantages of support vector machines are: Effective in high ...

scikit-learn.org

 

https://velog.io/@mjkiim_0217/%EC%82%AC%EC%9D%B4%ED%82%B7%EB%9F%B0%EC%9D%84-%ED%83%80%EA%B3%A0-%EB%96%A0%EB%82%98%EB%8A%94-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%B6%84%EB%A5%98-%EB%AA%A8%EB%8D%B8-%ED%88%AC%EC%96%B4

 

사이킷런을 타고 떠나는 머신러닝 분류 모델 투어

인기 있고 강력한 머신러닝 알고리즘을 둘러보겠다.

velog.io