libsvm 训练后的模型参数讲解
2016-06-20 18:48
357 查看
主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数的意义以及如果通过model得到相应模型的表达式,这里主
要以分类问题为例子。
下面我们就看看 model这个结构体里面的各种参数的意义都是神马,model 如下:
model.Parameters
我们先来看一下model.Parameters里面承装的都是什么:
>> model.Parameters
ans =
0
2.0000
3.0000
2.8000
0
重要知识点:
model.Parameters参数意义从上到下依次为:
-s svm类型:SVM设置类型(默认0)
-t 核函数类型:核函数设置类型(默认2)
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
即在本例中通过model.Parameters我们可以得知 –s 参数为0;-t 参数为 2;-d 参数为3;-g 参数为2.8(这也是我们自己的输入);-r 参数为0。
关于libsvm参数的一点小说明:
Libsvm中参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。
model.Label model.nr_class
>> model.Label
ans =
1
-1
>> model.nr_class
ans =
2
重要知识点:
model.Label表示数据集中类别的标签都有什么,这里是 1,-1;
model.nr_class表示数据集中有多少类别,这里是二分类。
model.totalSV model.nSV
>> model.totalSV
ans =
259
>> model.nSV
ans =
118
141
重要知识点:
model.totalSV代表总共的支持向量的数目,这里共有259个支持向量;
model.nSV表示每类样本的支持向量的数目,这里表示标签为1的样本的支持向量有118个,标签为-1的样本的支持向量为141。
注意:这里model.nSV所代表的顺序是和model.Label相对应的。
model.ProbA model.ProbB
关于这两个参数这里不做介绍,使用-b参数时才能用到,用于概率估计。
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
model.sv_coef model.SVs model.rho
sv_coef: [259x1 double]
SVs: [259x13 double]
model.rho = 0.0514
重要知识点:
model.sv_coef是一个259*1的矩阵,承装的是259个支持向量在决策函数中的系数;
model.SVs是一个259*13的稀疏矩阵,承装的是259个支持向量。
model.rho是决策函数中的常数项的相反数(-b)
最终的决策函数为:
在由于我们使用的是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提供的信息自己建立上面的决策函数如下:
有了这个决策函数,我们就可以自己预测相应样本的标签了:
%% 验证自己通过决策函数预测的标签和svmpredict给出的标签相同
flag = sum(plabel == PredictLabel)
over = 1;
最终可以看到 flag = 270 ,即自己建立的决策函数是正确的,可以得到和svmpredict得到的一样的样本的预测标签,事实上svmpredict底层大体也就是这样实现的。这里面要说一下返回参数accuracy的三个参数的意义。
重要的知识点:
返回参数accuracy从上到下依次的意义分别是:
分类准率(分类问题中用到的参数指标)
平均平方误差(MSE (mean squared error)) [回归问题中用到的参数指标]
平方相关系数(r2 (squared correlation coefficient))[回归问题中用到的参数指标]
转载自:http://blog.sina.com.cn/s/blog_6646924501018fqc.html
要以分类问题为例子。
下面我们就看看 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
ans =
0
2.0000
3.0000
2.8000
0
重要知识点:
model.Parameters参数意义从上到下依次为:
-s svm类型:SVM设置类型(默认0)
-t 核函数类型:核函数设置类型(默认2)
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)
-r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
即在本例中通过model.Parameters我们可以得知 –s 参数为0;-t 参数为 2;-d 参数为3;-g 参数为2.8(这也是我们自己的输入);-r 参数为0。
关于libsvm参数的一点小说明:
Libsvm中参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。
model.Label model.nr_class
>> model.Label
ans =
1
-1
>> model.nr_class
ans =
2
重要知识点:
model.Label表示数据集中类别的标签都有什么,这里是 1,-1;
model.nr_class表示数据集中有多少类别,这里是二分类。
model.totalSV model.nSV
>> model.totalSV
ans =
259
>> model.nSV
ans =
118
141
重要知识点:
model.totalSV代表总共的支持向量的数目,这里共有259个支持向量;
model.nSV表示每类样本的支持向量的数目,这里表示标签为1的样本的支持向量有118个,标签为-1的样本的支持向量为141。
注意:这里model.nSV所代表的顺序是和model.Label相对应的。
model.ProbA model.ProbB
关于这两个参数这里不做介绍,使用-b参数时才能用到,用于概率估计。
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
model.sv_coef model.SVs model.rho
sv_coef: [259x1 double]
SVs: [259x13 double]
model.rho = 0.0514
重要知识点:
model.sv_coef是一个259*1的矩阵,承装的是259个支持向量在决策函数中的系数;
model.SVs是一个259*13的稀疏矩阵,承装的是259个支持向量。
model.rho是决策函数中的常数项的相反数(-b)
最终的决策函数为:
在由于我们使用的是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 |
flag = sum(plabel == PredictLabel)
over = 1;
最终可以看到 flag = 270 ,即自己建立的决策函数是正确的,可以得到和svmpredict得到的一样的样本的预测标签,事实上svmpredict底层大体也就是这样实现的。这里面要说一下返回参数accuracy的三个参数的意义。
重要的知识点:
返回参数accuracy从上到下依次的意义分别是:
分类准率(分类问题中用到的参数指标)
平均平方误差(MSE (mean squared error)) [回归问题中用到的参数指标]
平方相关系数(r2 (squared correlation coefficient))[回归问题中用到的参数指标]
转载自:http://blog.sina.com.cn/s/blog_6646924501018fqc.html
相关文章推荐
- unity3D学习—坦克大战(一)
- centos git安装教程
- python操作Excel读写--使用xlrd
- h5自动生成工具
- PowerDesigner15.1给自定义架构表字段添加MS_Description出错
- 自己动手写拖动滑块
- listviewer
- VLC的ACtiveX插件使用方法
- thinkphp中url路由
- AngularJs----ng-class
- logstash升级kafka插件
- HTML状态码大全(301,404,500等)
- SharePreferenceDemo
- html5的在ie6,7,8兼容
- Android 5.1长按电源键添加重启功能
- mysql 的触发器
- [Android]Android中人脸识别接口的使用
- eclipse配置tomcat,访问http://localhost:8080出现404错误
- 【OpenGL/ES】 第05讲 3D数学-旋转矩阵的推导
- linux 安装ffmpeg 非yasm yum安装