Artificial intelligence 帮助——LibSVM的100%准确率?

Artificial intelligence 帮助——LibSVM的100%准确率?,artificial-intelligence,machine-learning,computer-vision,svm,libsvm,Artificial Intelligence,Machine Learning,Computer Vision,Svm,Libsvm,名义上这是一个很好的问题,但我很确定这是因为发生了一些有趣的事情 作为背景,我正在研究面部表情/识别领域的一个问题,因此获得100%的准确率似乎难以置信(这在大多数应用中并不合理…)。我猜数据集中可能存在一些一致的偏差,这使得支持向量机很容易得出答案,=或者=,更可能的是,我在支持向量机方面做错了什么 我正在寻找一些建议来帮助理解正在发生的事情——是我吗?还是数据 详情如下: 大约2500个标记的数据向量/实例(个体的转换视频帧--尽管细节中有魔鬼,但这里有三个简单的测试可以尝试: 快速(~2

名义上这是一个很好的问题,但我很确定这是因为发生了一些有趣的事情

作为背景,我正在研究面部表情/识别领域的一个问题,因此获得100%的准确率似乎难以置信(这在大多数应用中并不合理…)。我猜数据集中可能存在一些一致的偏差,这使得支持向量机很容易得出答案,=或者=,更可能的是,我在支持向量机方面做错了什么

我正在寻找一些建议来帮助理解正在发生的事情——是我吗?还是数据

详情如下:


  • 大约2500个标记的数据向量/实例(个体的转换视频帧--尽管细节中有魔鬼,但这里有三个简单的测试可以尝试:

  • 快速(~2分钟):通过决策树算法运行数据。这在Matlab中可通过
    classregtree
    获得,或者您可以加载到R中并使用
    rpart
    。这可以告诉您是否有一个或几个特性恰好提供了完美的分离
  • 不太快(约10-60分钟,取决于您的基础设施):迭代拆分功能(即从900组到2组450组)、训练和测试。如果其中一个子集为您提供了完美的分类,请再次拆分。只需不到10次此类拆分即可找出问题变量的位置。如果发生“中断”由于还有许多变量(甚至在第一次拆分中),请选择不同的随机特征子集,一次删除较少的变量,等等。拆分数据不可能需要全部900个变量
  • 更深入的分析(几分钟到几个小时):尝试标签的排列。如果您可以排列所有标签,并且仍然获得完美的分离,那么您的训练/测试设置中会出现一些问题。如果您选择越来越大的子集进行排列(或者,如果选择其他方向,则保持静止)你可以看到你在哪里开始失去可分性。或者,考虑减少你的训练集大小,如果你用一个非常小的训练集获得可分离性,那么有些东西是怪异的。
  • 方法#1很快,应该很有见地。我可以推荐其他一些方法,但是#1和#2很简单,如果它们不提供任何见解,那就很奇怪了。

    另外两个想法:

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


    确保搜索RBF核的gamma和C参数。有很好的理论(渐近)结果证明线性分类器只是退化的RBF分类器。因此,您应该只寻找一个好的(C,gamma)配对。

    Mmmm,数据和模型分析保持一定距离。可行,但速度非常非常慢。这可能相当具有挑战性。您是否有机会发布数据?几乎可以肯定是数据,但让其他人复制数据可能会有帮助。此外,如果您精通R,则可以更容易地提供建议。最有可能的是-)您已将测试数据包括在培训集中。我知道你已经检查过了,但还检查了一些。@carlosdc有一个很好的观点:这些是独立的样本,还是你选择了rando,训练/测试分割,图像在时间上可能非常接近?@severian:如果你将数据集处理到最小值,它应该远小于-2500*900*15(假设每个特征大约15个字符)约为33mb,未压缩。我的直觉是,它确实存在于数据中——可能正样本和负样本的预处理有所不同,导致分类器拾取的特征中出现伪影——其他数据集也存在这种情况。至于“RBF内核返回垃圾”-这可能是过度拟合。改变C和sigma应该有帮助(但是如果线性核完全分离,为什么还要麻烦RBF呢?)@Sid:请看上面的线程——这是一个没有很好地将数据集划分为测试和训练的问题(我的错)。例如,考虑将所有帧50-50划分为测试和训练的天真类型。帧n+1(以及,在较小程度上,n+2、n+3等)看起来非常类似于帧n,并且通常(在我的例子中)标记为与帧n相同。分类器在第n帧上进行训练,然后在“测试”集中看到n+1,然后神奇地将其“正确”…一遍又一遍。需要对测试和训练进行更为离散的划分(例如,多秒/分钟/任何子集)。我不确定你所说的排列标签是什么意思,但如果你是指排列向量变量的顺序,这永远不会影响SVM结果@Ite:你能澄清一下“排列”的说法吗?您的意思是在每个数据实例/点中随机排列一些数量的变量吗?(因此不同实例的排列略有不同?)Re:#1和#2,将很快开始讨论它们…非常感谢这些建议。标签是响应变量。换句话说,你是在引入噪音。在二元分类中,这本身不会引入错误分类,因为它会从响应分布中重新采样。关键是,在某个时刻,会出现故障。您可以故意错误标记,但从响应分布重新采样或排列标签是数据和模型探索的有用方法。@ldog:您的说法是正确的,这不是建议。事实上,大多数建模方法都是如此,而不仅仅是支持向量机,因为大多数都是置换不变的,除了那些有意建立在序列上的方法,比如时间序列模型。对于RBF,感谢您指出(应该是什么!)显而易见的——我忘了搜索好的参数。一旦100%的准确率开始恢复,我就变得过分兴奋了(因此,因为我知道