공부일기/Machine-Learning

서포트 벡터 머신(Support vector machine)

pipiiiiii 2024. 7. 17. 11:54

서포트 벡터 머신이란

전통적인 이진 분류를 위한 기법 중 하나이다. 

'오류율을 최소화'하려는 목적 외에 두 부류 사이에 존재하는 '여백을 최대화'하려는 목적으로 설계되었다.  

패턴 인식, 자료 분석을 위한 지도 학습 모델 중 하나이며 주로 분류와 회귀 분석을 위해 사용한다. 

 

 

위의 그래프를 이용해 예를 들어 서포트 벡터 머신을 설명하고자 한다. 

그래프를 통해 짜장면인지 짬뽕인지 구분을 하려면 직선을 그어 국물의 양과 고춧가루의 양이 많으면 짬뽕, 아니면 짜장으로 구분할 수 있다. 

이 때, 두 부류사이의 여백이 가장 넓어지면(둘이 가장 떨어져있으면(여유 최대화)) 그 둘을 가장 잘 분류했다고 할 수 있다. 이를 분류하는 과정에서 위의 그래프로 그래프처럼 빨간 직선(선형모델)으로 그 둘을 구분할 수도 있고 때에 따라서는 곡선으로(비선형모델) 둘을 구분할 수 있다.  

 

 

서포트 벡터 머신의 목표

주어진 데이터 점들이 두 개의 클래스 안에 각각 속해있다고 가정했을 때, 새로운 데이터 점이 두 클래스 중 어느 곳에 속하는지 결정하는 것이 목표다. 

 

 

서포트 벡터 머신의 장단점

장점

  • 과적합을 피할 수 있다. 
  • 분류 성능이 괜찮다.
  • 저차원, 고차원 공간의 적은 데이터에서 일반화 능력이 우수하다.
  • 잡음에 강하다.
  • 데이터 특성이 적어도 성능이 좋다.

단점

  • 커널함수 선택이 명확하지 않다.
  • 파라미터 조절을 적절히 수행하여 최적의 모델을 찾아야한다. 
  • 계산량에 부담이 있다.
  • 데이터 특성의 스케일링에 민감하다.  

 

 

서포트 벡터 머신의 개념과 종류

개념

서포트 벡터 머신에는 최적의 경계를 찾는데 이 최적의 경계를 알아야 종류에 대해 더 잘 알 수 있다.

최적의 경계는 마진을 최대화할 수 있는 경계를 말한다.

여기서 마진은 클래스들 사이의 간격, 각 클래스의 말단에 위치한 데이터들 사이의 거리를 말한다.  

위그림에서는 점선 위에 있는 두 개의 데이터가 support vector다. 이를 support vector라고 하는 이유는 이 데이터들의 위치에 따라서 경계(초평면)의 위치가 달라지기 때문에 초평면 함수를 지지한다는 의미에서 명명되었다. 

 

그렇다면 초평면은 무엇일까?

SVM의 정의인 N차원을 공간 (N-1)차원으로 나눌 수 있는 초평면을 찾는다는 말을 해석해보면 알 수 있다.

마진에 대한 설명을 한 그래프는 2차원 공간이다. 만약 데이터가 3차원이라면 2차원 공간으로 나눈다는 것을 일반화하여 N, (N-1)차원으로 표현된다. 그리고 초평면은 2차원이 아닌 고차원에서도 분류할 수 있는 경계를 말한다.   

초평면에 대한 이해를 돕기 위한 그림은 아래와 같다. 

 

 

