svmtrain函数在matlab vs C版本中的执行时间



我使用libSVM, matlab中的svm函数需要的时间比C少,尽管C通常比matlab快得多。两个分类器采用相同的参数,并返回相同数量的支持向量机,迭代次数相同。

下面是两者的代码:Matlab:

t1=cputime; model = svmtrain(Labels,data, '-h 0 -s 0 -c 0.025 -n 0.01 -b 1 -t 0 -d 1 -p 0.001'); t2=cputime; fprintf('Elapsed time=%.3fn',t2-t1)

AND C代码:

    clock_t begin = clock();
    model = svm_train(&prob,&param);    
    clock_t end = clock();;
    double time_spent = (double)(end - begin) / double(CLOCKS_PER_SEC);

当您使用选项-b 1来获得概率时:

  • libsvm将使用Platt缩放来使用交叉验证获得这些概率
  • 交叉验证总是随机分割数据
  • 在C中,默认种子1将被使用
  • 也许 Matlab接口将使用基于时间(或任何其他)的种子
    • 作为第一步,我将把matlab的全局种子设置为1,并为C做同样的事情;然后再次测量

正如我在评论中指出的那样,做更多的测试是明智的。即使种子是不同的(一种可能性),许多许多次运行的平均值应该是相同的,因为使用相同的代码!

参见这个问题,其中列出了不同行为的其他一些可能性(你说你获得了相同数量的sv;但可能内部的行为是不同的)

最新更新