Java 加载模型时出现 libSVM NullPointerException

Java libSVM NullPointerException on loaded model

我一直在为一个 Java 项目使用 libSVM,在对相当大的数据集进行训练后,使用 api 中的函数将模型保存到一个文件中。后来,我尝试加载文件来做一些预测,但每次调用 svm.svm_predict 函数时,我都会收到 NullPointerException。我可以验证该代码是否适用于较小的模型文件,但对于这个较大的模型集却不断失败。这是完整的错误消息:

Exception in thread "main" java.lang.NullPointerException
    at libsvm.Kernel.dot(svm.java:213)
    at libsvm.Kernel.k_function(svm.java:232)
    at libsvm.svm.svm_predict_values(svm.java:2349)
    at libsvm.svm.svm_predict(svm.java:2406)
    at com.svm.SVM.predict(...)
    at com.svm.SVM.main(...)

奇怪的是我可以打印出概率并访问 SVM 的其他元素——模型不为空;但是,每当我尝试预测给定向量的结果时它都会崩溃。有什么想法吗?

测试数据必须包含向量中每个部分的数据。 IE。 - 如果最大的训练样本有 105 个部分到向量,那么每个测试向量必须有 105 个部分。即使您只有给定测试向量的 15 个部分,您也需要用其他 90 个元素填充它。如果您没有分配适当大小的数组,libSVM 会尝试访问要预测的测试数据数组之外的元素。