SVM
hyperplane(초평면) : 유한차원 공간에서 원 차원으로 부터 한 차원 낮은 부분공간을 의미합니다. 예를들면 3차원 공간 속 평면 공간을 의미합니다.부분 벡터 공간 $N \subset V$ 에서 N을 V의 벡터 초평면(hyperplane)이라고 합니다.
서포트벡터머신(svm)은 기계학습 분야의 하나로 대표적인 지도학습의 분야 중 하나 입니다. 주로 분류(classification)과 회귀분석에 사용됩니다.
장점;
- 고차원 공간에서 효율적
- 샘플 수보다 큰 차원에서 효율적
- 결정함수(decision function, support vector)내에서 훈련 데이터들의 부분들을 이용(memory effect)
- 결정함수를 특정하기 위해 다른 커널 함수(kernel functions)들을 사용할 수 있습니다. 일반적인 커널 함수가 제공하되지만 사용자가 생성할 수 있습니다.
단점;
- 샘플의 수 > 변수의 수 --> 특정한 커널 함수를 선택하는 것으로 과적합을 피하여야 합니다. 그리고 데이터들의 정규화가 중요합니다.
- SVMs은 직접적으로 확률적 추정을 제공하지 않기 때문에 expensive five-fold cross-validation을 이용하여 계산합니다.
scikit-learn내에 svm은 입력 데이터로 dense와 sparse sample vectors 형식을 지원합니다.
dense : numpy.ndarray 와 numpy.asarray에 의해 이 형식으로 변환할 수 있습니다.
sparse : scipy.sparse
분류
선형적으로 분리할 수 있는 데이터는 데이터의 원소들을 구별할 수 있는 무한히 많은 결정경계를 만들수 있습니다. 그러나 직관적의 어떠한 경계는 다른 것들보다 좀 더 명확한 경계선을 보일 것입니다.이 질문의 답은 maximum margin hyperplane을 찾는 것과 관련있습니다. 즉, 두 클래스 간으 가장 명확한 분리선을 찾는 것입니다. 비록 위의 3선이 사각형과 원을 명확히 구별하지만 새로운 점들이 첨가된다면 가장 명확한 구분선을 보일 가능성을 가진 선 즉, 위의 구분을 일반화 할수 있는 선을 찾아야 합니다.
support vector는 각 클래스에서 MMH에 가장 가까운 점들 입니다. 각 클래스에서 최소 하나 이상의 서포트 벡터를 가져야 합니다. 이 서포트 벡터들을 사용하여 MMH를 정의하는 것은 가능합니다. 이것이 SVM의 핵심입니다. 이 서포트 벡터는 변수(feature)의 수가 매우 많을 경우라 할 지라도 분류 모형을 저장하기위한 매우 압축적인 방법을 제공합니다.
서포트 벡터를 인지하기 위한 알고리즘은 벡터들의 기하학에 의존하며 꽤 복잡한 수학과 관련됩니다.
클래스들이 선형적으로 분리될 수 있다는 가정하에 최대 마진을 발견하기 위한 방법을 이해하는 것은 어렵지 않습니다.
초평면의 인식
다음의 경우는 어떨까요? 초평면 a, b, c 모두 붉은부분과 파란 부분을 완벽하게 구분합니다. 이 세 초평면 중에 올바른 부분을 선택하기 위해 각 부분에서 초평면으로 부터 가장 가까운 원소(support vector)와 초평면 까지의 거리를 margin(마진)이라고 하며 아래 그림에서 검은색, 주황색 선으로 표시하였습니다.
위 그림으로 부터 초평면 b를 기준으로 support vector와의 가장 긴 마진을 가집니다. 즉, 각 support vector로 부터 긴 거리의 평면으로 결정하는 것이 두 부분의 잘못된 분류를 최소시킬 수 있습니다.
다음 그림은 초평면 A와 비교하여 초평면 B에서 긴 마진을 가집니다. 그러나 이 경우는 파란색 부분이 붉은 색 부분으로 분류되는 에러를 발생합니다. 그러므로 초평면 A를 선택합니다.
다음은 파란 부분 하나가 빨간 부분 내에 포함되어 있기 때문에 직선으로 이 두 부분을 완벽하게 구분할 수 없습니다. 이런 경우 빨간 부분내에 있는 파란것은 이상치(outlier)로 고려됩니다.
다음의 경우 역시 직선으로 두 부분을 구분할 수 없습니다. 이 부분을 선형으로 구별하기 위해서는 좌표에 조정 즉, 대수적 변환에 의해 이루어 질 수도 있습니다. 예를들어 z=x^2+y^2와 같이 변환하여 분류가 가능한지를 확인해야 합니다.
이러한 변환을 수동으로 찾는 것은 어렵습니다. SVM에서는 kernel function(커널 함수)의 도움으로 이러한 작업을 실행합니다. 이 함수들은 각 그룹의 분류를 위해 저차원의 입력공간을 보다 높은 차원으로 변형시킵니다.
댓글
댓글 쓰기