打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
svm及libsvm使用学习

svm及libsvm使用学习

Thursday, July 23rd, 2009 at 14:33Leave a commentGo to comments

作者: chua | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.meichua.com/archives/181.html

1: 工具下载地址
http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz
解压后里面有个java目录,里面是java版的source文件
可以在该java目录下执行make,会在该目录下生成libsvm.jar,而后就可以使用libsvm提供的功能了

java源码的命名方式不符合我们一般的习惯,所以最好自己修改一下类名,方法名,这样我们调用的时候看到的引用也会顺眼些

2: 使用libsvm.jar
2.1: svm_toy这是一个applt程序,简单的分类使用,对页面上不同颜色的点进行划分
java -cp libsvm.jar svm_toy

2.2 svm_train
建立svm的模型,需要事先准备一个数据文件,格式如下:

lable1 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...lable2 index1:featureValue1 index2:featureValue2 index3:featureValue3 ....lable3 index1:featureValue1 index2:featureValue2 index3:featureValue3 ....lable4 index1:featureValue1 index2:featureValue2 index3:featureValue3 ...

这各格式中,lable是分类的标签,具体是值可以是1,2,3等等,lable的对象类型是double,所以你可以写成1.0,2.0,3.0或者1,1.5,2,3
index值就是featureValue的索引,也就是要计算的矩阵中的列,具体可以写成1,2,3,index的对象类型是integer. 这里index可以跳这些,比如某个featureValue不存在,如:

1 1:0.5 5:2.0 6:0.1

当准备好训练数据文件(假设文件名为train_data.txt)后,执行
java -cp libsvm.jar svm_train train_data.txt svm_model.txt
把计算模型结果输出到svm_model.txt中,以便在predict中使用

2.3 svm_predict使用之前建立的svm model,对数据进行分类处理,事先需要准备predict文件,格式如上,在这里lable是你预先判断的值,会和计算结果做比较,计算出准确率
java -cp libsvm.jar svm_predict predict_data.txt svm_model.txt output.txt

3 更多请查看readme

4 几个概念的参数
在train的时候,我们可以设置参数:
其中-t用来指定核函数类型:

0 – linear: u'*v1 – polynomial: (gamma*u'*v + coef0)^degree2 – radial basis function: exp(-gamma*|u-v|^2)3 – sigmoid: tanh(gamma*u'*v + coef0)

0表示使用线性函数:

K(x, y) = <x, y>

1表示使用d阶多项式函数

K(x, y) = (<x, y> + 1)^dfor d = 2 and 2-dimensional inputsK(x, y) = 1 + 2*x1*y1 + 2*x2*y2 + 2*x1*y1*x2*y2 + x1^2*y2^2 + x2^2*y2^2= <f(x),f(x)>f(x) = (1,√2x1,√2x2,√2x1x2, x1^2*x2^2)^T

2表示使用高斯径向基函数

K(x,y) = exp(- (||x-y||)^2 / d^2 )

3表示使用S型函数

K(x,y) = tanh(<x,y>/d + 1)

-s用来指定SVM的类型(default 0)

0 – C-SVC1 – nu-SVC2 – one-class SVM3 – epsilon-SVR4 – nu-SVR

0,1分类问题 2分布估算问题 3,4是回归问题

另外更多的参数见readme

5 libsvm的文本分类
我从网上搜集了很多资料,基本上都是英文的,所以看的可能不是很确切.一般的做法就是在文章中找关键词,可以根据词语的类别特征,词频,在整个文章中占的比例来建立向量,也就是一个特征为一为属性值.也有像建立2000个词的词典,然后根据词建立固定的index,入文本中出现就在该index的属性值标记,这样的话就是2000维向量.
通常文本分类用于搜索系统,图书馆管理系统等.
5.1 制作demo的分类思路
a:
首先构造一个字典,对里面的词进行分类
b:
构造model,对已经标记类型的文本进行词搜索,找出个类别下词的总个数和出现次数作为index和value.比如在标识为类型1的文本中第一类下的词总共出现9个,一共出现40次,第二类的词总共2个,5次.
那么构造出来的train的数据就是:
1 1:5 2:40 3:2 4:5
这样取得所有文本数据,建立svm model
c:
进行predict,对需要预测目录下的文本,根据svm_model预测类型,向量的提取和构建model中的形式是一致的

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
libsvm使用方法总结
教大家如何制作可以让别人电脑关机并设上开机密码的文件
SVM大解密(附代码和公式)
如何利用python使用libsvm
电子书格式一览
LibSVM学习(三)——LibSVM使用规范 - 东海的日志 - 网易博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服