Libsvm Python错误

2 投票
2 回答
1061 浏览
提问于 2025-04-16 15:31

我正在尝试弄清楚,给一个svm_problem函数输入的python列表应该是什么格式。我在网上,特别是StackOverflow上找到了以下程序。

我有以下内容:

from svm import *
x=[ [1,0,1],[-1,0,-1],[1,0,0]]
#x=[ [1,0,1],[-1,0,-1]]
prob = svm_problem( [1,-1],x  )
param = svm_parameter(kernel_type = LINEAR, C = 10)
m = svm_model(prob, param)
print m.predict([ 1,1, 1])

但是它抛出了一个断言错误,提示说断言失败:assert len(x)==len(y)

不过如果我把x=[ [1,0,1],[-1,0,-1]],程序就能正常运行。难道我不应该提供一个长度超过2的训练数据吗?

另外,我也不明白在x=[[1,0,1],[-1,0,-1]]中,什么是标签,什么是数据?

任何帮助都非常感谢。

2 个回答

0

如果你给出3个例子,那么你也需要为这三个输入提供对应的类,也就是说你需要这样做:

prob = svm_problem( [1,1,-1],x  )

或者类似的做法。

2

svm_problem() 这个函数需要两个参数:第一个参数是一个标签的向量,第二个参数是一个特征的矩阵。你遇到这个错误是因为在调用 svm_problem 时,你只提供了两个标签 [1, -1] 作为第一个参数。

举个例子:

y = [1,-1,1,1]
x = [[1,0,1], [-1,0,-1], [1,2,3], [4,5,6]]
prob = svm_problem(y, x)

撰写回答