我已经在WEKA(3.7.3)中训练过LIBSVM模型,现在想在我的java代码中使用它。但是,我收到一个例外。在我的java代码中使用WEKA SVM模型时出错(保存在WEKA中后为空SVM模型)
Exception:Attempt to invoke interface method 'double weka.classifiers.Classifier.classifyInstance(weka.core.Instance)' on a null object reference
所有其他模型在此java代码中正常工作。此外,WEKA jar版本与我用于训练模型的版本完全相同。我的应用程序中没有任何LIBSVM jar,因为我使用的是训练好的模型。我是否需要将LIBSVM jar放入我的应用程序中?
我在这里错过了什么?
inputStream = getApplicationContext().getAssets().open("svm.model");
classifier = (Classifier) weka.core.SerializationHelper.read(inputStream);
这是模型的内容:
=== Model information ===
Filename: svm.model
Scheme: weka.classifiers.functions.LibSVM -S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.001 -P 0.1 -model "D:\\Program Files (x86)\\Weka-3-7" -seed 1
Relation: Sho_gsw30SVRNULL-weka.filters.unsupervised.attribute.Remove-R5-13,18-26,31-39,44-130
Attributes: 17
F1
F2
F3
F4
F14
F15
F16
F17
F27
F28
F29
F30
F40
F41
F42
F43
class
=== Classifier model ===
LibSVM wrapper, original code by Yasser EL-Manzalawy (= WLSVM)
更新: 我试图WEKA SMO(支持向量机分类),它在我的代码工作正常,但不是LIBSVM一个。
向我们显示您调用'classifyInstance'的代码 – Sentry
@Sentry代码被添加到原始问题中。 – utengr
好像'classifier'是'null',所以使用SerializationHelper加载它出错了。很难从远处说出原因。你可以检查文件“svm.model”是否存在,是否包含有效的模型? – Sentry