名义上是一个很好的问题,但我很确定这是因为有趣的东西正在发生......
作为背景,我正在处理面部表情/识别空间中的问题,因此获得100%的准确性似乎令人难以置信地难以置信(并非在大多数应用程序中都是合理的......) . 我猜测数据集中存在一些一致的偏差,它使得SVM过于容易地得出答案,=或=,更可能的是,我在SVM方面做错了 .
我正在寻找建议,以帮助了解发生了什么 - 是我(=我对LibSVM的使用)?还是数据?
细节:
关于~2500个标记的数据向量/实例(个体的变换视频帧 - 总共<20个人),二进制分类问题 . ~900个功能/实例 . 不 balancer 数据的比率约为1:4 .
Ran subset.py将数据分成测试(500个实例)和训练(剩余) .
然后"svm-train -t 0 " . (注意:显然不需要'-w1 1 -w-1 4' ...)
Ran 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数据中的哪些微妙的实验者偏见正在接受 .