오답노트

[ML] SVM (Support Vector Machine) 본문

Python/ML

[ML] SVM (Support Vector Machine)

권멋져 2022. 8. 24. 18:08

SVM

 

(출처 : https://towardsdatascience.com/breaking-down-the-support-vector-machine-svm-algorithm-d2c030d58d42)

 

데이터를 두 개로 분류하여 분류한 데이터 사이에 선을 긋고, 분류된 데이터와 선 사이에 여백을 만드는 것으로 설명할 수 있다.

 

데이터를 벡터(Vector), 분류된 벡터 사이에 선을 결정경계(Decision Boundary or Hyper plane)라고 하고, 분류된 벡터와 선 사이에 여백을 마진이라고 한다.

마진을 고려했을 때, 결정경계와 가장 가까운 벡터를 서포트 벡터(Support Vector)라고 한다.

 

마진을 넓게 해서 벡터가 조금 넘어가더라도 안정적으로 분류하는 것이 더 좋다고 할 수 있다.

하지만 마진을 넓게할 수록 오류에 대한 허용도 높아진다.

 

이러한 마진과 오류의 관계를 조절하는 것은 비용을 통해 할 수 있다.

 

비용 (C)

비용은 오류에 대한 허용 정도이고, 오류를 허용하지 않으려는 비용이라고 생각하면 된다.

즉 비용이 올라갈 수록 오류를 허용하지 않고(마진이 좁아지고), 비용이 낮아질 수록 오류를 허용하게(마진이 넓어지게)된다. (돈과 서비스의 관계를 생각하면 이해하기 편하다.. 비싼 값을 한다는..)

 

비선형 데이터 SVM

위 방법은 선형데이터 일 때는 직선으로 나눌수 있지만, 비선형 데이터의 경우는 직선으로는 나눌 수 없다.

비선형 데이터를 선형으로 처리하게 되면 오차가 너무 커지게 된다.

 

그래서 매핑함수를 통해 데이터의 차원을 늘리기도 한다. 하지만 매핑함수는 변수가 과도하게 증가하여 연산 시간이 엄청나게 길어지게 된다.

커널 트릭

커널 트릭은 매핑함수처럼 데이터의 차원을 실제로 늘리는 것이 아닌, 추가한 것 같은 효과를 얻도록 하는 것이다.

아래는 커널트릭 방식들이다. (나중에 각각 포스팅 예정...)

  • poly
  • rdf
  • sigmoid

이 때 gamma 값으로 결정경계의 복잡도를 설정할 수 있는데 복잡도가 높을 수록 곡률의 반경이 작아진고 모델은 복잡해진다.