본문 바로가기
ML&DATA/핸즈온 머신러닝

5. SVM - 비선형 분류

by sun__ 2020. 9. 28.

www.youtube.com/watch?v=6omvN1nuZMc&list=PLJN246lAkhQjX3LOdLVnfdFaCbGouEBeb&index=13

박해선 교수님의 유튜브 강의로 공부했음을 밝힙니다. 

 


SVM

서포트 벡터 머신은 분류(선형, 비선형), 회귀, 이상치 탐색에 사용할 수 있는 다목적 머신러닝 모델이다. 굉장히 사용 빈도가 높으며 반드시 알고 있어야 한다. SVM은 복잡한 분류 문제에 잘 맞고 중간 이하 크기의 데이터셋에 적합하다.

 

 

5.2 비선형 SVM 분류

선형 SVM 분류기로 분류할 수 없는 비선형 데이터 셋에 사용한다. suuntree.tistory.com/298?category=875918 처럼 다항 특성과 같은 특성을 더 추가하여 비선형 데이터셋을 다룰 수 있다. 이렇게 하면 선형적으로 구분되는 데이터셋이 만들어질 수 있다.

 


<실제 모듈 사용>

 

1. polynomialfeatures 사용

다항식 특성을 pipeline에 추가해서 전처리 후 사용. 

LinearSVC는 liblinear라이브러리를 기반으로 함. 시간복잡도는 $O(m*n)$

from sklearn.datasets import make_moons
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC

X, y = make_moons(n_samples=100, noise=0.15)
polynomial_svm_clf = Pipeline([
    ("poly_features", PolynomialFeatures(degree = 3)),
    ('scaler', StandardScaler()),
    ('svm_clf', LinearSVC(C=10, loss='hinge'))
])

polynomial_svm_clf.fit(X,y)
polynomial_svm_clf.predict([[0.5,0.5]])
#array([0], dtype=int64)

 


SVC는 커널 트릭 알고리즘을 구현한 libsvm을 기반으로 함. 시간복잡도는 $O(m^2n)$ ~ $O(m^3n)$ 훈련 샘플 수에 민감하다. 하지만 특성 개수가 작을 땐 잘 확장됨

 

2. 다항식 커널

polynomialfeatures를 사용해서 다항식 특성을 추가하는 것은 모델을 느리게 만든다. 커널 트릭이라는 수학적 기법을 적용해서 실제로는 특성을 추가하지 않으면서 특성을 추가한 것과 같은 결과를 만든다.

coef는 모델이 높은 차수와 낮은 차수에 얼마나 영향을 받을지 조절한다. (다항식 커널의 상수항 $r$에 해당)

from sklearn.svm import SVC
poly_kernel_svm_clf = Pipeline([
    ('scaler', StandardScaler()),
    ('svm_clf', SVC(kernel = 'poly', degree = 3, coef0=1, C=5))
])
poly_kernel_svm_clf.fit(X,y)
poly_kernel_svm_clf.predict([[0.5, 0.5]])
#array([0], dtype=int64)

과대적학/과소적합되지 않도록 degree를 정해줘야 한다.

 


 

3. 가우시안 RBF 커널

유사도 특성을 많이 추가하는 것과 같은 비슷한 결과를 얻을 수 있다.

gamma도 C와 마찬가지로 규제의 역할을 하는 하이퍼 파라미터이다. 모델이 과대적합인 경우 작은 값을 주고, 모델이 과소적합인 경위 큰 값을 줘야 한다.

rbf_kernel_svm_clf = Pipeline([
    ('scaler', StandardScaler()),
    ('svm_clf', SVC(kernel='rbf', gamma=5, C=0.001))
])
rbf_kernel_svm_clf.fit(X,y)
rbf_kernel_svm_clf.predict([[0.5,0.5]])

gamma와 C로 적절히 규제해줘야 함

 


 

<유사도 특성>

key : 각 샘플이 특정 랜드마크와 얼마나 닮았는지 측정하는 유사도 함수로 계산한 특성을 추가하는 것.

랜드마크 : 데이터셋의 일부 혹은 전체 샘플

 

유사도 함수로는 가우시안 방사 기저 함수(radical basis function)을 사용함. 랜드마크에서 아주 멀리 떨어진 경우 0, 랜드마크와 같은 위치인 경우 1까지 종모양으로 나타남.

gaussian rbf

 

예를들어 샘플1, 샘플2를 랜드마크라고 했을 때, 모든 데이터셋의 샘플을 랜드마크와 유사도함수에 넣어서 나온 값을 새로운 특성1, 특성2로 사용하는 것.

 

모든 샘플을 랜드마크로 사용시, 훈련 세트에 있는 n개의 특성을 가진 m개의 샘플이 m개의 특성을 가진 m개의 샘플로 변환된다. -> 훈련 세트가 매우 클 경우 동일한 크기의 아주 많은 특성이 만들어진다.

 

특성이 1개인 데이터셋에서 -2, 1특성을 갖는 샘플을 랜드마크로 사용한 경우

 


 

<시간복잡도>

 

'ML&DATA > 핸즈온 머신러닝' 카테고리의 다른 글

5. SVM - 선형분류  (0) 2020.09.28
4 - 정리, 연습문제  (0) 2020.09.18
4 - 로지스틱 회귀, 소프트맥스 회귀  (0) 2020.09.15
4 - 다항회귀, 규제  (2) 2020.09.09
4 - 선형회귀 (경사하강법)  (0) 2020.09.04