종류

  • 선형 분리 
    • 하드 마진
      두 클래스를 분류할 수 있는 최대마진의 초평면을 찾는 방법이다.
      단, 모든 훈련 데이터는 마진의 바깥쪽에 위치하게 선형으로 구분해야한다. 다시말해서 하나의 오차도 허용하면 안된다는 것을 의미한다. 


      위 그래프를 통해 하드 마진에 대해 설명하자면 W는 가중치고 b는 bias(편견)를 의미한다. 
      하드 마진에서는 2 / ||w|| 값을 최대로 하는 것이 목표인데, 분류를 진행할 때는 판별식에 테스트 데이터가 들어가 '0'을 기준으로 분류를 진행하게 된다. 

      하지만 모든 데이터를 선형으로 오차없이 나눌 수 있는 결정 경계를 찾는 것은 사실상 어렵기 때문에 나온 개념이 소프트 마진이다. 

    • 소프트 마진
      하드 마진이 가진 한계를 개선하고자 나온 개념이다.
      완벽하게 분류하는 초평면을 찾는 것이아니라 어느 정도의 오분류를 허용하는 방식이다. 
      소프트 마진에서는 오분류를 허용하고 이를 고려하기 위해 slack variable(여유 변수)을 사용한다. 
      slack variable은 해당 결정 경계로부터 잘못 분류된 데이터의 거리를 측정하기 위해 사용한다. 


      위 그래프를 설명하면 아래와 같다. 
      - e = 0 올바른 분류인 경우
      - 0 < e < 1 올바른 분류지만 slack variable보다 초평면에 가까운 경우
      - e > 1 잘못 분류된 경우 

      그래프와 설명을 함께 보면 slack variable의 크기만큼 초평면 위, 아래로 오차를 허용하는 것을 볼 수 있다.  
    • 하드 마진과 소프트 마진 추가 설명

      위 수식은 왼쪽은 하드 마진, 오른쪽은 소프트 마진을 의미한다. 
      소프트 마진의 수식은 하드 마진의 수식에서 C(cost)라는 파라미터를 통해 slack variable의 총 합에 한계를 줌으로써 조정할수 있다. 그래서 파라미터 C는 과적합을 제어하는 중요한 역할을 한다.  
      C가 커지면 학습 오류를 허용하지 않고 마진이 줄어들어 오류가 적지만 과적합의 위험이 생기고, C가 작아지면 마진이 크고 오류가 증가하며 과소적합의 위험성이 생길 수 있다. 
  • 비선형 분리 


    선형 분리가 불가능한 경우에 적용한다. 
    개념은 간단하다. 선형분리가 불가능한 입력 공간을 선형 분리가 가능한 고차원 특성공간으로 보내 선형 분리를 진행하고, 다시 기존의 입력공간으로 변환해 비선형 분리를 하는 것이다. 

    하지만 여기서 문제가 생기는데, 고차원의 특성 공간으로 변환하고 목적함수에 대한 문제를 푸는 것이 간단한 차원에서는 가능하지만 차수가 커질수록 계산량의 증가가 어마어마하다는 것이다. 
    이를 해결하기 위해 나오는 개념이 커널트릭이다. 

    커널트릭은 실제로는 데이터의 특성을 확장하지 않지만 마치 확장한 것처럼 만들어 계산하는 방식이다. 
    특성 공간의 차원이나 매핑관계를 명시적으로 알 필요 없이, 확장된 특성공간의 두 벡터의 내적만 계산하면 고차원의 복잡한 계산 없이 커널 함수를 사용하여 연산량을간단하게 해결할 수 있다.

    커널함수의 종류는 기본적으로 linear를 사용하고 그 외에는 가우시안 RBF, Polynomial, Sigmoinal이 있다. 
    종류 중 가장 성능이 좋고 많이 사용되는 것은 가우시안 RBF로 이 함수는 입력공간을 무한대의 특성 공간으로 보내는 방식이다. 반면 Polynomial은 사용자가 직접 차수를 정하는 방식이며 Sigmoinal은 tanh 함수를 적용하는데 주로 신경망 학습에서 사용한다. 

    가장 많이 사용되는 가우시안 RBF 함수에 대해 추가 설명을 하자면 이 함수는 기본 C만이 아닌 Gamma라는 파라미터를 가지게 된다. Gamma는 하나의 데이터의 영향력을 정하는 파라미터로 Gamma가 커질수록 결정 경계의 곡률이 커지며 과대적합이 되고 작아지면 결정경계의 곡률이 작아지지만 과소적합이 된다. 
    아래 그래프를 보면 좀 더 쉽게 이해할 수 있다.   

 

서포트 벡터 머신을 실제로 사용할 때는 커널함수와 소프트 마진을 같이 사용하는 경우가 많다. 

 

 

서포트 벡터 머신 코드 공부 

https://github.com/DIB-PP/Machine-Learning

 

GitHub - DIB-PP/Machine-Learning

Contribute to DIB-PP/Machine-Learning development by creating an account on GitHub.

github.com

 

 

 

참고 자료