我在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。