【发布时间】: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