SVM补做

本文原载于 cyz14.farbox.com [2016-06-23的博客]。代码 svm.py 已丢失,印象中比较简单,仅仅使用了 libsvm 进行了测试。
—–以下为原文—–

SVM作业

SVM的文本分类实验采用libsvm工具,对文本处理后得到的数据进行训练和测试。
代码为 svm.py 文件,主要功能是处理4类文本获得词汇表和每个文件的词汇 tf-idf 向量,按格式输出到 libsvm 的训练数据文件中。
libsvm 的数据格式为:
每行一个样例,这里为一个文件的数据

<label> <index1>:<value1> <index2>:<value2> ...

其中

[
"c1_atheism", # (无神论)
"c2_sci.crypt",  # (洞穴)
"c3_talk.politics.guns", # (政治)
"c4_comp.sys.mac.hardware"] # (计算机)

之后每个 : 对为一个分量的值,这里是每个单词的权重,采用的是 tf-idf。单词顺序是预处理所有文本得到的词汇表的顺序,保证了所有文件里顺序的相同。

TF-IDF 的计算

预处理得到了总的词汇表,同时还记录了出现了每个单词的文档个数 df , 这样方便后面计算 idf。

idfi=log(N/dfi) i d f i = l o g ( N / d f i )

其中N为文档总数,这里取了400.
tf 则是采用了单词在文档中所占的频率,而不是直接采用了出现次数。

交叉验证

验证方式采用了最直接的交叉验证,这也可以不用分出训练集和测试集。

./svm-scale textsvm.txt > textsvm.scale
./svm-train -s 0 -c 5 -t 2 -v 5 textsvm.scale

svm-type: C-SVC

cost: C of C-SVC = 5
kernel type: 2 – radial basis function: exp(-gamma*|u-v|^2)
S 折交叉验证:5
测试一次的结果正确率为 81.25%
尝试其他不同参数的结果如下:

svm-type: nu-SVC

cost: C of C-SVC = 5
kernel-type: 2 – radial basis function: exp(-gamma*|u-v|^2)
S 折交叉验证: 5

svm-type: nu-SVC

cost: C of C-SVC = 5
kernel-type: 1 – polynomial: (gamma*u’*v + coef0)^degree
S 折交叉验证: 5

可见在该文本库中,SVM-type 选择 nu-SVC 要比 C-SVC 效果更好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值