Libsvm官网 https://www.csie.ntu.edu.tw/~cjlin/libsvm/
下载后将其解压到本地,这里,我的本地路径为:
C: \Anaconda3\Lib\sit-packages\libsvm
使用svm_train方法,传入labels, datas必要的参数,返回model.也有两种方案:
这里的model可以是上一步返回的model,或者从外部文件导入的model,预测的方法是svm_predict(testClassfier, testSeqVector,model),参数集分别是测试集实际labels,测试数据特征向量,训练模型,当然还有一个可选的参数就是predict的是否需要评估概率的参数-b 0 or 1, 默认为0.例如p_label, p_acc, p_val = svm_predict(y, x, m, ‘-b 1’),这里返回了3个值,分别是预测的label列表([]),准确率p_acc()用于分类的准确率,回归的mean-squared erro 和squared correlation coefficient.
Function: avm_train #三种训练写法
There are three ways to call svm_train()
Usage; svm-train[options] training_set_file[model_file]
options:
-s svm_type : set type of SVM (default 0) #选择哪一种svm
0 :C-SVC(multi-class classification):使用乘法因子(cost)的处理噪声的多分类器
1 :nu-SVC (multi-class classification):按照错误样本比例处理噪声的多分类器
2 :one-class SVM:一类支持向量机
3:epsilon-SVC(regression)epsilon-支持向量回归
4 :nu-SVC (multi-regression)
-t kernel_type: set type of kernel function(default 2) #核函数类型
0 – linear : u’v 线性核
1 – polynomial: (gammauv +coef0)^degree 多项式核
2 – radial basis function : exp(-gamma|u-v|^2) RBF 径向基核/高斯核
3 – sigmoid: tanh(gamma*u’*v +coef0) S型核
4 – precomputed kernel (kernel values in training_set_file) 预计算核
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/ num_features)
- r coef0 :set coef0 in kernel function (default 0)
-c cost: set the parameter C of C-SVC, epsilon-SVR, and nu-SVR(default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR(default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)调整内缓冲区大小以MB为单位
-e epasilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)是否使用收缩启发式算法
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1(default 1)是否估算正确概率,取值为0或者-1
-wi weight : set the parameter C of class i to weight*C for C-SVC (default 1) 调整C-SVC中第i个特征的Cost参数
v n : n-fold cross validation mode 交叉验证
q : quiet mode (no outputs) 静默模式
通过一定的过程,可以提高预测的准确率
1) 按照LIBSVM软件包所要求的格式准备数据集;LIBSVM的数据格式为: Label 1:value 2:value … Label为标签,1 2 3为第几个特征,value是对应的特征值,数据之间用空格隔开,当特征值为0时, 可以省略(即序号可以不连续,默认0)。生成libsvm所用的数据格式,一种方法是FormatDataLibsvm.xls, 第二种方法是.txt文件转换。
2) 对数据进行简单的缩放操作;
3) 考虑选用RBF 核函数 ;
4) 采用交叉验证选择最佳参数C与g ;
5) 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;
6) 利用获取的模型进行测试与预测。
{C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR}
{LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED}
即:线性、多项式、径向基、神经元的非线性作用函数、用户自定义
我们需要先选出首选的核函数,然后选择惩罚因子C和核参数。
使用python和Gnuplot来对参数进行寻优(网格搜索法Grid-Search)
SVM适用于二分类问题,若遇到多分类问题,需要采用多分类算法。
vmscale是用来对原始样本进行缩放的,范围可以自己定,一般是[0,1]或[-1,1]。缩放的目的主要是
1)防止某个特征过大或过小,从而在训练中起的作用不平衡;
2)为了计算速度。因为在核计算中,会用到内积运算或exp运算,不平衡的数据可能造成计算困难。
用法: svmscale [-l lower] [-u upper]
[-y y_lower y_upper]
[-s save_filename]
[-r restore_filename] filename
其中,[ ]中都是可选项:
-l :设定数据下限;lower:设定的数据下限值,缺省为-1
-u:设定数据上限;upper:设定的数据上限值,缺省为 1
-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;
-s: save_filename:表示将缩放的规则保存为文件save_filename;
-r :restore_filename:表示将按照已经存在的规则文件restore_filename进行缩放;
filename:待缩放的数据文件,文件格式按照libsvm格式。
默认情况下,只需要输入要缩放的文件名就可以了:比如(已经存在的文件为test.txt),这时,test.txt中的数据已经变成[-1,1]之间的数据了。但是,这样原来的数据就被覆盖了,为了让规划好的数据另存为其他的文件,我们用一个dos的重定向符 > 来另存为(假设为out.txt): svmscale test.txt > out.txt
运行后,我们就可以看到目录下多了一个out.txt文件,那就是规范后的数据。假如,我们想设定数据范围[0,1],并把规则保存为test.range文件: svmscale –l 0 –u 1 –s test.range test.txt > out.txt,这时,目录下又多了一个test.range文件,可以用记事本打开,下次就可以用-r test.range来载入。
注意: easy.py与先grid.py再输入代码结果相同
文件easy.py对样本文件做了“一条龙服务”,从参数优选,到文件预测,因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用,因此,运行时需要保证这些文件的路径都要正确,还要样本文件和预测文件
1) 打开easy.py,修改几个路径 #example for windows(已修改)
2) 运行cmd, 使用cd,定位到easy.py的路径 cd Anaconda3\Lib\site-packages\libsvm\tools
3) 输入命令 easy.py空格+训练集+空格+测试集