2017-02-18 20 views
1

Я закодировал свой classifer в утилите python libsvm, и до сих пор он работал довольно хорошо. Вот пример того, как я называю свой Python API:LibSVM Predict Не работает

print svmutil.svm_predict([2], [f.flatten().tolist()], libsvm_model, '-b 1') 

где f - вектор (1024,1).

Я сохранил модель и загрузил ее с использованием C++ API. Однако, когда я пытаюсь загрузить и предсказать один и тот же вектор, это дает мне неправильные результаты.

cv::Mat oneCol = fcMat.row(0); 
svm_node *x = (struct svm_node *) malloc(1025*sizeof(struct svm_node)); 
for(int i=0; i<1024; i++){ 
    x[i].index = i; 
    x[i].value = (double)oneCol.at<float>(i); 
} 
x[1024].index = -1; 


double *prob_estimates=NULL; 
prob_estimates = (double *) malloc(svmModel->nr_class*sizeof(double)); 

double retVal = svm_predict_probability(svmModel, x, prob_estimates); 
cout << retVal << endl; 

for(int j=0;j<svmModel->nr_class;j++) 
    cout << prob_estimates[j] << endl; 

Здесь я пытаюсь загрузить вектор из объекта OpenCV как таковой. Однако предсказанная модель ошибочна. Здесь что-то не так?

ответ

0
for(int i=0; i<1024; i++){ 
    x[i].index = i+1; 
    x[i].value = (double)oneCol.at<float>(i); 
} 

В LibSVM индексы начинаются с 1. Кто знал :(

 Смежные вопросы

  • Нет связанных вопросов^_^