SVM::trainAuto() 함수는 다양한 파라미터 값을 이용하여 여러 번 학습과 검증을 반복한 후, 최적의 파라미터를 이용하여 학습을 완료합니다. 훈련 데이터를 kFold개의 부분 집합으로 분할하고, 이 중 (kFold - 1)개의 부분 집합으로 학습하고 나머지 한 개의 부분 집합으로 성능을 검증하는 k-폴드 교차 검증을 수행합니다. 각각의 파라미터가 가질 수 있는 값의 범위는 Cgrid, gammaGrid, pGrid, nuGrid, coeffGrid, degreeGrid 인자로 지정할 수 있으며, 이들 인자의 타입 ParamGird 클래스는 파라미터 값이 가질 수 있는 최솟값, 최댓값, 증가 단계 등을 표현하는 역할을 합니다. 결국 다양한 파라미터를 이용하여 많은 검증을 수행하고, 그중 가장 성능이 좋게 나타나는 파라미터를 찾는 방식이기 때문에 SVM::trainAuto() 함수 실행 시간은 꽤 오래 걸리는 편입니다.
SVM 학습이 완료되었으면 이제 테스트 데이터에 대한 예측을 수행할 수 있습니다. SVM 알고리즘에 의한 예측은 StatModel::predict() 함수를 사용합니다.
Note
SVM 클래스를 사용할 경우, 최적의 파라미터를 찾기 위해 SVM::trainAuto() 함수를 사용하는 것이 편리합니다. 그러나 SVM::trainAuto() 함수는 매우 느리게 동작하기 때문에 한 번 학습이 완료된 후 선택된 파라미터를 저장했다가 재사용하는 것이 좋습니다. 즉, SVM::getXXX() 함수를 이용하여 사용된 파라미터를 알아낸 후, 다음 번 학습 시에는 SVM::setXXX() 함수를 이용하여 파라미터를 직접 지정하는 방식입니다. 이러한 방식은 훈련 데이터가 크게 바뀌지 않으면 충분히 잘 동작합니다.
만약 훈련 데이터가 고정되어 있고 이미 SVM::trainAuto() 함수로 학습이 완료되었다면 StatModel::save() 함수를 이용하여 SVM 학습 결과를 파일 형태로 저장할 수 있습니다. 그리고 저장된 파일은 다시 SVM::load() 함수를 이용하여 불러올 수 있습니다. StatModel::save()와 SVM::load() 함수 사용법은 OpenCV 문서 사이트를 참고하기 바랍니다.