我一直在一个Java项目中使用libSVM,在对一个相当大的数据集进行培训之后,使用api中的函数将模型保存到一个文件中。后来,我尝试加载文件来做一些预测,但是每次调用svm.svm_predict函数时,我都会得到一个svm.svm_predict。我可以验证代码是否适用于一个较小的模型文件,但是对于这个更大的集合,代码总是失败的。以下是完整的错误消息:
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(...)奇怪的是,我可以打印出概率并访问支持向量机的其他元素--该模型不为空;然而,每当我试图预测给定向量的结果时,它就会崩溃。有什么想法吗?
发布于 2016-12-05 18:17:10
测试数据必须包含向量中每个部分的数据。也就是说,如果最大的训练样本与向量有105个部分,那么每个测试向量必须有105个部分。即使您只拥有给定测试向量的15个部分,您也需要用其他90个元素填充它。如果不分配适当大小的数组,libSVM将尝试访问给定用于预测的测试数据数组之外的元素。
https://stackoverflow.com/questions/40980154
复制相似问题