我对libsvm和预计算内核的使用有一个奇怪的问题。我将数据以字典形式放置以遵循文档(与点ID关联的键0):from svmutil import *x=[]for i in range(N): x[i] = {0:i, 1:K(i,0), 2:K(i,1), ...} y[i] = true_labels(i))然后,我正在执行以下操作来训练svm并得到我的训练错误:svm_prob = svm_problem(y,x,isKernel=True)svm_param = svm_parameter('-t 4')svm_mod = libsvm.svm_train(svm_prob,svm_param)svm_pymod = toPyModel(svm_mod)# Estimating training errorp_labels, p_acc, p_val = svm_predict(y,x,svm_pymod)但是最终输出是完全不正确的,因为值p_val看起来像:p_val -> [0.xxx, -1.xxx, -2.xxx, -3.xxx, -4.xxx, ...](当然p_labels是[-1,-1,-1,...,])我的分析:我知道我的内核的值K(i,j)远低于1,所以我认为(0:i)libsvm在某个点(可能是在预测阶段)使用了伪功能作为正常功能(而不是点ID)。 。我尝试了几种变体,但无法解决此问题。
1 回答
慕森王
TA贡献1777条经验 获得超3个赞
实际上,该错误非常明显,但我保留了我的文章并在此处回答:点ID必须在1
而不是处开始0
。低级功能libsvm.svm_train
不会对此进行检查,并且会解决此不正确设置的问题。
在这种情况下,应该改用显示错误的svmutil
功能“ svm_train
”。
纠正此起始索引后,分类器似乎可以正常工作。
添加回答
举报
0/150
提交
取消