SVM实现多分类的程序基础工作(二)——通过一个简单libsvm例子迈入libsvm学习的大门
2012-12-09 10:51
926 查看
在SVM实现多分类的程序基础工作(一)中概要的介绍了为何要安装libsvm,那安装了libsvm之后要干嘛呢?给个例子简单的说明libsvm应用的方便性。我们用libsvm自带的测试数据heart_scale来进行训练:
%% HowToClassifyUsingLibsvm by faruto @ faruto's Studio~
%% a litte clean work
tic;
close all;
clear;
clc;
format compact;
%%
% 首先载入数据
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;
% 选取前200个数据作为训练集合,后70个数据作为测试集合
ind = 200;
traindata = data(1:ind,:);
trainlabel = label(1:ind,:);
testdata = data(ind+1:end,:);
testlabel = label(ind+1:end,:);
% 利用训练集合建立分类模型
model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');
%参数输入的意义:
% -s svm类型:SVM设置类型(默认0)
% 0 -- C-SVC
% 1 --v-SVC
%2 – 一类SVM
%3 -- e -SVR
% 4 -- v-SVR
% -t 核函数类型:核函数设置类型(默认2)
% 0 – 线性:u'v
% 1 – 多项式:(r*u'v + coef0)^degree
% 2 – RBF函数:exp(-r|u-v|^2)
% 3 –sigmoid:tanh(r*u'v + coef0)
% -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
% -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
% 分类模型model解密
model
Parameters = model.Parameters
Label = model.Label
nr_class = model.nr_class
totalSV = model.totalSV
nSV = model.nSV
% 利用建立的模型看其在训练集合上的分类效果
[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);
% 预测测试集合标签
[ptest,acctest] = svmpredict(testlabel,testdata,model);
toc;
把此程序放入matlab新建的.m文件运行,那么你将会看到如下结果:
model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 197
rho: 0.0583
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [197x1 double]
SVs: [197x13 double]
Parameters =
0
2.0000
3.0000
2.8000
0
Label =
1
-1
nr_class =
2
totalSV =
197
nSV =
89
108
Accuracy = 99.5% (199/200) (classification)
Accuracy = 68.5714% (48/70) (classification)
Elapsed time is 0.209811 seconds.
至此,我们完成了最简单的libsvm分类操作,从上来看使用libsvm进行分类很简单,只需要有属性矩阵和标签,然后就可以建立分类模型(model),然后利用得到的这个model进行分类预测了。上例中的属性矩阵就相当于libsvm自带的测试数据heart_scale中的heart_scale_inst;而标签就是libsvm自带的测试数据heart_scale中的
heart_scale_label。通过此实验更进一步的了解了libsvm工具的基本用法,这为libsvm的进一步学习打下了基础。
%% HowToClassifyUsingLibsvm by faruto @ faruto's Studio~
%% a litte clean work
tic;
close all;
clear;
clc;
format compact;
%%
% 首先载入数据
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;
% 选取前200个数据作为训练集合,后70个数据作为测试集合
ind = 200;
traindata = data(1:ind,:);
trainlabel = label(1:ind,:);
testdata = data(ind+1:end,:);
testlabel = label(ind+1:end,:);
% 利用训练集合建立分类模型
model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');
%参数输入的意义:
% -s svm类型:SVM设置类型(默认0)
% 0 -- C-SVC
% 1 --v-SVC
%2 – 一类SVM
%3 -- e -SVR
% 4 -- v-SVR
% -t 核函数类型:核函数设置类型(默认2)
% 0 – 线性:u'v
% 1 – 多项式:(r*u'v + coef0)^degree
% 2 – RBF函数:exp(-r|u-v|^2)
% 3 –sigmoid:tanh(r*u'v + coef0)
% -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
% -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
% 分类模型model解密
model
Parameters = model.Parameters
Label = model.Label
nr_class = model.nr_class
totalSV = model.totalSV
nSV = model.nSV
% 利用建立的模型看其在训练集合上的分类效果
[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);
% 预测测试集合标签
[ptest,acctest] = svmpredict(testlabel,testdata,model);
toc;
把此程序放入matlab新建的.m文件运行,那么你将会看到如下结果:
model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 197
rho: 0.0583
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [197x1 double]
SVs: [197x13 double]
Parameters =
0
2.0000
3.0000
2.8000
0
Label =
1
-1
nr_class =
2
totalSV =
197
nSV =
89
108
Accuracy = 99.5% (199/200) (classification)
Accuracy = 68.5714% (48/70) (classification)
Elapsed time is 0.209811 seconds.
至此,我们完成了最简单的libsvm分类操作,从上来看使用libsvm进行分类很简单,只需要有属性矩阵和标签,然后就可以建立分类模型(model),然后利用得到的这个model进行分类预测了。上例中的属性矩阵就相当于libsvm自带的测试数据heart_scale中的heart_scale_inst;而标签就是libsvm自带的测试数据heart_scale中的
heart_scale_label。通过此实验更进一步的了解了libsvm工具的基本用法,这为libsvm的进一步学习打下了基础。
相关文章推荐
- SVM实现多分类的程序基础工作(一)——安装libsvm以及libsvm和matlab自带的svm的区别
- SVM实现多分类的程序基础工作(一)——安装libsvm以及libsvm和matlab自带的svm的区别
- 在SVM实现多分类的程序基础工作
- 通过一个简单的例子学习编译器是如何执行程序的
- SVM实现多分类的程序基础工作(三)——基于纠错编码的SVM多类分类算法和基于二叉树的多类SVM算法的基本思想
- linux两个程序通过共享内存通信的一个简单例子
- 基础学习:控制台接收输入字符与重定向输出流实现程序日志两例子的编程
- 【tcp-ip学习总结】基础UDP实现的简单通信功能小程序
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Git 分支 - 分支的新建与合并 分支的新建与合并 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创
- 网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)
- JBPM学习(一):实现一个简单的工作流例子全过程
- 学习Java基础的一些知识(2)实现一个Java程序的过程
- JBPM学习(一):实现一个简单的工作流例子全过程
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- Tensorflow 实现迁移学习的一个简单例子
- 增强学习系列之(二):实现一个简单的增强学习的例子
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的