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

Posted

技术标签:

【中文标题】如何在 libsvm (java) 中禁用控制台输出【英文标题】:How to disable the console output in libsvm (java) 【发布时间】:2014-08-13 19:00:42 【问题描述】:

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

我在训练和预测期间收到大量控制台输出,我想禁用它。可悲的是,由于“服务暂时不可用”,我无法访问可能被描述的网站 (here)。我找不到与 java 相关的方法来禁用此警告(如果我确实监督了某些事情,我深表歉意)

输出总是与此非常相似:

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

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

非常感谢您的帮助。

【问题讨论】:

【参考方案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】:

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

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

【讨论】:

【参考方案3】:

要禁用 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

【讨论】:

以上是关于如何在 libsvm (java) 中禁用控制台输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中获取 LibSVM 分类器的权重?

如何在 Java 中使用 LibSVM?

java中使用LibSVM的一个例子

如何使用 LIBSVM 的 Android Java 包装器正确设置 LIBSVM.scale() 的参数

Libsvm java工程实践

如何在 Android 中设置 libsvm?