【问题标题】:LibSVM turns all my training vectors into support vectors, why?LibSVM 把我所有的训练向量都变成了支持向量,为什么?
【发布时间】:2011-08-09 12:36:10
【问题描述】:

我正在尝试使用 SVM 进行新闻文章分类。

我创建了一个表格,其中包含作为行的特征(在文档中找到的唯一词)。 我用这些特征创建了权重向量映射。即,如果文章有一个词是特征向量表的一部分,则该位置被标记为1,否则为0

例如:- 生成的训练样本...

1 1:1 2:1 3:1 4:1 5:1 6:1 7:1 8:1 9:1 10:1 11:1 12:1 13:1 14:1 15:1 16:1 17:1 18:1 19:1 20:1 21:1 22:1 23:1 24:1 25:1 26:1 27:1 28:1 29:1 30:1

由于这是第一个文档,所有功能都存在。

我使用10 作为类标签。

我正在使用 svm.Net 进行分类。

我给300权重向量手动分类为训练数据,生成的模型将所有向量作为支持向量,这肯定是过拟合。

我的总特征(特征向量数据库表中的unique words/row count)是7610

可能是什么原因?

由于这种过度拟合,我的项目现在处于非常糟糕的状态。它将每一篇可用的文章归类为正面文章。

LibSVM二元分类中,类标签有什么限制吗?

我正在使用01 而不是-1+1。有问题吗?

【问题讨论】:

    标签: c# .net machine-learning svm libsvm


    【解决方案1】:

    正如所指出的,在执行其他任何操作之前进行参数搜索可能是一个好主意。

    我还将研究可供您使用的不同内核。您输入的数据是二进制的这一事实可能对 RBF 内核有问题(或者与另一个内核相比,它的使用可能不是最佳的)。不过,我不知道哪个内核更适合。尝试线性内核,并四处寻找更多建议/想法:)

    如需更多信息和更好的答案,请访问 stats.stackexchange.com。

    【讨论】:

      【解决方案2】:

      我肯定会尝试为您的标签使用 -1 和 +1,这是标准的做法。

      另外,你有多少数据?由于您在 7610 维空间中工作,因此您可能拥有那么多支持向量,其中不同的向量在每个维度中“支持”超平面。

      有了这么多特征,你可能想尝试一些特征选择方法,比如主成分分析。

      【讨论】:

      • 找到了原因,这是因为 SVM.net 没有检查训练数据的有效性。在我的训练数据中,特征编号没有排序,因此它产生了奇怪的结果。在对特征数的权重向量进行排序然后生成模型之后,情况要好得多……74% 的准确度。谢谢。
      【解决方案3】:

      您需要进行某种类型的参数搜索,如果类不平衡,分类器可能会在不做太多事情的情况下获得人为的高精度。这个guide is good 在教基本实用的东西,你应该看看它

      【讨论】:

        猜你喜欢
        • 2014-06-28
        • 2017-09-19
        • 2013-04-04
        • 1970-01-01
        • 2013-07-14
        • 2017-05-18
        • 2020-10-26
        • 2017-08-08
        • 2013-12-06
        相关资源
        最近更新 更多