LibSVM将我的所有训练向量转换为支持向量,为什么?

时间:2011-04-20 13:34:19

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

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

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

Ex: - 培训样本生成...

  

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。这是一个问题吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

有了这么多功能,你可能想尝试某种类型的特征选择方法,比如主成分分析。

答案 2 :(得分:1)

正如所指出的,在做其他任何事情之前,参数搜索可能是一个好主意。

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

有关更多信息和更好的答案,请查看stats.stackexchange.com。