- 하나의 분류 그룹을 다른 그룹과 분리하는 최적의 경계를 찾아내는 알고리즘
- 마진이 가장 넓은 선을 찾는 알고리즘
- Support Vector간의 가장 넓은 margin(간격)을 가지는 초평면(결정경계)가 최대화 하는 것이 목적
- 초평면은 데이터가 존재하는 공간보다 1차원 낮은 부분 공간
- 공간을 나누는 목적으로 사용
- Margin
- 두 Support Vector간의 너비
- Hard Margin
- Outlier 무시X
- Margin이 매우 좁아질 수 있다
- Overfitting의 원인
- Soft Margin
- Outlier 무시
- Margin의 거리 넓어진다
- Underfittin의 원인
- Hyper Parameter
- C
- Outlier를 무시하는 비율 설정
- Hard와 Soft 선택을 결정하는 파라미터
- default : 1
- 크면 클수록 Hard ==> Overfitting
- 작으면 작을수록 Soft ==> Underfitting
- 종류
- Linear SVM
from sklearn.svm import SVC svc = SVC(kernel='linear', C=c, random_state=0) # 보통 c는 list형태, 반복문 이용해 학습 # 학습 svc.fit(전처리된 Feature, Label) pred_train = svc.predict(전처리된 Feature) pred_test = svc.predict(전처리된 Feature) train_acc_list.append(accuracy_score(y_train, pred_train)) test_acc_list.append(accuracy_score(y_test, pred_test))
- NonLinear SVM
- 선형으로 분리가 되지 않는 경우
- 기존의 Feature를 이용한 파생변수로 Feature 추가(다항식 특성 추가)
- 하지만 차원을 늘리는 경우(다항식 특성을 추가하는 경우) 낮은 차수의 다항식은 데이터의 패턴을 잘 표현하지 못해 과소적합이 너무 높은 차수의 다항식은 과대적합과 모델을 느리게 하는 문제 존재
- 이를 개선 위해 Kernel Trick 이용
- 다항식 특성을 추가하지 않으면서 수학적 기교를 적용해 다항식 특성을 추가한 것과 같은 결과를 얻을 수 있는 작업
- 종류
- 방사 기저 함수(radial base function-RBF)
- 커널 서포트 벡터 머신의 기본 커널 함수
- 특정 데이터 포인트를 기준점으로 다른 데이터 포인트들이 얼마나 떨어졌는지를 계산
- Hyper Parameter
- C : 오차(Outlier) 허용 기준
- gamma
- 큰 값일 수록(이상치, 경계값까지 학습해) 과적합이 날 가능성 크다
- 모델이 과대적합일 경우 => 값을 감소시킴
- 모델이 과소적합일 경우 => 값을 증가시킴
- => C, gamma가 클수록 과적합 가능성 크다
svc = SVC(kernel='rbf', # default가 rbf이기에 생략가능 C=1, gamma=gamma, random_state=0) svc.fit(전처리된 Feature, Label)
from sklearn.metrics import roc_auc_score, average_precision_score roc_auc_score(Label, prob), average_precision_score(Label, prob)
param = { 'kernel':['rbf', 'linear'], 'C':[0.001, 0.01, 0.1, 1, 10, 100], 'gamma':[0.001, 0.01, 0.1, 1, 10] } svc = SVC(random_state=0, probability=True) gs_svc = GridSearchCV(svc, param_grid=param, scoring='accuracy', cv=3, n_jobs=-1) gs_svc.fit(전처리된 Feature, Label)