머신러닝

커널 SVM으로 비선형적 데이터 분류

김천종 2022. 11. 20. 23:15
반응형

SVM을 사용해서 비선형적 데이터를 분류하는 또 다른 방법은 커널 SVM을 사용하는 것이다.

그림과 같은 샘플은 선형적으로 구분할 수 없다. 이러한 샘플을 분류할 때 커널 SVM을 사용한다.

 

 

선형적으로 구분하기 힘든 데이터는 매핑 함수를 이용해서 원본 데이터에 새로운 차원을 부여한다.

 

위 그림처럼 x1^2 + x2^2 라는 새로운 차원을 부여하면 구분되지 않았던 샘플들이 새로운 차원 덕분에 구분되는 것을 볼 수 있다. 그리고 이러한 고차원 공간에서 두 클래스를 구분하는 초평면을 원본 샘플의 차원으로 투영하면 비선형 결정 경계를 얻을 수 있다.

 

커널 SVM에서는 위와 동일한 방법을 사용하지는 않지만 기본 아이디어가 저렇다고 한다.

이러한 식으로 분류가 가능하다.

 

 

 

### 커널 SVM으로 붓꽃데이터 분류 ###

1
2
3
4
5
6
7
8
9
10
11
from sklearn.svm import SVC
 
svm = SVC(kernel='rbf', random_state=1, gamma=0.2, C=0.1)
# kernel 매개변수에 rbf를 추가해서 선형적인 데이터 분류
# C=1.0 : 슬랙변수 앞에 곱하는 값으로 C를 통해 마진 폭을 조정한다.
# gamma=0.2 : gamma값이 커질수록 결정경계가 샘플에 가까워진다. 
 
svm.fit(X_train_std, y_train)
plot_decision_regions(X_combined_std, y_combined, classifier = svm, 
                      test_idx=range(105150))
plt.show()
cs
gamma = 0.2 로 했을 경우의 결과
gamma = 100 으로 했을 경우의 결과

결과 그림에서처럼 gamma의 값이 클수록 결정경계가 샘플과 가까워지는 것을 볼 수 있다. 

반응형