svm及libsvm使用学习

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:23:43
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) =
1表示使用d阶多项式函数
K(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) = (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(/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中的形式是一致的