我在 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中禁用这种输出吗?
非常感谢你的帮助。
答案 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