본문 바로가기
Computer Science/머신러닝

SVM - Support Vector Machine

by sy.cho__ 2017. 11. 1.

머신러닝의 갈래는 아래와 같이 나뉠수 있습니다.


예측모델과 군집모델도 더 자세하게 분류할 수 있지만, 이 글에서 설명할 것은 SVM이기 때문에 분류모델만 자세히 적었습니다.

머신러닝 전체적 분야에 대한 설명은 다음에 정리해서 포스팅하겠습니다.


위 그림과 같이 SVM은 분류모델 중 하나입니다.

분류모델은 쉽게 말해 기존의 데이터를 특징 별로 분류하는 것을 나타냅니다. 예를 들어 A,B,C 특징을 가지고 있는 데이터는 Group1 ,

D,E,F 특징을 가지고 있는 데이터를 Group2라고 분류할 수 있을것입니다.

이 때 새로운 데이터가 들어오면 Group1에 속하는지 Group2에 속하는지 판단할 수 있을 것이고 데이터의 특징을 보다 쉽게 파악할 수 있을 것입니다. 


다시 말해 데이터를 어떻게 , 잘 분류할 것인가! 이게 핵심입니다.

그리고 분류하는 방법 중 하나가 SVM이라고 말할 수 있습니다. 이해가 가시나요?

이제 SVM이 언제 쓰이는지에 대해 말씀드렸고 윈리에 대해 자세히 알아보겠습니다.


선형분류(Linear SVM)


설명을 쉽게 하기 위해 아래와 같이 데이터가 분포(2차원 평면에) 되어있다고 가정하겠습니다.



동그라미로 표현된 데이터와 네모로 표현된 데이터가 있습니다. 이 두 집단을 나누기 위해 제일 좋은 선분은 어떤것일 까요??

당연히 2번이 제일 좋은 선분이라고 다들 짐작하실 수 있을 것입니다. 

이렇듯 두 집단을 구분하는 선분, 이것을 Hyperplane(초평면) 이라고 부르는데, 이 선분 중 가장 좋은 선분을 선택하는 것이 중요합니다.

이 가장 좋은 선분을 MMH(Maximum Marginal Hyperplane)이라고 합니다.

그럼 어떻게 가장 좋은  MMH를 구할 수 있을까요??


초평면은 다음과 같은 식으로 나타낼 수 있습니다.

(위 식이 이해되지 않는다면 기본적 Neural Network와 Perceptron에 대해 검색해보시길 바랍니다)


X는 객체를 나타내며 W는 개체 X에 대한 가중치를 나타냅니다. 

W와 X 사이의 점은 어떠한 하나의 연산이 되며, b는 bias로 절편을 뜻하고, y축과 맞닿는 값이 될 것입니다.


다음으로 초평면의 양쪽 바깥쪽에 있는 선, Edge hyperplane(엣지 초평면)이라고 불리며 다음과 같이 나타냅니다.



이를 다시 그림으로 표현하면 아래와 같습니다.




위 그림을 확인해보면 엣지 초평면에 걸쳐 있는 두 개의 개체가 있습니다 ( 빨간색 테두리로 표현된 객체입니다)

이 두 개체를 Support Vector라고 말합니다.

그리고 두 엣지 초평면 사이의 거리를 Margin 이라고 합니다.


정리해서, Margin를 최대로 하는 Support vector를 찾아 엣지 초평면을 형성하고 W*X+B = 0 을 만족하는 MMH를 찾는 것이 SVM의 원리이자 핵심입니다.


그리고 새로운 데이터가 들어왔을 때, 

W*X + b > 0

W*x + b < 0

어느 부분에 속하는지에 따라 어떤 분류에 속할지 정할 수 있게 되며 만약 속할 수 없다면

W와 b를 다시 계산하여 초평면을 갱신할 것입니다.



비선형 분류(Nonlinear , Kernel SVM)


XOR 문제와 같이 선형으로 분류가 안되는 문제는 위에서 설명한 SVM으로 풀 수 없습니다. SVM역시 하나의 hyperplane로 데이터를 구분하기 때문입니다. 

이를 해결하기 위해 SVM에서는 차원을 늘려서 문제를 풀 수 있습니다. 아래 그림을 통해 설명하겠습니다.


출처 - http://www.whydsp.org/237


2차원 공간의 데이터를 오른쪽 그림과 같이 3차원으로 표현했고 hyperplaned을 평면으로 표현했습니다.

이 때 사용한 함수를 맵핑함수라고 합니다. 직선이 아닌 평면으로 데이터를 분류한 것입니다. 


그러나, 이렇게 공간상의 맵핑을 하지 않고도 비슷한 효과를 낼 수 있는 방법이 있는이 그것을 kernel trick이라고 합니다.

Kernel trick는 데이터를 고차원 특징의 공간으로 사상하는 작업을 해줍니다.

kernel 함수를 통과시켜 위 그림과 같은 효과를 얻을 수 있습니다.


kernel 함수는 여러개가 있지만, 아래 몇가지 예시를 보여드리겠습니다.


출처 - https://en.wikipedia.org/wiki/Support_vector_machine


Kernel trick을 사용한 예제는 아래와 같이 나타낼 수 있습니다.


Kernel trick 출처 - https://en.wikipedia.org/wiki/Support_vector_machine



다음 글에서는 SVM을 실습해보는 내용을 포스팅하겠습니다. 

혹시 내용이 이해안되거나 잘못된 부분이 있으면 댓글 달아주시면 너무 감사드립니다!


본 글은 아래 블로그와 책을 참고하여 작성하였습니다.

http://www.whydsp.org/237

http://excelsior-cjh.tistory.com/entry/Support-Vector-Machine-SVM-%EC%84%9C%ED%8F%AC%ED%8A%B8-%EB%B2%A1%ED%84%B0-%EB%A8%B8%EC%8B%A0-1

http://eehoeskrap.tistory.com/45

책 : 알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문 - 위키북스, 김의중 지음

반응형

'Computer Science > 머신러닝' 카테고리의 다른 글

[HMM] Forward algorithm  (0) 2017.11.11
[머신러닝] HMM - Hidden Markov Model(1)  (0) 2017.11.11