名义上是一个很好的问题,但我很确定这是因为发生了一些有趣的事情......
作为上下文,我正在研究面部表情/识别空间中的一个问题,因此获得 100% 的准确率似乎令人难以置信(并不是说它在大多数应用程序中都是合理的......)。我猜数据集中存在一些一致的偏差,这使得 SVM 很容易得出答案,=或=,更有可能的是,我在 SVM 方面做错了。
我正在寻找帮助了解正在发生的事情的建议——是我吗(=我对 LibSVM 的使用)?还是数据?
细节:
- 大约 2500 个带标签的数据向量/实例(转换后的个人视频帧——总共<20 个人),二元分类问题。~900 个特征/实例。不平衡数据集的比例约为 1:4。
- Ran subset.py 将数据分成测试(500 个实例)和训练(剩余)。
- 跑“svm-train -t 0”。(注意:显然不需要'-w1 1 -w-1 4'......)
- 在测试文件上运行 svm-predict。准确度=100%!
尝试的事情:
- 通过一些无意的命令行参数错误检查了大约 10 次我没有对相同的数据文件进行训练和测试
- 多次重新运行subset.py(即使使用-s 1)并且只训练/测试多个不同的数据集(以防我随机在最神奇的训练/测试pa
- 运行一个简单的类似 diff 的检查以确认测试文件不是训练数据的子集
- 数据上的 svm-scale 对准确度没有影响(准确度=100%)。(虽然支持向量的数量确实从 nSV=127, bSV=64 下降到 nBSV=72, bSV=0。)
- ((奇怪))使用默认的 RBF 内核(副线性 - 即删除 '-t 0')导致准确性进入垃圾(?!)
- (健全性检查)使用在缩放数据集上针对未缩放数据集训练的模型运行 svm-predict 导致准确度 = 80%(即,它总是猜测主导类)。这严格来说是一个健全性检查,以确保以某种方式 svm-predict 名义上在我的机器上正确运行。
初步结论?:
数据中的某些东西很奇怪——不知何故,在数据集中,SVM 正在接受一种微妙的、由实验者驱动的效果。
(然而,这并不能解释为什么 RBF 内核会给出垃圾结果。)
非常感谢关于 a)如何修复我对 LibSVM 的使用(如果这实际上是问题)或 b)确定 LibSVM 数据中的微妙实验者偏见的任何建议。