Libsvm使用总结

来源:互联网 发布:淘宝怎么增加颜色分类 编辑:程序博客网 时间:2024/05/21 18:09

Libsvm使用心得 (分类,回归)

libsvm是实现svm的便捷开源工具,应用广泛(除此之外还有lightsvm,没用过)由国立台湾大学Chih-Chung Chang和 Chih-Jen Lin编写,可以实现基于SVM的分类和回归。
由于个人对SVM的理论只是“略懂”,下面只介绍libsvm在win32平台的基本使用方法 。对SVM一窍不通的强烈建议看一下入门文章http://ntu.csie.org/~piaip/svm/svm_tutorial.html

先介绍一下大概的流程。
准备数据集(短信语料),处理成libsvm接受的格式,之后进行训练(svm-train)得到模型
,然后进行测试,完成。其中训练的过程需要不断选取参数寻求最佳分类结果,为此libsvm提供了grid.py(python文件)专门用来帮助自动选取最佳参数。


1、资源准备
下载Libsvm、Python和Gnuplot:
libsvm——那必须有啊,最新版本2.89,主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guide
Python——主要是为了运行grid.py,最新版是2.5,可以在python的主页http://www.python.org/上下载
Gnuplot——同样为了选取最佳参数和绘图,自己搜一下,win32版的为gp423win32.zip

2、具体流程

LIBSVM 使用的一般步骤是:
1)准备数据集,转化为 LIBSVM支持的数据格式 :
[label] [index1]:[value1] [index2]:[value2] ...
即 [l类别标号] [特征1]:[特征值] [特征2]:[特征值] ...
2)对数据进行简单的缩放操作(scale);(为什么要scale,这里不解释了)
3)考虑选用核函数(通常选取径函数,程序默认);
4)采用交叉验证(一般采用5折交叉验证),选择最佳参数C与g ;
5)用得到的最佳参数C与g 对整个训练集进行训练得到SVM模型;
6)用得到的SVM模型进行测试


3、操作实现:

先进行各种安装和配置。
在C盘建立一个文件夹libsvm
解压libsvm-2.89.rar,将解压后得到的文件夹下的整个windows目录全部考到C:/libsvm下
python装在C盘,文件夹是Python25,将里面的python.exe复制到C:/libsvm/windows下
gnuplot也装在C盘,
修改grid.py文件,找到其中关于gnuplot路径的那项(其默认路径为gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe"),根据实际路径进行修改,并保存。

1)如果只是进行简单练习,可以在http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/下载合适的数据集,如果是自己的实际项目,要自己编程转换一下。假定我们选取的数据集叫做trainset。


2)对数据进行简单的缩放操作。 svm-scale [options] data_filename
开始->cmd->进入C:/libsvm/windows
然后输入:svm-scale -l 0 -u 1 trainset
得到scale后的文件trainset.scale


使用svm-scale 对数据进行缩放是必要的。因为适当的scale有助于参数的选取和建svm模型的速度。svm-scale 会对value 做scale。 范围用 -l, -u 指定,通常是[0,1],或是[-1,1]。(文本分类一般选[0,1])。輸出在 stdout。另外要注意的是 testing data 和 training data要一起scale。而svm-scale 最难用的地方就是沒办法指定testing data/training data为同一文档,然后一起scale。
因此为了后面测试,还要对测试集进行scale。
输入:svm-scale -l 0 -u 1 testset
得到scale后的文件testset.scale




3) 考虑选用RBF 核函数
Svm-train的用法: svm-train [options] training_set_file [model_file]
training_set_file为之前训练数据,而 model_file 如果不给就会自动生成
[training_set_file].model 。 options 可以先不要给。Options:常用可用的选项即表示的涵义
如下
-s svm类型:SVM设置类型(默认0)
0 -- C-SVC 1 -- v-SVC 2 -- 一类SVM 3 -- e -SVR 4 -- v-SVR-t 核函数类型:核函数设置类型(默认2)
0 – 线性:u'v
1 – 多项式:(r*u'v + coef0)^degree
2 – RBF函数:exp(-ru-v^2)
-g r(gama):核函数中的函数设置(默认1/ k)
-c cost:设置C-SVC和-SVR的参数(默认1),
-v n: n-fold交互检验模式

4)采用交叉验证选择最佳参数C与g
注意:(3)中列出的,不同的参数(最常用的就是g和c)条件下会训练出不同的SVM,那怎么选取使SVM最好的参数呢——试,一个一个试!而grid.py就是干这个的。
因此,这里要先用grid选取合适的C和g值。
Usage: grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-v fold][-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname][additional parameters for svm-train] dataset
一般log2c -10,10,1 ;log2g 10,-10,-1, -v 5即可
输入:
python grid.py -log2c -10,10,1 -log2g 10,-10,-1 trainset.scale
返回结果告诉你best-c和best-g,以后我们就用这个进行正式训练了!另外,还同时还返回准确率。

5)训练
输入:svm-train -c 得到的best-c -g 得到的best-g trainset.scale
得到:trainset.scale.model

6)测试
Svmpredict的用法:$ svmpredict test_file model_file output_file
model_file是由svmtrain产生的模型文件;test_file是要进行预测的数据文件,其格式
和 svmtrain的输入,也就是 training_set_file 是一样的!不过每行最前面的 label 可以
省略 ( 因为 predict 就是要 predict 那个 label) 。 但如果 test_file 有 label 的值的
话, predict 完会顺便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表:
test_file 写的 label 是真正的分类结果,拿来跟我们 predict 的结果比对就可以 知道
predict 有没有猜对了;Output_file是svmpredict的输出文件。svm-predict没有其它的选
项。
输入:svm-predict testset.scale trainset.scale.model result
ok,返回测试结果,enjoy it!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度云会员到期后文件怎么办 百度网盘存储空间不足怎么办 网赌一天输14万怎么办 在部队训练伤了怎么办 cdrx6激活时不能继续了怎么办 大学毕业一年后找不到工作怎么办 农村乱收垃圾费怎么办 信用卡额度低不想要怎么办 qq公告有敏感词怎么办 qq群公告敏感词怎么办 轿车加了假汽油怎么办? 电信4g变成3g怎么办 电信流量超过40g怎么办 联通卡网络信号很差怎么办 电马桶马达坏了怎么办 我这么好看别人看不到怎么办 户口打回原籍不接受怎么办 小电充电宝丢失怎么办 qq连续聊天断了怎么办 胚胎怀疑在切口处怎么办 3D渲染没有材质怎么办 员工拒绝签收员工手册怎么办 二级密码错了三次怎么办 棉签掉到耳朵里怎么办 发财树叶子有黄斑怎么办 翠兰的颈枯萎了怎么办 翠兰主干软了怎么办 花叶子长白色粘粉末怎么办 水培转土培栀子花叶子蔫了怎么办 水冷空调水不循环怎么办 哺乳期乳房一个大一个小怎么办 我喝酒后喂奶了怎么办 磁盘目录不具有读写权限怎么办 玻纤网格布扎手怎么办 模拟城市5细菌太多怎么办 空气风犁叶子卷怎么办 晚上腿比早上粗怎么办 新疆公安边防改革新兵怎么办 专升本没有考上怎么办 摩托车漏检了2年怎么办 19年北京外地车怎么办