0

我正在实现一个一对一分类器来区分对应于(1)将计算机光标向上移动和(2)将其沿其他七个基本方向中的任何一个移动或不移动的神经数据。我正在使用带有 RBF 内核(由 LIBSVM 创建)的 SVM 分类器,并且我进行了网格搜索以找到适合我的分类器的最佳 gamma 和成本参数。我尝试使用来自两个类中的每一个的 338 个元素的训练数据(对我的大型“休息”类进行欠采样),并使用了我的第一个类中的 338 个元素和我的第二个类中的 7218 个元素以及加权 SVM。

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

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

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

谢谢!

4

2 回答 2

1

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

于 2012-04-12T08:18:39.993 回答
0

不确定这是否相当于一个答案——如果没有实际看到数据,可能很难给出答案——但这里有一些关于你描述的问题的想法:

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

希望能帮助到你 :)

于 2011-08-23T10:57:32.840 回答