libsvm预测方法困惑

7 投票
2 回答
3539 浏览
提问于 2025-04-16 09:06

我有一个关于libsvm中svm_predict()方法的问题。

在README里有一个快速入门的示例代码:

>>> y, x = [1,-1], [{1:1, 3:1}, {1:-1,3:-1}]
>>> prob  = svm_problem(y, x)
>>> param = svm_parameter('-c 4 -b 1')
>>> m = svm_train(prob, param)

>>> p_label, p_acc, p_val = svm_predict(y, x, m)

现在我明白y是和x中的字典相关联的类别列表。我也理解了svm_train的部分。

但让我困惑的是,在svm_predict中,我需要提供y中的“真实值”,还有测试数据x。我以为这个方法的意思是我事先并不知道测试数据的分类。

如果我的训练数据是:

y = [1, 2, 3]
x = [{1:1}, {1:10}, {1:20}]

但我的测试数据是:

z = [{1:4}, {1:12}, {1:19}]

那么为什么我还需要在svm_predict()中传入z的真实值,比如:

a, b, c = svm_predict(y, z, m)

我根本不知道z的真实值——这不就是预测的目的嘛。我在进行预测时应该随便填一些y的分类值吗,还是我完全理解错了什么?

谢谢大家

2 个回答

1

你可以考虑使用这个链接:

http://scikit-learn.sourceforge.net/

这个网站提供了一个很棒的Python库,可以用来操作libsvm。

5

它使用真实的标签来给你提供准确率的统计数据,这样你在进行样本外测试时可以知道效果如何。

如果你是在“在线”运行,也就是说你实际上没有真实的标签,那么就用 [0]*len(z) 来代替 y

撰写回答