LibSVM预测不起作用

时间:2017-02-18 16:02:10

标签: python c++ opencv libsvm

我在libsvm的python实用程序中编写了我的classifer,到目前为止它已经运行得很好。以下是我如何调用Python API的示例:

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对象中加载一个向量。然而,预测的模型出错了。这里有问题吗?

1 个答案:

答案 0 :(得分:0)

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

在LibSVM中,索引从1开始。谁知道:(