我使用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,¶m);
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;但可能内部的行为是不同的)