model = svmtrain(label,data);
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)
- data = [176 70;
- 180 80;
- 161 45;
- 163 47];
- label = [1;1;-1;-1];
-
- model = svmtrain(label,data);
-
- testdata = [190 85];
- testdatalabel = -1;
-
- [predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
- predictlabel
运行结果如下:
- Accuracy = 0% (0/1) (classification)
- predictlabel =
- 1
好,通过上面的讲解,不知道诸位看官对于利用libsvm进行分类是否有了一定了解【谁要是这么通俗的例子还搞不清楚怎么使用libsvm进行分类,那我真无语啦】,下面使用libsvm工具箱本身带的测试数据heart_scale来实际进行一下测试:
- %% HowToClassifyUsingLibsvm
- % by faruto @ faruto's Studio~
- % http://blog.sina.com.cn/faruto
- % Email:faruto@163.com
- % http://www.matlabsky.com
- % http://www.mfun.la
- % http://video.ourmatlab.com
- % last modified by 2010.12.27
- %% 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');
-
- % 分类模型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;
运行结果:
- 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.040873 seconds.
- >>
上面的代码基本我不想多说什么。
只是说一下参数输入的意义:
-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)
更多关于libsvm 参数的说明请看
libsvm 参数说明【中英文双语版本】
http://www.matlabsky.com/thread-12380-1-1.html
还有关于建立的分类模型model
- 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]
因为好多朋友反映说,比如想得到支持向量,还有model中的一些参看看不懂等等等等一些列问题,会在后面的
分类模型model解密详解中说明
利用libsvm-mat建立分类模型model参数解密【by faruto】
http://www.matlabsky.com/thread-12649-1-1.html
所以也希望诸位看官尤其是对svm感兴趣的朋友多多关注我。O(∩_∩)O~
如果对于标签设置问题您还没有搞懂可以再看看这个:
【转】Matlab中使用libsvm进行分类预测时的标签问题再次说明
http://www.matlabsky.com/thread-12396-1-1.html
更多关于SVM的东西请看:
关于SVM的那点破事[长期更新整理 by faruto]
http://www.matlabsky.com/thread-10966-1-1.html
reference:http://blog.youkuaiyun.com/timidsmile/article/details/9316743