【问题标题】:One versus rest classifier一与休息分类器
【发布时间】:2011-10-15 10:06:14
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 我有点困惑,因为大量的支持向量往往是过拟合的同义词,但另一方面,如果你的训练和测试数据集是相同的,那么过拟合应该会给出 100% 的准确率...您能否手动将 C 修复为强制过度拟合的值(我不记得是 C=0 还是 C=infinity)并告诉我们结果?让我感到困惑的另一件事是,如果你使用 LibSVM,你如何设法做一个一对多的分类器?因为作者似乎选择了 1v1 方法 (csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f419)

标签: machine-learning classification svm


【解决方案1】:

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

  1. 一般来说,SVM试图找到最佳单独课程的超平面。但是,由于您选择了1VS1分类,因此您别无选择,只能将所有负片混合在一起(您的“休息”类)。这可能会使“最佳”分离不那么适合解决您的问题。我猜这可能是这里的一个主要问题。 要验证该情况是否如此,我建议尝试仅使用一个其他基本方向作为负集合,并查看是否提高了结果。如果它确实如此,您可以培训7分类器,每个方向一个。另一个选项可能是使用libsvm的多键选项,或者像SVMLight,它能够对许多进行分类。
  2. 大多数SVM实现的一个警告是它们无法支持正面和负面套之间的大差异,即使是加权。根据我的经验,在许多情况下,超过4-5的加权因子是有问题的。另一方面,由于负面的各种大小,因此相等的尺寸也可能小于最佳状态。因此,我建议使用类似于338个正例的东西,以及大约1000-1200个随机的负例,加权。
  3. 一些问题,我还考虑了其​​他类型的分类。要开始,我建议思考knn

希望对你有帮助:)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 2019-02-25
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2023-01-23
      • 2023-03-15
      相关资源
      最近更新 更多