我正在使用libsvm的Python接口,我注意到在使用网格搜索选择最佳C和gamma参数(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%
Run Code Online (Sandbox Code Playgroud)
这是否意味着SVM没有考虑这些功能?或者这是有问题的数据?它们都是相关的吗?我只是无法通过73.4229号码.此外,支持向量的数量应该远小于数据集的大小,但在这种情况下,似乎并非如此.
一般来说,当交叉验证精度与数据集中的标签比率相同时,它意味着什么?
小智 6
您的数据集是不平衡的,这意味着很大一部分属于同一类.这导致了所谓的默认或多数类分类器,其中通过简单地将所有内容分类为多数类的一部分来实现高精度.所以你是对的,因为数据不考虑这些功能.
libsvm README建议改变惩罚权重来处理这个问题.这是一个相关的问题:https://stats.stackexchange.com/questions/20948/best-way-to-handle-unbalanced-multiclass-dataset-with-svm
有关不平衡数据的更多信息,请参阅"支持向量机的用户指南"的第7节.
| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |