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

时间:2015-04-08 14:28:28

标签: java machine-learning libsvm

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

目前准确性较差,并且需要this guide来调整模型。 在这个阶段有两个疑点。

  1. 我通过使用termcount / totalterms_in_doc进行缩放。这是否足够?
  2. 运行svm.svm_cross_validation / svm.svm_train方法后,我得到以下输出,它是什么意思,我如何从中推断出伽玛和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 个答案:

答案 0 :(得分:4)

我假设您按照[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也是如此。

获得最好的"对于您的分类问题,您需要进行网格搜索(在链接指南中进行了描述)。对于LIBSVM中的网格搜索,他们的没有内置功能

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

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