libsvm预测方法困惑
我有一个关于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
5
它使用真实的标签来给你提供准确率的统计数据,这样你在进行样本外测试时可以知道效果如何。
如果你是在“在线”运行,也就是说你实际上没有真实的标签,那么就用 [0]*len(z)
来代替 y
。