一个与休息分类器

时间:2011-07-28 19:20:27

标签: machine-learning classification svm

我正在实施 one-versus-rest 分类器来区分对应的神经数据(1)和向上移动计算机光标以及(2)将其移动到其他七个基数中的任何一个方向或没有运动。我正在使用带有RBF内核的SVM分类器(由LIBSVM创建),我进行了网格搜索,以便为我的分类器找到最佳的gamma和cost参数。我已经尝试使用来自两个类中的338个元素的训练数据(对我的大型“休息”类进行取样)并使用了我的第一个类中的338个元素和来自我的第二个类中的7218个加权SVM。

我还使用了功能选择将我正在使用的功能数量从130减少到10.我在训练分类器时尝试使用十个“最佳”功能和十个“最差”功能。我也使用了整个功能集。

不幸的是,我的结果不是很好,而且,我找不到解释原因。我测试了37759个数据点,其中1687个来自“一个”(即“up”)类,剩下的36072来自“rest”类。在所有情况下,我的分类器准确度为95%但是正确预测的值都属于“休息”类(即我的所有数据点都被预测为“休息”,并且所有错误预测的值都属于“一个” “/”up“class”。当我尝试使用来自每个类的338个数据点(我用于训练的那些数据点)进行测试时,我发现支持向量的数量是666,比数据点的数量少10。在这种情况下,百分比准确率仅为71%,这是不寻常的,因为我的训练和测试数据完全相同。

你知道可能出现什么问题吗?如果您有任何建议,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:1)

测试数据集与训练数据相同意味着您的训练准确率为71%。它没有任何问题,因为您使用的内核可能无法很好地分离数据。 然而,一个值得关注的问题是支持向量的数量很高表明可能过度拟合。

答案 1 :(得分:0)

不确定这是否构成答案 - 如果没有真正看到数据,可能很难给出答案 - 但这里有一些关于你所描述的问题的想法:

  1. 通常,SVM会尝试查找最能将您的类分开的超平面。但是,由于您选择了1vs1分类,因此您别无选择,只能将所有负面情况混合在一起(您的“休息”类)。这可能会使“最佳”分离更不适合解决您的问题。我猜这可能是一个重大问题。 为了验证是否是这种情况,我建议尝试仅使用另一个基本方向作为负集,并查看是否可以改善结果。如果是这样,您可以训练7个分类器,每个方向一个。另一种选择可能是使用libSVM的多类选项,或者像SVMLight这样的工具,它可以将一个选项分类为多个。
  2. 大多数SVM实现的一个警告是它们无法支持正负集之间的巨大差异,即使是加权也是如此。根据我的经验,在许多情况下,超过4-5的加权因子是有问题的。另一方面,由于你的负面变化很大,所以相同的尺寸也可能不是最佳的。因此,我建议使用338个正面例子和大约1000-1200个随机负面例子,加权。
  3. 稍微偏离你的问题,我会考虑其他类型的分类。首先,我建议考虑knn
  4. 希望有所帮助:)