我已經在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