代码之家  ›  专栏  ›  技术社区  ›  Ali Rokni

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

  •  2
  • Ali Rokni  · 技术社区  · 9 年前

    我在Weka 3.6上使用LibSVM库,遇到了类似的问题 here (适用于Java)和 here (对于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日志?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    8 年前

    用于Weka的LibSVM库,FQN为“Weka.classiders.functions.LibSVM”,是一个围绕svm算法的包装器,为使用Weka API的Java程序员创建一个通用接口。

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

    知道后,我按照指示 here 并将“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时没有烦人的日志。