介绍
LIBSVM在MATLAB下只有四个函数,分别时:libsvmread,Libsvmwrite,svmtrain,svmpredict。
函数说明及参数详解
libsvmread函数用于读取数据 。
用法
[label,instance]=libsvmread('libsvm_data');
libsvmwrite写函数,就是把已知数据存起来 。
用法
libsvmwrite('libsvm_data.mat',label, instance);
要求instance为稀疏矩阵。
svmtrain训练函数,训练数据产生模型的,参数options可以省略,但是默认的参数可能无法得到较好的分类或回归效果。
model = svmtrain(label,instance,options)
options 参数
options的参数设置可以按照 SVM 的类型和核函数所支持的参数进行任意组合。如果设置的参数在函数或 SVM 类型中没有或者错误将使用默认设置。
-s svm类型:SVM模型设置类型(默认值为0)
0:C - SVC
1:nu - SVC
2:one - class SVM
3: epsilon - SVR
4: nu - SVR
- t 核函数类型:核函数设置类型(默认值为2)
0:线性核函数 u'v
1:多项式核函数(r *u'v + coef0)^degree
2:RBF 核函数 exp( -r|u - v|^2)
3:sigmiod核函数 tanh(r * u'v + coef0)
- d degree:核函数中的 degree 参数设置(针对多项式核函数,默认值为3)
- g r(gama):核函数中的gama参数设置(针对多项式/sigmoid 核函数/RBF/,默认值为属性数目的倒数)
- r coef0:核函数中的coef0参数设置(针对多项式/sigmoid核函数,默认值为0)
- c cost:设置 C - SVC,epsilon - SVR 和 nu - SVR的参数(默认值为1)
- n nu:设置 nu-SVC ,one - class SVM 和 nu - SVR的参数
- p epsilon:设置 epsilon - SVR 中损失函数的值(默认值为0.1)
- m cachesize:设置 cache 内存大小,以 MB 为单位(默认值为100)
- e eps:设置允许的终止阈值(默认值为0.001)
- h shrinking:是否使用启发式,0或1(默认值为1)
- wi weight:设置第几类的参数 C 为 weight * C(对于 C - SVC 中的 C,默认值为1)
- v n:n - fold 交互检验模式,n为折数,必须大于等于2
options参数使用例子
% 建立分类模型
model = svmtrain(label,instance,'-s 0 -t 2 -c 1.2 -g 2.8');
svmpredict训练函数,使用训练的模型去预测数据类型。
[predict_label,accuracy,dec_values] = svmpredict(test_label,test_instance,model)
输出为三个参数,预测的类型,准确率,评估值。
分类测试
测试数据使用 LIBSVM 自带的 heart_scale.mat 数据(共计270个样本,每个样本有13个属性),进行测试。3.23版本的LIBSVM提供的heart_scale数据无法使用libsvmread直接打开,我们使用MATLAB自带函数load加载数据即可。
heart_scale数据讲解
LIBSVM 自带的 heart_scale数据共计270个样本,每个样本有13个属性。
测试代码如下:
clc;
clear;
load heart_scale;
model = svmtrain(heart_scale_label,heart_scale_inst)
[predict_label,accuracy,dec_values] = svmpredict(heart_scale_label,heart_scale_inst,model)
模型训练信息
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
其中,
#iter 为迭代次数,
nu 为options参数中的介绍,
obj 为 SVM 文件转换为的二次规划求解得到的最小值,
rho 为判决函数的常数项 b ,
nSV 为支持向量个数,
nBSV 为边界上的支持向量个数,
Total nSV 为支持向量总个数。
模型信息
model =
包含以下字段的 struct:
Parameters: [5×1 double]
nr_class: 2
totalSV: 132
rho: 0.4245
Label: [2×1 double]
sv_indices: [132×1 double]
ProbA: []
ProbB: []
nSV: [2×1 double]
sv_coef: [132×1 double]
SVs: [132×13 double]
model.Parameters意义
>> model.Parameters
ans =
0
2.0000
3.0000
0.0769
0
从上至下意义:
- s svm类型:SVM模型设置类型(默认值为0)
- t 核函数类型:核函数设置类型(默认值为2)
- d degree:核函数中的 degree 参数设置(针对多项式核函数,默认值为3)
- g r(gama):核函数中的gama参数设置(针对多项式/sigmoid 核函数/RBF/,默认值为属性数目的倒数)
- r coef0:核函数中的coef0参数设置(针对多项式/sigmoid核函数,默认值为0)
model.Label model.nr_class
model.label 表示数据集中类别的标签,这是[1 -1]
model.nr_class 表示数据集有多少个类别,这里是2个
model.totalSV model.nSV
model.totalSV 代表总共的支持向量的数目
model.nSV 代表每类样本的支持向量的数目,model.nSV 所代表的顺序是和 model.label 相对应。
model.sv_coef model.SVs model.rho
model.sv_coef,是支持向量在决策函数中的系数;
model.SVs,是支持向量;
model.rho,是决策函数中的常数项的相反数。
accuracy
svmpredict函数,返回参数accuracy是分类准确率,分类问题中用到的参数指标。
predict_label是,对输入数据进行分类预测的类别标签。
完
对于其中的不足或有新的体会届时会重新更新。