목표

1. kernel 트릭을 이용한 SVM을 이해한다.

2. 학습한 kernel SVM에 대해 Decision boundry 그래프를 그려본다.

 

1. kernel 트릭을 이용한 SVM 을 이해한다.

kernel 이란?

-  기존 SVM은 선형 SVM이라 불린다. 이 뜻은 아래 그림처럼 선형특성을 가지는 Decision boundry를 만든다는 것이다.

선형적인 Decision boundry (빨간색 사각형선 표시)

- 비선형성을 가지는 데이터를 분류 할 때는 어떻게 해야 할까?? 아래는 선형 적인 Decision boundry로 구분하기 힘든 XOR 형식의 데이터이다. 

XOR 형식의 데이터

- XOR 형식의 데이터에 대해 기존 SVM을 적용했을 때 그래프이다.

 

XOR 형식의 데이터를 기존 SVM으로 학습 시켰을때

- 이렇게 특징 데이터가 비선형성을 가지는 경우 비선형성의 데이터를 선형적인 특성으로 변환시킬만한 트릭이 필요하다.

- 이때 사용하는 기법이 Kernel 트릭이다.

- Kernel 트릭은 기존의 특징 데이터를 SVM이 구분 가능한 데이터의 형태로 변환 시키는 것이다. 아래는 널리 사용되는 Kernel 중 하나 인 방사 기저 함수(Radial Basis functionl; RBF) 이다.

RBF 필터 계산식

- RBF Kernel 트릭은 샘플 간의 유사도 함수(similarity function)로 사용한다고 한다.

- 이렇게 지수 함수로 얻은 값이 1에 가까우면 두 샘플 간 거의 비슷한 값, 0에 가까우면 매우 다른 샘플이라 한다.

 

 

2. 학습한 kernel SVM에 대해 Decision boundry 그래프를 그려본다.

 

- 아래는 RBF Kernel 트릭을 이용해 데이터를 변환시키고 선형 SVM을 적용하는 코드와 그래프이다.

from sklearn.svm import SVC
svm = SVC(kernel='rbf', C=1.0,gamma=0.2, random_state=1)
svm.fit(X_xor, y_xor)

- 이 코드에서 gamma 값은 크면 클수록 일반화에 약해짐으로 학습시킬 때 주의하자.

RBF kerenel을 이용해 데이터를 변환시키고 SVM을 학습 시켰을때

- 마지막으로 gamma 값을 100.0으로 했을 때 그래프이다. 

gamma 값은 100으로 지정하고  SVM을 학습 시켰을 때

목표

1. (Support Vector Machine; SVM)을 이해하고 꽃 분류 모델을 만든다.

2. 학습한 SVM에 대해 Decision boundry 그래프를 그려본다.

 

1. (Support Vector Machine; SVM) 을 이해하고 꽃 분류 모델을 만든다.

SVM 이란?

-  SVM을 이해하려면  Decision boundry, 서포트 벡터, 마진을 알아야한다.

1. decision boundry

  - 직역하면 결정 경계선을 의미한다. 

Decision boundry (빨간색 사각형선 표시)

2. support vector

  - 결정 경계선에서 가장 가까운 데이터를 의미한다. 가깝다는 것은 간단하게 L2 Norm으로 계산했을 때 나오는 값을 봤을 때 다른 데이터 보다 작은 값을 의미한다.

3. margin 

 -  서포트 벡터와 결정 경계선간의 거리

 - 마진을 최대화했다 -> 일반화 오차를 낮췄다. 

 - 마진을 최소화했다 -> 일반화 오차가 크다. (오버피팅)

서포트 벡터(동그라미 표시), 마진(직선)

- SVM은 학습을 통해 서로 다른 레이블과 매칭하는 특성 데이터의 support vector와 생성할 decision boudry 간에 margin값을 최대화하는 것이 목표이다. 

- soft margin classification : 이전의 SVM에서 슬랙 변수를 이용하여 선형적으로 구분되지 않는 데이터에서 선형 제약 조건을 완화시킨 분류기이다. 

 

 

from sklearn.svm import SVC
svm = SVC(kernel='linear', C=1.0, random_state=1)
svm.fit(X_train_std, y_train)

- 위는 SVM을 생성하고 학습시키는 코드이다.

- SVC인 이유는 Support Vector classification 이기 때문이다. (SVM과 학습 원리 동일)

- 이때 C 값은 마진 폭을 조절해 주는 변수이다. C 값을 조절하여 편향-분산 트레이드오프 (bais vs variance trade-off)를 조절한다.

 

2. 학습한 SVM에 대해 Decision boundry 그래프를 그려본다.

plot_decision_regions(X_combined_std, y_combined,classifier=svm, test_idx=range(105, 150))
plt.xlabel('petal length [standardized]')
plt.ylabel('petal width [standardized]')
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()

- 위 코드는 학습한 모델을 아래 챕터에서 정의한 함수를 재사용하여 그리는 코드이다.

https://computervision-is-fun.tistory.com/111

- 아래 그림은 학습한 SVM의 Decision boundry 그래프이다.

+ Recent posts