主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数的意义以及如果通过model得到相应模型的表达式,这里主
要以分类问题为例子。
下面我们就看看 model这个结构体里面的各种参数的意义都是神马,model如下:
1
2
3
4
5
6
7
8
9
10
11 |
|
model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
|
model.Parameters
我们先来看一下model.Parameters里面承装的都是什么:
>> model.Parametersans =
0重要知识点:
model.Parameters参数意义从上到下依次为:Libsvm中参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接
受该参数;如果应有的参数设置不正确,参数将采用默认值。
model.Label model.nr_class
>> model.Label
ans =model.totalSV model.nSV
>> model.totalSV关于这两个参数这里不做介绍,使用-b参数时才能用到,用于概率估计。
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)最终的决策函数为:
在由于我们使用的是RBF核函数(前面参数设置 –t 2),故这里的决策函数即为:
其中|| x-y ||是二范数距离 ;
这里面的
b就是-model.rho(一个标量数字);
b = -model.rho;
n代表支持向量的个数即 n = model.totalSV(一个标量数字);
对于每一个i:
wi =model.sv_coef(i); 支持向量的系数(一个标量数字)
xi = model.SVs(i,:) 支持向量(1*13的行向量)
x 是待预测标签的样本 (1*13的行向量)
gamma 就是 -g 参数
好的下面我们通过model提供的信息自己建立上面的决策函数如下:
1
2
3 4
5
6 7 8 9 10
11
12 13 14 15 16 17 18 19 20 21 |
%% DecisionFunction
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 |
1
2
3
4
5
6 |
%%
plable = zeros(270,1);
for i = 1:270
x = data(i,:);
plabel(i,1) = Decision(x,model);
end
|
%% 验证自己通过决策函数预测的标签和svmpredict给出的标签相同
flag = sum(plabel == PredictLabel)
over = 1;
最终可以看到 flag = 270 ,即自己建立的决策函数是正确的,可以得到和svmpredict得到的一样的样本的预测标签,事实上svmpredict底层大体也就是
这样实现的。
这里面要说一下返回参数accuracy的三个参数的意义。