LibSVM为什么会把所有的训练向量都转换为支持向量?

5

我正在尝试使用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个加权向量作为训练数据,并且生成的模型将所有向量作为支持向量,这肯定是过拟合的。

我的总特征(特征向量DB表中的唯一单词/行数)为7610

可能的原因是什么?

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

LibSVM中,对于二元分类有任何类别标签的限制吗?

我使用01代替-1+1。这是一个问题吗?

3个回答

3

您需要进行某种类型的参数搜索,如果类别不平衡,分类器可能会在不做太多工作的情况下获得人为高精度。这篇指南很好地教授了基本的实用技能,您应该阅读它。


1

我一定会尝试使用-1和+1来标记你的数据,这是标准的做法。

此外,你有多少数据?由于你正在处理7610维空间,你可能有那么多支持向量,其中不同的向量在每个维度上都“支持”着超平面。

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


找到原因了,这是因为SVM.net没有检查训练数据的有效性。我的训练数据特征数字没有排序,结果生成了奇怪的结果。在对特征数字进行排序后,生成模型的效果好多了...准确率达到了74%。谢谢。 - Krishna Chaitanya M

1
如前所述,在进行其他任何操作之前,进行参数搜索可能是一个不错的主意。
我还会调查一下可用的不同内核。你输入的数据是二进制的这个事实可能对RBF内核有问题(或者可能使其使用效果不佳,相比于其他内核)。虽然我不知道哪个内核可能更适合,但可以尝试线性内核,并寻找更多建议/想法 :)
要获取更多信息和更好的答案,可以访问stats.stackexchange.com。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接