求助–使用LibSVM获得100%的准确率?

名义上这是一个好问题,但我非常肯定是因为有些奇怪的事情发生了…

作为背景,我正在处理面部表情/识别领域的问题,因此获得100%的准确率似乎令人难以置信(并不是说它在大多数应用程序中是合理的…)。我猜要么是数据集存在一些一致的偏差,使得SVM非常容易提取答案,要么,更有可能的是,我在SVM方面做错了什么。

我正在寻找建议,以帮助我了解发生了什么——是我(我对LibSVM的使用)的问题?还是数据的问题?

详细信息:

  • 大约~2500个标记的数据向量/实例(个体转换后的视频帧——总共<20个个体),二元分类问题。每个实例约~900个特征。不平衡的数据集,比例约为1:4。
  • 运行subset.py将数据分成测试集(500个实例)和训练集(剩余的)。
  • 运行 “svm-train -t 0 “。(注意:显然不需要’-w1 1 -w-1 4’…)
  • 在测试文件上运行svm-predict。准确率=100%!

尝试过的方法:

  • 检查了大约10次,确认我没有在相同的数据文件上进行训练和测试,没有因为某些无意的命令行参数错误。
  • 多次重新运行subset.py(甚至使用-s 1),并且只对多个不同的数据集进行了训练/测试(以防我随机碰到了最神奇的训练/测试对)。
  • 运行了一个简单的类似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正在捕捉到的数据中存在的哪些微妙的实验者偏差。


回答:

另外两个想法:

确保你没有在相同的数据上进行训练和测试。这听起来有点傻,但在计算机视觉应用中,你应该注意:确保你没有重复数据(例如,同一视频的两帧落在不同的折叠中),你没有在同一个人身上进行训练和测试等。这比听起来更微妙。

确保你搜索了RBF内核的gamma和C参数。有一些好的理论(渐近)结果证明线性分类器只是一个退化的RBF分类器。所以你应该寻找一个好的 (C, gamma) 对。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注