使用java libsvm进行文本分类——模型、参数选择

Posted

技术标签:

【中文标题】使用java libsvm进行文本分类——模型、参数选择【英文标题】:Text classification using java libsvm - model, parameter selection 【发布时间】:2015-06-13 13:59:54 【问题描述】:

我正在尝试使用 libsvm 的直接 java 端口进行文本分类。

目前准确度较差,请关注this guide 调整模型。 现阶段有2个疑问。

    我通过使用 termcount/totalterms_in_doc 来进行扩展。这样就够了吗?

    当运行 svm.svm_cross_validation / svm.svm_train 方法时,我得到以下输出,这是什么意思,我如何从中推断出 gamma 和 C?

    优化完成,#iter = 1504 nu = 0.5800464037122964 obj = -299.9624358558652,rho = -0.9799716681242028 nSV = 3000,nBSV = 3000 总 nSV = 3000 版本 libsvm=3.2, java=1.7

【问题讨论】:

【参考方案1】:

我假设您按照 [1] 中的说明进行文本分类。

要获得您的特征值(简单缩放、不缩放、随心所欲),您有多种可能性 [2]。

TFC方法效果很好[1],详情请看[2]:

TermFrequency * log(N/n) * 1 / sum((TermFrequency_i * log(N/n_i))^2)

sum => every term in your document collection; 
N => total number of documents; 
n => number of documents to which a term is assigned

输出来自训练过程。对于训练(假设您使用的是 RBF 内核),参数 gamma 和 C 使用默认值(如果您不通过 CLI 参数提供它们) - 与 CV 相同。

要为您的分类问题获得“最佳” gamma 和 C,您必须继续进行网格搜索(在链接指南中进行了描述)。 Afaik 他们在 LIBSVM 中没有用于网格搜索的内置功能

[1] T. Joachims:支持向量机的文本分类:使用许多相关特征进行学习;施普林格:德国海德堡,1998,doi:10.1007/BFb0026683

[2] G. Salton 和 C. Buckley。自动文本检索中的术语加权方法。信息处理和管理,24(5):513523, 1988.

【讨论】:

我一直在尝试各种缩放方案,在安然垃圾邮件数据集上得到不同的结果。想知道需要多少训练数据才能获得好的结果。另外,知道 libSVM 使用什么缩放方案吗? 每个“默认”不进行缩放。如果您的值涵盖了巨大的间隔,则缩放到 -1 到 1 可能会很有用。准确性首先取决于您的数据,其次取决于所选功能、调整的内核参数,最后取决于术语加权或缩放方法。您使用多少文件进行培训?有多少类别?任何类型的预处理?

以上是关于使用java libsvm进行文本分类——模型、参数选择的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 libsvm 进行文本分类?

基于的朴素贝叶斯的文本分类(附完整代码(spark/java)

使用 LibSVM 进行分类

java中使用libsvm的文档分类

使用 LIBSVM 进行分类的 100% 准确度 - 可能有啥问题?

如何使用 LibSVM 进行“多分类”方法?