2013-08-21 39 views
0

我有一個惱人的事實問題。我使用SVM與MATLAB和我'能夠使用預測:Matlab libsvm svmpredict準確性詳細

predicted_label = svmpredict(Ylabel, Xlabel, model); 

,但它發生,每次我做一個預測時會出現這樣的:

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

,我覺得很煩,因爲我重複此過程很多次,並且由於其顯示在屏幕中而使其變慢。

我想我想要的是避免svmpredict冗長。

任何人都可以幫助我嗎?提前致謝。

-Jessica

回答

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-製作項目

+0

除了這些建議,您可以看看http://stackoverflow.com/questions/3029636/suppressing-a-functions-command-window - 輸出 –

7

我發現比編輯c庫的源代碼更好的方法是使用matlabs evalc,它將任何輸出放置到第一個輸出參數。

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

因爲要評估的字符串是固定的,所以應該沒有性能下降。

+0

我發現這是最簡單和最直接的解決方案 – user2208604

+0

不幸的是,這似乎是實現這一目標的唯一方法(不需要重新編譯源代碼)。 – zelanix

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) 
+0

這實際上是實現它的最好方式,不涉及重新編譯事情。 – powder

+1

不幸的是,安靜模式仍然有一些輸出。不是沒有輸出。如果您正在執行基於網格的超參數搜索,則您的命令行仍可能被淹沒。 – Philliproso

+0

這個問題並不是真正的答案,因爲它仍然輸出OP正試圖隱藏的「Accuracy = ...」信息。 – zelanix