【发布时间】:2017-03-06 10:44:57
【问题描述】:
我已经在 WEKA (3.7.3) 中训练了 LIBSVM 模型,现在想在我的 java 代码中使用它。但是,我遇到了一个例外。
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 代码添加到原始问题中。
-
似乎
classifier是null,所以使用 SerializationHelper 加载它会出错。很难从远处说是什么原因。您能否检查文件“svm.model”是否存在以及它是否包含有效模型? -
@Sentry 你可能是对的。模型文件存在,但是当我尝试在 WEKA 中重新加载它时,只有特征,没有别的。似乎 WEKA 没有正确保存模型?我只是在这里更新了模型的内容。我认为这是 WEKA 方面的问题,而不是 java 或 android。
-
我试图回答
标签: java android svm weka libsvm