LIBSVM工具箱的主要函数为 svmtrain 和 svmpredict ,其调用格式为:
model = svmtrain(train_label,train_data,options);<br>
[predict_label,accuracy/mse,dec_value] = svmpredict(test_label,test_data,model);
2.2 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
2.3 分类模型 model 解析
测试数据使用 LIBSVM 工具箱自带的 heart_scale.mat 数据(共计270个样本,每个样本有13个属性)。测试代码如下:
clear;
clc;
close all;
% 首先载入数据
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;
% 建立分类模型
model = svmtrain(label,data,'-s 0 -t 2 -c 1.2 -g 2.8');
% 利用建立的模型看其在训练集合上的分类效果
[PredictLabel, accuracy, dec_values] = svmpredict(label,data, model);<br>accuracy<br><br>% 分类模型model解密<br>model<br>Parameters = model.Parameters<br>Label = model.Label<br>nr_class = model.nr_class<br>totalSV = model.totalSV<br>nSV = model.nSV
1)svmtrain 的输出 model:
model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
sv_indices: [259x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
2) model.Paramenters %参数表
Parameters =
0
2.0000
3.0000
2.8000
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 表示数据集职工有多少个类别
4)model.totalSV model.nSV
model.total SV 代表总共的支持向量机的数目,这里一共259个。
model.nSV 代表每类样本的支持向量的数目,model.nSV 所代表的顺序是和 model.label 相对应。 标签为1的样本118个,标签为-1的样本 141 个。
5)model.sv_coef model.SVs model.rho
sv_coef: [259x1 double]
SVs: [259x13 double]<br> model.rho = 0.0514
sv_coef,承装的是259个支持向量在决策函数中的系数;
model.SVs 承装的是259个支持向量;
model.rho = 0.0514 是决策函数中的常数项的相反数。
6) accuracy
返回参数accuracy 从上到下的意义依次是:
分类准确率,分类问题中用到的参数指标;
平均平方误差( mean squared error,MSE),回归问题中用到的参数指标;
平方相关系数( squared correlation coefficient ,r2),回归问题中用到的参数指标
3. 决策函数
function plabel = DecisionFunction(x,model)
gamma = model.Parameters(4);
RBF = @(u,v)( exp(-gamma.*sum( (u-v).^2) ) );
len = length(model.sv_coef);
y = 0;
for i = 1:len
u = model.SVs(i,:);
y = y + model.sv_coef(i)*RBF(u,x);
end
b = -model.rho;
y = y + b;
if y >= 0
plabel = 1;
else
plabel = -1;
end