여기서 (y_{i})는 교육 예제의 각 레이블을 나타냅니다. 이러한 경우 SVM은 많은 교육 예제가 제대로 분류되도록 하는 동시에 두 클래스에서 초평면의 거리를 늘리려는 최적화 문제를 해결하여 최상의 초평면을 찾습니다. “예를 들어, 최근에는 스택 오버플로 프로그래머 토론 포럼에서 어떤 질문을 함께 연결할 수 있는지 찾기 위해 딥 러닝이 사용되었습니다. 이 딥 러닝 시스템을 실행하는 데 14시간이 걸렸습니다. 여기서는 SVM을 미세 조정하기 위해 DE라는 매우 간단한 최적화 를 적용하면 비슷한 (때로는 더 나은) 결과를 얻을 수 있음을 보여줍니다. DE 접근 방식은 10분 만에 종료되었습니다. 즉, 딥 러닝 방법보다 84배 빠른 시간입니다.” 이 절충은 C라는 매개 변수에 의해 제어됩니다. C 값이 작으면 큰 여백 하이퍼플레인이 선택되어 더 많은 수의 오분류가 발생합니다. 반대로 C가 크면 더 많은 예제를 올바르게 분류하려고 하는 작은 여백 하이퍼플레인이 선택됩니다. 그림 3은 이 절충을 그래픽으로 묘사합니다. 여기서는 지원 벡터에 대한 정보를 얻기 위해 몇 가지 방법을 사용합니다.

이 메서드 cv::ml::SVM:getSupportVectors는 모든 지원 벡터를 가져옵니다. 여기에서 이 방법을 사용하여 지원 벡터인 학습 예제를 찾아 강조 표시했습니다. 나는 당신이 OpenCV 웹 사이트에서이 기사를 읽는 것이 좋습니다 : 이미지를로드 / 표시하는 방법을 배울 https://docs.opencv.org/3.1.0/db/deb/tutorial_display_image.html,이 예에서는 우리는 하이퍼 플레인 대신 카르테시안 평면의 선과 포인트를 처리하고 고차원 공간의 벡터입니다. 이것은 문제의 단순화입니다. 우리의 직관은 상상하기 쉬운 예제에서 더 잘 구축되어 있기 때문에이 작업을 수행하는 것이 중요합니다. 그러나 동일한 개념은 차원이 2보다 높은 공간에 분류하는 예제가 있는 작업에도 적용됩니다. 지금, 당신은 내가 선택한 장난감 예가 너무 쉽고 실제 데이터가 시들고 거의 그렇게 깔끔하게 하이퍼 플레인을 사용하여 분리 할 수 있다고 생각 할 수 있습니다. 이 자습서에서는 교육 예제가 선형분리가능한 두 클래스로 분산되는 가장 간단한 경우에 SVM 이론을 소개했습니다. 그러나 SVM은 다양한 문제(예: 선형 분리 가능한 데이터 문제, 커널 함수를 사용하여 예제의 치수를 높이는 SVM 등)에서 사용될 수 있습니다. 결과적으로 SVM을 교육하기 전에 몇 가지 매개 변수를 정의해야 합니다.

이러한 매개 변수는 클래스 cv::ml:SVM의 개체에 저장됩니다. 이러한 경우 기존 데이터에 새 차원을 추가하는 커널 트릭을 사용하며 운이 좋으면 새 공간에서 데이터를 선형으로 분리할 수 있습니다. 예제를 사용하여 커널 트릭을 살펴보겠습니다. 지원 벡터 머신(SVM)은 분리 하이퍼플레인에 의해 공식적으로 정의된 차별적 분류자입니다. 즉, 레이블이 지정된 학습 데이터(감독 학습)가 주어지면 알고리즘은 새로운 예제를 분류하는 최적의 하이퍼플레인을 출력합니다. 그런 다음 SVM 알고리즘의 동작은 학습 예제에 가장 큰 최소 거리를 제공하는 초평면을 찾는 것을 기반으로 합니다. 두 번, 이 거리는 SVM의 이론 내에서 여백의 중요한 이름을 받습니다.