libSVM准确性与网格搜索不同

时间:2014-05-27 14:00:46

标签: svm libsvm

我正在研究一个包含2个类的数据集,我正在使用libSVM尝试不同的内核和参数。我的问题是,我从网格搜索中获得的准确度值与我在相同数据集上进行训练和预测的准确度值非常不同。

例如,在使用线性内核的网格搜索中,我得到的最佳值之一是:

log2c=1 log2g=1 rate=78.9531

正确地与我以5倍的方式运行训练相同:

[...]
optimization finished, #iter = 13642
nu = 0.000549
obj = -4.003812, rho = -1.539489
nSV = 1681, nBSV = 2
Total nSV = 1681
Cross Validation Accuracy = 78.9531%

但是如果我没有n次训练,那么准确度要低得多:

$ ./svm-train -t 0 -g 2 -c 2 /tmp/tr_pool5_adult01 tmp_model_t0
optimization finished, #iter = 19146
nu = 0.000439
obj = -4.005013, rho = -1.699265
nSV = 2008, nBSV = 2
Total nSV = 2008

$ ./svm-predict /tmp/te_pool5_adult01 tmp_model_t0 /dev/null
Accuracy = 64.8352% (354/546) (classification)

多项式内核也是如此:

log2c=1 log2g=1 rate=84.3846

$ ./svm-train -v 5 -t 1 -d 2 -g 2 -c 2 /tmp/giraudf/tr_pool5_adult01 /dev/null
[...]
Cross Validation Accuracy = 84.3846%

$ ./svm-train -t 1 -d 2 -g 2 -c 2 /tmp/tr_pool5_adult01 tmp_model_t1d2
[...]
optimization finished, #iter = 457897
nu = 0.000438
obj = -4.000000, rho = -1.013651
nSV = 3119, nBSV = 2
Total nSV = 3119

$ ./svm-predict /tmp/te_pool5_adult01 tmp_model_t1d2 /dev/null                           
Accuracy = 60.6227% (331/546) (classification)

根据网格搜索(和n次训练),多项式内核似乎比线性内核更好,但最后会给出更差的性能。这怎么可能?

我的问题是:为什么n倍版本与普通版本之间的准确性存在很大差异?这是过度拟合的问题吗?在libSVM guide中,他们首先运行网格搜索,然后获取最佳参数(C和g),使用这些参数重新训练并获得与网格搜索中相同的精度。这不会发生在我身上。我做错了吗?

感谢。

0 个答案:

没有答案