接上一回文件解压至D:\svm_tools\libsvm-3.31。 路径随着自己的喜好
环境准备
如上图所示,在使用libsvm的时候 需要提前准备好的环境 python与gnuplot。
首先准备数据集,因为原来的libsvm当中已经有一个heart_scale数据集。可以直接拿来使用测试。那我这里为了从无到有就直接去UCI 里面获取,一个新的数据集
访问地址:http://archive.ics.uci.edu/ml/index.php
UCI是符合机器学习算法的一个数据集,感兴趣的可以去百度
在这里我们取iris的数据集,
点上一步,进入下一步
直接下载
准备好数据集之后。因为直接下载的数据还不能直接用来分类,我们打开数据集看看
libSVM的数据格式 前面四项是属性,最后一项是分类标签。svm当中用数字来替代。
Label 1:value 2:value ….
Label:是类别的标识,比如train.model中提到的1 -1,你可以自己随意定,比如-10,0,15。当然,如果是回归,这是目标值,就要实事求是了。
Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开
打开excel 进行标签替换,Iris-setosa换成1、Iris-versicolor换成2、Iris-virginica换成3.
然后进行数据整理,教程有很多百度即可。
以上数据工作准备完成之后。可以进入 D:\svm_tools\libsvm-3.31\tools 路径(根据自己的安装路径)
使用checkdata.py 来检验数据
数据表示没有问题
进入正题
svmscale的用法
svmscale是用来对原始样本进行缩放的,范围可以自己定,一般是[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格式。
svm-scale.exe iris > iris_out
默认情况下,只需要输入要缩放的文件名就可以了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/128d8c766a17458ab5b90463715f6422.png)
这时生成归一化的数据集
回到D:\svm_tools\libsvm-3.31\tools
使用 subset.py 进行一个数据的分类
Usage: subset.py [options] dataset number [output1] [output2]
This script selects a subset of the given data set.
options:
-s method : method of selection (default 0)
0 – stratified selection (classification only)
1 – random selection
output1 : the subset (optional)
output2 : the rest of data (optional)
If output1 is omitted, the subset will be printed on the screen.
生成两个数据
进行训练集的一个模型
svm-train.exe trainData trainData.model
trainData ——是目录下的已经存在的样本文件,要换成自己的文件,只需改成自己的文件名就可以了
train.model ——是创建的结果文件,保存了训练后的结果
其中,#iter为迭代次数,nu 是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV 为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。
在目录下,还可以看到产生了一个train.model文件,可以用notepad++打开,记录了训练后的结果。
svm_type c_svc //所选择的svm类型,默认为c_svc
kernel_type rbf //训练采用的核函数类型,此处为RBF核
gamma 0.0769231 //RBF核的参数γ
nr_class 2 //类别数,此处为两分类问题
total_sv 132 //支持向量总个数
rho 0.424462 //判决函数的偏置项b
label 1 -1 //原始文件中的类别标识
nr_sv 64 68 //每个类的支持向量机的个数
SV //以下为各个类的权系数及相应的支持向量
到现在,已经构建了一个模型,下一节继续讲解怎么玩测试。