본문 바로가기

ML & AI/supervised

[알고리즘] SVM(Support Vector Machine)

경계로 공간을 나누기 위한 방법을 제공하는 SVM은 분류에 적합한 머신러닝 지도학습 모델이다. SVM은 서포트벡터를 이용하여 결정경계를 정의하고 데이터를 분류하는 학습방법으로 어떻게 결정경계를 설정하는지가 가장 중요한 성능 결정사항이다.

 

용어정의
  • 결정경계(Desicion Boundary) : 분류를 위한 기준 선
  • Support Vectors : 결정경계와 가까이 있는 데이터들
  • Margin : 결정경계와 서포트벡터 사이의 거리
  • Hard Margine : 이상치(outlier)를 허용하지 않는 마진
  • Soft Margin : 이상치(outlier)를 허용하는 마진
  • 파라메터 C : scikit-learn에서 SVM 모델의 이상치 허용 값 설정(C값이 클수록 hard margin)
  • 커널(Kernel) : 결정경계 정의 모형(linear, polynormial, RBF)
  • 초평면(Hyperlane) : 3차원 데이터-셋의 결정 경계
  • 가우시안커널(RBF, Radial Bias Function) : 방사기저함수
  • 파라메터 감마(gamma) : 결정경계를 얼마나 유연하게 할지(gamma 값이 크면 학습 데이터에 맞게 최대한 구불구분하게 경계를 나눔, 반대는 직선)
결정경계를 정의 시 고려사항

 

  • 이상치 조정을 통한 결정경계 정의

마진을 설정하는 방법은 Hard Margin과 Soft Margin이 있다. Hard Margin은 서포트벡터의 이상치를 허용하지 않고, Soft Margin은 이상치를 허용하여 결정경계를 정의한다. 모델의 성능 향상을 위해 Soft Margin을 설정하는 것이 이상적인데 이는 결정경계와 서포트벡터 간의 거리를 넓게하고, 이상치의 허용 범위를 늘리는 효과를 줄 수 있다. 즉 적당한 이상치 허용값을 적용하여 Overfitting과 Underfitting을 방지할 수 있다. (scikit-learn 에서는 Parameter-C 값을 조정하여 이상치를 핸들링할 수 있음) 

 

  • 차원에 따른 결정경계 정의

결정경계는 데이터-셋의 특징(차원)에 따라 모양이 다르다. 2차원의 데이터-셋은 단순한 직선 또는 곡선으로 데이터를 분류할 수도 있지만, 3차원의 데이터-셋은 초평면(Hyperplane)을 사용하여 데이터를 분류해야 한다. 차원에 따른 결정 경계를 정의하기 위해 SVM은 다양한 종류의 커널을 제공하고 있다.

Linear는 2차원 공간 분리를 위한 직선과 곡선을 제공하고, Polynormial은 2차원으로 분류하지 못하는 데이터를 3차원 공간으로 변환하여 초평면을 통해 데이터를 분류한다. 또한 가우시안 커널은 2차원의 데이터를 다차원의 데이터로 변환하고 결정경계 모양의 유연성을 제공한다.(scikit-learn에서는 Parameter-gamma 값을 통하여 조정) 

즉 데이터 특성에 따라 커널을 선택하여 2차원으로 분류할지, 3차원으로 분류할지 아니면 더 복잡한 결정경계를 설정할지를 선택하여 학습하면 된다.

 


SVM에 대하여 공부하면서 많은 참고자료를 보았지만, 복잡한 수식으로 설명한 자료들이 많았다. 그 중 이해하기 쉽게 그림과 scikit-learn을 예로 설명한 블로그(아무튼 워라벨)가 있어 내 블로그에 링크를 남긴다. 참고한 자료마다 SVM의 중요성과 실용성에 대해 칭찬 일색인데 아직 이해한 부분보다는 이해하지 못한 부분이 많은 것 같다. 조금 더 학습해서 직접 이해한 내용 계속 보완해야겠다. 지금 만들고 있는 Training Platform에서 직접 SVM을 돌려보고 그 결과도 정리할 예정이다.