매일공부

[sklearn] SVM(Support Vector Machine) 본문

IT/ML

[sklearn] SVM(Support Vector Machine)

aram 2022. 11. 9. 00:22

 

서포트 벡터 머신; SVM(Support Vector Machine)

  • 데이터 간 거리측정하여 두 개의 데이터 사이의 중심을 구한 후 그 가운데에서 최적의 초평면(Optimal Hyper Plane) 찾아 데이터를 분류하는 머신러닝 모델
  • 비확률적 이진 선형분류모델

 

출처 https://kr.mathworks.com/discovery/support-vector-machine.html

1. 데이터를 정확히 분류하는 범위 찾기
2. 데이터를 분류하는 구분선 선택  
3. 선과 가장 가까운 데이터 포인트(서포트 벡터 support vector) 찾기
4. 데이터 구분하는 선과 서포트 벡터와의 거리(margin) 계산

목적

- 오류율 최소화
- 두 class 사이에 존재하는 margin 최대화구분선 = decision boundary(결정경계) 찾기

Hyper plane 초평면

- 그룹을 분류하는 데이터를 기준으로 한 선 또는 면

support vector

- maximum hyper plane (최대 초 평면)에 가장 가까운 벡터들

margin

  • 분류를 위한 경계선에 가장 가까운 데이터 사이의 거리
  • 하드 마진(hard margin) : 아웃라이어 허용x  > 오버피팅 (overfitting) 발생 가능성↑
  • 소프트 마진(soft margin) : 아웃라이어 어느정도 포함  > 언더피팅 (underfitting) 발생 가능성
      >> 이상치(outlier) 중요

장점

- 적은 데이터에 대해서 다른 머신러닝 모델에 비해 높은 정확도
- 예측 속도 빠름

 

유형

  • 선형 분류모델 : 직선으로 나눌 수 있음
  • 비선형 분류모델 : 직선으로 나눌 수 없음 > 고차원 특징 공간으로 사상하는 작업 필요

커널 트릭 kernel trick

  • 데이터를 고차원의 데이터 형태로 매핑하지는 으며 동일한 효과로 빠른 속도로 decision boundary를 찾는 방법
  • 직선으로 주어져 있던 입력샘플의 공간을 휘어진 공간으로 변형시키고 이전에 사용했던 직선으로 잘라내는 방법
  • 주어진 데이터를 고차원 특징 공간으로 사상하는 작업을 해줌

출처 https://datafreakankur.com/machine-learning-kernel-functions-3d-visualization/
출처 https://chetans13.wordpress.com/2021/05/20/why-kernel-trick-works-for-svm/

> 커널트릭을 사용하면 초평면이 지나면서 분류가 되는 것을 알 수 있음

  • 종류
    • Linear Kernel : 선형 분류 경계면
    • Polynomial Kernel 다항커널 : 비선형 경계면, 벡터의 내적
    • RBF(Radial Basis Function) Kernel OR Gaussian Kernel 가우시안 커널 : 차수가 무한대인 다항커널
    • Sigmoid Kernel 시그모이드 커널

출처 https://datascienceschool.net/03%20machine%20learning/커널 서포트 벡터 머신

 

from sklearn.svm import SVC, LinearSVC

  • (Linear) Support Vector Classification
  • 클래스 사이 마진이 최대화되는 초평면을 찾음
  • 초평면 : n차원 공간에 있는 n-1 부분 공간 : SVC vs 분류 오차 최소화 > 사이 균형
  • Decision boundary = (분류할 클래스) 벡터 공간차원 -1 
  • LinearSVC : Similar to SVC with parameter kernel=’linear’

cost (비용, C)

  • 모델의 오류를 허용하기 위해 decision boundary와 margin의 간격을 어느 정도로 할지를 결정
  • 얼마나 많은 데이터가 다른 클래스에 놓이는 것(오류)을 허용하는지를 결정하는 변수
  • cost(비용, C) 높게 : overfitting,  HardMargin, 오류 허용x
    cost(비용, C) 낮게 : underfitting, SoftMargin, 오류 허용o

 

Support Vector Machines 하이퍼파라미터

class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)

class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', *, dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

  • C: float, default=1.0
  • kernel: {‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, default=’rbf’
  • gamma: {‘scale’, ‘auto’} or float, default=’scale’

SVC 예시코드]  

from sklearn.svm import SVC

hyperparameters = {
    'C'      : [0.1, 1, 10, 100],
    'gamma'  : [0.0001, 0.001, 0.01, 0.1, 1],
    'kernel' : ['rbf']
}

RBF 커널의 gamma 매개변수

  • 데이터 포인트의 영향이 미치는 범위로, decision boundary의 곡률을 조정하는 parameter
  • gamma : 학습데이터 의존, 구불구불하게 그어  overfitting
    gamma : 학습데이터 의존x, 직선에 가깝게 그어 underfitting

출처 https://datascienceschool.net/03%20machine%20learning/커널 서포트 벡터 머신

class_weight 매개변수

- 클래스 잘못 분류했을 때 패널티 증가 : 클래스 불균형 조정

model.predict_proba()

- probability=True 지정 >> 보정된 확률 확인 가능

model.support_vectors_

- 모델에 있는 서포트 벡터를 식별

model.support_

- 서포트 벡터의 인덱스를 확인

svc.decision_function() 속성

  • LinearSVC 클래스 사용 시 분류에 대한 신뢰도 확인

 

* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.

Comments