0

我有一个令人讨厌的事实的问题。我将 libsvm 与 matlab 一起使用,并且能够预测使用:

predicted_label = svmpredict(Ylabel, Xlabel, model);

但碰巧每次我做出预测时都会出现这样的情况:

Accuracy = X% (y/n) (classification)

我觉得这很烦人,因为我重复这个过程很多次,而且因为它显示在屏幕上而使它变慢。

我想我想要的是避免 svmpredict 过于冗长。

谁能帮我这个?提前致谢。

-杰西卡

4

3 回答 3

7

我发现比编辑 c 库的源代码更好的方法是使用 matlabs evalc,它将任何输出放置到第一个输出参数。

[~ predicted_label] = evalc('svmpredict(Ylabel, Xlabel, model)');

因为要评估的字符串是固定的,应该不会降低性能。

于 2013-08-21T10:06:48.220 回答
6
svmpredict(Ylabel, Xlabel, model, '-q');

从手册:

Usage: [predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')
       [predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')
Parameters:
  model: SVM model structure from svmtrain.
  libsvm_options:
    -b probability_estimates: whether to predict probability estimates, 0 or 1 (default 0); one-class SVM not supported yet
    -q : quiet mode (no outputs)
于 2013-11-18T21:49:15.277 回答
2

如果您使用的是 matlab,只需找到显示此信息的代码行(通常使用'disp''sprintf''fprintf')并使用注释运算符%将其注释掉。

例子:

disp(['Accuracy= ' num2str(x)]);

将其更改为:

% disp(['Accuracy= ' num2str(x)]);

如果您使用的是主 libsvm 库,那么您需要在制作之前对其进行修改。1-打开文件'svmpredict.c'

2-找到这行代码:

info("Accuracy = %g%% (%d/%d) (classification)\n",
(double)correct/total*100,correct,total);

3- 只需使用//运算符将其注释掉

4-保存并关闭文件

5-制作项目

于 2013-08-21T07:43:05.933 回答