Java和Python中的LibSVM给出了不同的输出。

2024-04-26 15:12:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用高级python脚本svmutil.py公司生成支持向量机模型。在

但实际上,我需要在Java中运行SVM。使用相同的数据集(3000个条目,18个特性和5个类)训练一个模型,可以得到不同数量的nsv。在

>>> from svmutil import *
>>> y,x = svm_read_problem('train.txt')
>>> m = svm_train(y[:3000],x[:3000], '-t 2 -s 0')
*
optimization finished, #iter = 67
nu = 0.105257
obj = -89.960869, rho = -0.027008
nSV = 128, nBSV = 126
***
[a couple of more iters here... ]
***
optimization finished, #iter = 19
nu = 0.016800
obj = -10.178571, rho = -0.078282
nSV = 22, nBSV = 19
Total nSV = 430

如您所见,NSV的总数是430。在

我的Java实现如下所示(我想我必须提到,我将在processing中运行它):

^{pr2}$

所以实际上,这个加工草图没有任何异常,但是我的输出是这样的:

^{3}$

所以基本上,对于相同的数据集,我得到了不同数量的nSV,正如您在处理草图的outout中看到的,预测函数表示nr 111的值在类3中,但实际上它在类0中。 (python程序说,使用这些测试和训练数据集,支持向量机可以达到97%的准确率)


Tags: 数据模型obj数量trainjava向量nu