【问题标题】:Matlab libsvm svmpredict accuracy verboseMatlab libsvm svmpredict 准确度详细
【发布时间】:2013-08-21 07:07:25
【问题描述】:

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

predicted_label = svmpredict(Ylabel, Xlabel, model);

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

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

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

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

谁能帮我解决这个问题?提前致谢。

-杰西卡

【问题讨论】:

    标签: matlab libsvm verbose


    【解决方案1】:

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

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

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

    【讨论】:

    • 我发现这是最简单直接的解决方案
    • 不幸的是,这似乎是实现这一目标的唯一方法(无需重新编译源代码)。
    【解决方案2】:
    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)
    

    【讨论】:

    • 不幸的是安静模式仍然有一些输出。不是没有输出。如果您正在执行基于网格的超参数搜索,您的命令行仍然会被淹没。
    • 不是这个问题的真正答案,因为这仍然会输出 OP 试图隐藏的 Accuracy = ... 消息。
    【解决方案3】:

    如果您使用的是 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- 制作项目

    【讨论】:

    猜你喜欢
    • 2012-04-13
    • 2012-04-19
    • 2012-12-17
    • 2012-02-15
    • 2016-04-04
    • 2014-02-23
    • 2014-02-19
    • 2011-11-01
    • 2011-04-10
    相关资源
    最近更新 更多