2013-05-16 207 views
1

我想在Visual Studio 2010中使用LIBSVM只是为了我的测试样品,仅此而已..在Visual Studio 2010中

我已经用它的官方网站提供的资料与LIBSVM工作分类使用SVM ...

所以我用这些步骤依次

1)。 svm-scale -l 0 -s range train.txt> train.scale

2)。 svm-scale -r range test.txt> test.scale

3)。 grid.py -svm-train“MYSVM_TRAIN_PATH”-gnuplot“MY_GNUPLOT_PATH”train.scale

4)。 svm-train -c 32 -g 0.05 -b 1 train.scale train.model

5)。 SVM-预测test.scale train.model test.out

,它工作得很好,但问题是,我不知道该怎么做在Visual Studio中这些步骤...我只是装我train.model从上面(步骤4),并没有重复VS10训练过程....这里是我的代码:

void main(){ 
    svm_model *Model; 
    Model = svm_load_model("train.model");//loaded from svm-train (step4 above) 
svm_node x[feature_size]; 
    (Some internal Process for obtaining new feature vector for testing) 
    double result = svm_predict(Model,x); 
    std::cout<<"result is"<<result<<std::endl; 
    return 0} 

,但是这不会导致如Python代码,在蟒蛇我我的测试数据的精度为98%,但在这里不到20%!这在某种程度上aweful ...

我也用OpenCV进行训练我的数据和测试我的示例(使用ml.h) 但在OpenCV中,我得到了70%的准确率。而且我的实际结果还是减少了20%以上!

我认为这个问题是在缩放..因为在这两种svm.h和OpenCV我没有找到我的缩放火车和测试数据的任何功能.....

回答

0

你的命令的用法线工具看起来不错。如果您不像培训数据那样调整测试数据,那么预测就会失败,就像您发现的那样。

只需从http://www.csie.ntu.edu.tw/~cjlin/libsvm/获取libsvm的源代码,并将svm-scale.c中的缩放还原逻辑合并到您的代码中。 要查看缩放外观和数据读取,搜索:

if(restore_filename) 

的实际比例是在一个名为输出功能()完成。显然,直接返回值而不是打印结果。

顺便说一句在opencv中的libsvm版本是相当老的(所以我避免它)。

+0

你确定吗? (我的意思是我的问题在于“不缩放”我的测试特征矢量? – PsP

+0

如果您缩放了训练数据并且没有对测试数据应用相同的缩放比例,那么这肯定是一个问题,您可以使用'svm-在命令行上预测test.model test.out'(而不是'test.scale')。当然,你的VS代码中可能还有其他问题。你是否使用了与你在命令中使用的测试数据相同的测试数据行(也许打印出来一些它来检查它确实是一样的)? – Bull

+0

我并不那么粗心;),我很确定这些初步步骤......但是,非常感谢,你帮了我很多,至少我知道从哪里开始以及接下来要做什么...... – PsP