如何在java中禁用LibSVM weka库的日志



我在Weka 3.6上使用LibSVM库,遇到了与这里(Java)和这里(Python)类似的问题

libSVM 库生成了很多与此类似的日志

optimization finished, #iter = 399
nu = 0.9503376170384973
obj = -124.54791151883072, rho = 0.0528133707297996
nSV = 257, nBSV = 97

我通过在代码中设置此参数来遵循使用 -q 参数的解决方案:

LibSVM svm = new LibSVM();
String[] options = {"-q"};
svm.setOptions(options);

虽然这个解决方案似乎适用于 Python 但我不适用于我的 Java 代码。

另一种解决方案建议使用 Log4j 并禁用某种级别的日志,但是,我不想在我的代码中添加另一个库。

现在,我想知道是否有任何干净简单的解决方案来禁用libSVM日志?

带有 "weka.classifiers.functions.LibSVM" FQN 的 Weka 的 LibSVM 库是 svm 算法的包装器,用于为 Java 程序员使用 Weka API 创建通用接口。

在"LibSVM.jar"中,还有一个名为"libsvm.jar"的jar文件,这是主要算法。与使用常见Java命名约定的LibSVM相反,"libsvm.jar"中的命名约定是不同的。在"libsvm"包中,有一个名为"svm"的类。因为我使用"svm"作为我的变量名,所以"svm"类是不可见的。

知道这一点后,我按照这里的说明将"svm"更改为"libsvm.svm",这就是对我有用的代码。此外,我将此代码放在代码的静态块中,以便将其用于我的所有用法。

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

最后,我正在使用没有烦人的日志的 LibSVM。

最新更新