5

我正在为 libsvm 使用 Python 接口,我注意到的是,在使用网格搜索选择最佳参数Cgamma参数(RBF 内核)后,当我训练模型并交叉验证它时(5 倍,如果相关),我收到的准确度与我的训练数据集中的标签比率相同。

我有 3947 个样本,其中 2898 个有标签 -1,其余的有标签 1。所以这是样本的 73.4229%。

当我训练模型并交叉验证 5 次时,这就是我得到的 -

optimization finished, #iter = 1529
nu = 0.531517 obj = -209.738688,
rho = 0.997250 nSV = 1847, nBSV = 1534
Total nSV = 1847
Cross Validation Accuracy = 73.4229%

这是否意味着 SVM 没有考虑这些特征?还是这里的数据有问题?他们俩有关系吗?我只是无法让它超过 73.4229 号码。此外,支持向量的数量应该远小于数据集的大小,但在这种情况下,似乎并非如此。

一般来说,当交叉验证准确率与数据集中标签的比率相同时,这意味着什么?

4

1 回答 1

6

您的数据集是不平衡的,这意味着很大一部分属于同一类。这导致了所谓的默认或多数类分类器,通过简单地将所有内容分类为多数类的一部分来实现高精度。所以你是对的,它没有考虑到这些特征,因为数据。

libsvm README 建议改变惩罚权重来处理这个问题。这是一个相关的问题:https ://stats.stackexchange.com/questions/20948/best-way-to-handle-unbalanced-multiclass-dataset-with-svm

有关不平衡数据的更多信息,请参阅支持向量机用户指南的第 7 节。

于 2012-12-03T11:15:00.020 回答