1

我想在 Visual Studio 2010 中使用 libsvm 只是为了对我的测试样本进行分类,仅此而已..

我使用 libsvm 使用其官方网站提供的文档...

所以我按顺序使用了这些步骤

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-predict 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 代码,在 python 中,我的测试数据获得了 98% 的精度,但在这里它不到 20% !!!这有点可怕......

我还使用 OPENCV 来训练我的数据和测试我的样本(使用 ml.h),但在 OPENCV 中,我得到了 70% 的准确率。它仍然比我的实际结果减少了 20% 以上!!!!

我认为问题在于缩放..因为在 svm.h 和 OPENCV 中我都没有找到任何用于缩放我的训练和测试数据的函数.....

4

1 回答 1

0

您对命令行工具的使用看起来没问题。如果您不以与训练数据相同的方式扩展测试数据,那么 predict 将失败,正如您所发现的那样。

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

    if(restore_filename)

实际的缩放是在一个名为 output() 的函数中完成的。返回一个值而不是打印结果显然是直接的。

顺便说一句,opencv 中的 libsvm 版本相当旧(所以我避免使用它)。

于 2013-05-16T14:45:07.580 回答