为了账号安全,请及时绑定邮箱和手机立即绑定

Libsvm和Python:预先计算的内核是否将我的点ID用作常规功能?

Libsvm和Python:预先计算的内核是否将我的点ID用作常规功能?

holdtom 2021-03-28 10:41:03
我对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”。

纠正此起始索引后,分类器似乎可以正常工作。


查看完整回答
反对 回复 2021-04-06
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信