SVM는 Binanry Classiciation(이진분류) 상황에서 사용한다.
서포트 벡터 머신은 결정 경계와 가장 가까운 샘플(서포트 벡터)까지의 거리(마진)을 구해서 샘플을 분류하는 모델이다.
마진(결정경계와 데이터까지의 거리)을 최대화하는 결정경계를 찾는 것이 목적이다.
하지만 마진이 무작정 크다고 해서 좋은 결정경계를 얻는 것은 아니다.
마진이 크면 일반화 오차가 작아지고 마진이 작으면 과대적합 가능성이 높아진다.
초평면 : 벡터 공간에서 샘플을 나누는 평면 위 그림에서는 서포트 벡터 주위를 지나가는 굵은 선
양성 쪽 초평면과 음성 쪽 초평면 사이의 거리가 마진이다. 그림의 왼쪽의 두 식을 빼고 w의 길이로 나눠주면 마진의 크기를 얻을 수 있는데 (오른쪽 식) 마진의 크기를 최대화 하는게 목적이다.
그런데 여기서는 전제가 필요하다.
결정경계에 의해 샘플이 정확하게 분류된다는 전제가 필요한데 그러면 결정경계에 의해 샘플이 정확하게 분류되지 않는 비선형적 데이터는 어떻게할까?
다음과 같이 슬랙변수(오차허용)를 추가해서 비선형적 데이터도 분류할 수 있다. 슬랙변수를 추가한 목적함수가 오른쪽 식인데 여기서 C는 오차를 얼마나 허용할 건지에 대한 세팅값이다.
슬랙변수를 추가함으로써 분류에 오차는 있을수 있겠지만 더 일반적인 상황에서 모델을 사용할 수 있다.(트레이드 오프)
그림에서 처럼 C가 클수록 마진이 작아져서 오차를 덜 허용하지만 덜 일반화 된 결정 경계를 얻을 수 있고,
C가 작을수록 마진이 커져서 오차를 더 허용하지만 더 일반화 된 결정 경계를 얻을 수 있다.
### 사이킷런으로 SVM ###
1
2
3
4
5
6
7
8
9
10
11
12
|
from sklearn.svm import SVC
# sklearn.svm 라이브러리 사용
svm = SVC(kernel='linear', C=0.00001, random_state=1)
# kernel 매개변수에 linear를 추가해서 선형적인 데이터 분류
# C=1.0 : 슬랙변수 앞에 곱하는 값으로 C를 통해 마진 폭을 조정한다.
# C가 클수록 마진 폭이 작아진다.
svm.fit(X_train_std, y_train)
plot_decision_regions(X_combined_std, y_combined, classifier = svm,
test_idx=range(105, 150))
plt.show()
|
cs |
'머신러닝' 카테고리의 다른 글
차원 축소(Dimensionality Reduction), PCA (0) | 2023.01.31 |
---|---|
군집(Clustering), K-평균 알고리즘(K-mean) (0) | 2023.01.30 |
Kernel Ridge Regression(KRR) (0) | 2023.01.28 |
Kernel method, feature space(특성 공간) (0) | 2023.01.27 |
앙상블 학습, Random Forest 개념 (0) | 2023.01.26 |