一、官方介绍
libsvm主页:https://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html
libsvm介绍文档:~cjlin/papers/libsvm.pdf
官方关于更有效地使用libsvm的使用说明:~cjlin/papers/guide/guide.pdf (很有须要看)
数据库:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/
关于二分类的实例:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary.html
关于多分类实例:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html
常见问答:~cjlin/libsvm/faq.html ? (这里能够帮你解决好多疑惑)
有用工具列表:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/ (guide提到的liblinear在此)
二、必要软件
libsvm-3.20:~cjlin/libsvm/libsvm-3.20.zip
python-2.7.10:https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi(挪用python工具时使用)
gnuplot5.0.1:(用画图展示整个搜索最佳參数过程)
三、训练过程说明
——(以后输入命令以.bat格局存储就可以使用)
1、提取数据形式的特征:(类别标签 特征序号:特征值)
1 1:2.111 2:3.567 3:-0.125
...
0 1:2.156 2:3.259 3:0.258
...
分袂将训练样本数据和測试样本数据存成名为train的文件和名为test的文件(仅为了便利区分)
2、对特征数据进行缩放(提高运算效率)
svm-scale -l -1 -u 1 -s rangetrain >train.scale (-1~1暗示缩放范畴 -l表low -u表up -s表save 将调动后区间存为range ?train是原始特征数据 train.scale是缩放后的数据)
svm-scale -r range1test>test.scale(-r 表read 将test的数据按同一range进行缩放)
说明:区间[0,1]和[-1,1]的效果是一样的,,仅仅是[0,1]的运算效率更高
3、寻找最优c、g參数
python grid.pytrain.scale(运算结束后,会供给最优參数c和g.比喻运算功效是2.0 1.0 96.8922,96.8922为交叉验证准确率)
4、使用最优參数进行训练
svm-train -c 2 -g1train.scale(会生成一个名为train.scale.model文件,文件參数说明见兴许增补说明.这里我们使用了默认核函数RBF。一般RBF是效果最好的)
5、拿训练功效进行測试
svm-predict test.scale train.scale.model test.predict(得预測功效test.predict文件以及正确率)
四、增补说明:
1、窜改交叉验证
svm-scale -l -1 -u 1 train >train.scale?
svm-train -v 6 train.scale(交叉验证是为了得到更好的參数)
python grid.pytrain.scale
svm-train -c 2 -g 2 train.scale
2、关于/libsvm-3.20/tools/中的easy.py和grid.py
安置完python和gnuplot后,将E:\Program Files\Python,F:\libsvm-3.20\windows,E:\Program Files\gnuplot\bin三个目录插手到系统路径里面,窜改上两个py文件里关于libsvm的路径和gnuplot的路径.
easy.py中:gnuplot_exe = r"e:\Program Files\gnuplot\bin\gnuplot.exe"
grid.py中:#svmtrain_pathname = r‘f:\libsvm-3.20\windows\svm-train.exe‘
? ? ? ? ?? self.gnuplot_pathname = r‘e:\Program Files\gnuplot\bin\gnuplot.exe‘
能够依照guide.pdf,用easy.py測试guide中的实例。guide中尝试数据链接:~cjlin/papers/guide/data/
3、关于model文件里的參数说明
svm_type c_svc ? (svc表用SVM作分类器,svr表用SVM作回归,c_svc 表用异常值惩办因子C进行不全然分类)
kernel_type rbf ? ? (径向基核,对付大大都情况都是一个较好的选择:d(x,y) = exp(-gamma*|x-y|2))
gamma 0.03125 (核函数的參数)
nr_class 2 (类别数)
total_sv 287 (撑持向量总数)
rho 102.102 (判决函数的常数项b)
label 1 0(类标签)
nr_sv 144 143(各个类中落在界限上的向量个数)
SV(SV以下枚举了全部的撑持向量)
8192 1:-1 2:-0.688314 3:0.595954 4:0.416735
...
4、svmscale.exe參数说明 "-l?lower : x scaling lower limit (default -1)\n"
"-u upper : x scaling upper limit (default +1)\n"
"-y y_lower y_upper : y scaling limits (default: no y scaling)\n"
"-s save_filename : save scaling parameters to save_filename\n"
"-r restore_filename : restore scaling parameters from restore_filename\n"
5、svmtrain.exe的參数列表