Я делаю проект, основанный на opencv и SVM (поддержка векторных машин). Там, чтобы идентифицировать показанный пользователем жест, мне нужно сделать классификацию, используя SVM. Я добавил файлы svm.cpp и svm.h в свой проект, и ниже приведен мой код для части прогнозирования.
svm_node x[featureVectorSize];
// inside a loop
for(int k;0 < featureVectorSize; k++)
{
x[k].index = k+1;
x[k].value = FeatureVectorVal[k]; // i have a vector to store feature values for test data //(without scaling)
}
svm_model* newmodel = svm_load_model("Mymodels\\A.scale.model");
double *ProbVal = new double[1];
double result = svm_predict_probability(newmodel,x,ProbVal);
cout<<"result "<< result<<"\n";
cout<<"ProbVal "<< *ProbVal<<"\n";
svm_free_model_content(newmodel);
svm_free_and_destroy_model(&newmodel);
//some code to show output
Q1. когда я делаю классификацию с моделью A, она всегда дает совпадающее значение результата как -1. Это означает, что не совпадают с данными испытаний. После этого я жестко закодировал масштабированные значения объектов для тестовых данных (напишите выше FeatureVectorVal в текстовый файл и масштабируйте с помощью scale.exe, предоставляемого пакетом Libsvm). Затем я сделал прогноз с той же моделью. Теперь он дал мне результат как +1. Это означает, что мне нужно ввести масштабированные тестовые данные в структуру svm_node. Но в svm.cpp я не смог найти никакой функции для масштабирования моих тестовых данных. Как я могу масштабировать свои тестовые данные, используя функции svm.cpp?
Q2. Когда я делаю прогнозирование с более чем одной моделью (используя массив путей к файлам моделей), происходит сбой программы после прогнозирования с первой моделью и подсказывает мне;
if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && model->probA!=NULL && model->probB!=NULL)
строка в файле svm.cpp.
Нужна помощь, ребята .. Спасибо заранее 🙂
Задача ещё не решена.
Других решений пока нет …