名义上这是一个好问题,但我很确定这是因为发生了一些有趣的事情......
作为上下文,我正在研究面部表情/识别空间中的一个问题,因此获得 100% 的准确度似乎令人难以置信(并不是说在大多数应用程序中这是合理的......)。我猜测数据集中存在一些一致的偏差,这使得 SVM 过于容易地得出答案,=或者=,更有可能的是,我在 SVM 方面做错了一些事情。
我正在寻找建议来帮助理解正在发生的事情——是我吗(=我对 LibSVM 的使用)?或者是数据?
细节:
- 大约 2500 个标记数据向量/实例(个人的转换视频帧 - 总共
- 运行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 名义上在我的机器上正常运行。
暂定结论?:
数据中的某些东西是奇怪的——不知何故,在数据集中,支持向量机正在捕捉到一种微妙的、由实验者驱动的效应。
(然而,这并不能解释为什么 RBF 内核在第一遍时给出垃圾结果。)
如果有任何建议,我将不胜感激:a)如何修复我对 LibSVM 的使用(如果这确实是问题)或 b)确定 LibSVM 在数据中发现了哪些微妙的实验者偏差。
另外两个想法:
确保您没有使用相同的数据进行训练和测试。这听起来有点愚蠢,但在计算机视觉应用中,您应该注意:确保您没有重复数据(例如同一视频的两帧落在不同的折叠上),您不是在同一个人上进行训练和测试等等。它比听起来更微妙。
确保搜索 RBF 内核的 gamma 和 C 参数。有很好的理论(渐近)结果证明线性分类器只是一个退化的 RBF 分类器。所以你应该寻找一个好的(C,gamma)对。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)