如何在libsvm中禁用控制台输出(java)

时间:2014-06-23 16:37:31

标签: java machine-learning classification svm libsvm

我在 java 中使用了libsvm,遇到了与python所描述的here类似的问题。

我在训练和预测期间获得了很多控制台输出,并希望禁用它。遗憾的是,由于“Service Temporary Unavaiable”,我无法访问可能描述的网站(here)。我找不到与java相关的方法来禁用此警告(如果我确实监督了我道歉的事情)

输出总是看起来非常相似:

  

优化完成,#iter = 10000000   nu = 0.013178458659415372   obj = -11.005078334927212,rho = -2.1799731001804696   nSV = 20,nBSV = 5   总nSV = 20

你知道如何在java中禁用这种输出吗?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:3)

要以编程方式禁用输出,您需要执行以下操作:

svm.svm_set_print_string_function(new libsvm.svm_print_interface(){
    @Override public void print(String s) {} // Disables svm output
});

答案 1 :(得分:1)

在命令行中只使用-q选项。

$ ./svm-train 
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)
   *** lots of stuff cut out...
-q : quiet mode (no outputs)

如果您有自己的java培训师,请为您设置print_func svm_print_null。 (我认为唯一的方法是使用svm_train类将“-q”和其他参数一起传递给main方法)。

希望有所帮助

答案 2 :(得分:0)

要在终端中禁用Java的libsvm输出我使用:

import java.io.PrintStream;
import java.io.OutputStream;
System.setOut(new PrintStream(new OutputStream() {
      @Override public void write(int b) throws IOException {}
    }));

请记住,终端的输出已禁用,但可以使用记录器代替输出:

import org.apache.log4j.Logger;
private static final Logger LOG = Logger.getLogger(YourClass.class);

将log4j.properties文件放在资源文件夹中。

log4j.properties文件可能如下所示:

#info,debug, error,fatal ...
log4j.rootLogger=debug,stdout

#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n