libsvm在matlab中使用

安装及测试过程见:
http://noalgo.info/363.html

以下是使用过程中总结:
1. svmtrain 和svmpredict 输入参数train_label train_mat test_label test_mat都是double型,因此调用时需要注意数据类型;

2.如果不知道test_label 要用一个矩阵代替,test_label不能缺省;

3.heart_scale 用load打开有问题时,可用libsvmread;

4.svmpredict 调用时,输出参数是3个:[predict_label accuracy dec_values] 或者1个 [predict_label] =svmpredict(test_label,test,model);
如果只写前两个可能会出现问题(2.86版本没有该问题,3.20会有)。

5.出现问题“Y must be a vector or a character array. pathtool
”是因为libsvm库文件不在当前目录下,解决方法:进行安装的第4步。

6.libsvm可以对多类进行分类,采取的策略为“一对一”,即:K类会有N = (K-1)*K/2个SVM分类器,对样本N个分类器都进行分类,会有N个分类结果,对分类结果中的类别进行统计,出现次数最多的类别为样本类别。(http://blog.csdn.net/aalbertini/article/details/6561819)

7.libsvm_options中”-b 1”参数的使用:
测试数据及程序:

%训练及测试数据
trainx=[-5,4;-4,5;5,4;4,5;-5,-5;-4,-5;6,-5;5,-6];
trainy=[1;1;2;2;3;3;4;4];
testx=[-6,5;7,4;-7,6;7,5;-100,-100];
testy=[1;2;3;4;3];

%训练程序
model = svmtrain(trainy,trainx,'-c 2 -g 0.02 -t 1 ');%未指定 -b 1
model = svmtrain(trainy,trainx,'-c 2 -g 0.02 -t 1 -b 1');%指定 -b 1

%分类程序
[l a p] = svmpredict(testy,testx,model); %未指定 -b 1
[l a p] = svmpredict(testy,testx,model,'-b 1'); %指定 -b 1

7.1 svmtrain(…)中的应用:
<1>未指定“-b 1” 时,训练得到的model
libsvm在matlab中使用_第1张图片
<2>指定“-b 1” 时,训练得到的model
libsvm在matlab中使用_第2张图片
对比可知,训练时,如果未指定“-b 1”训练模型结构体中,ProbA和ProbB为空,指定时,为K*1的列向量,(K为训练样本类别数)
<3>ProbA和ProbB作用
如果svmtrain的libsvm_options中未指定 -b 1,在svmpredict中的libsvm_options参数不能指定“-b 1”,如果指定会出现以下提示:
这里写图片描述
下面会分析”-b 1“的作用。
7.2 svmpredict(…)中的应用:
svmpredict有三个返回值:
-predicted_label:第一个返回值,表示样本的预测类标号。
-accuracy:第二个返回值,一个3*1的数组,表示分类的正确率、回归的均方根误差、回归的平方相关系数。
-decision_values/prob_estimates:第三个返回值,一个矩阵包含决策的值或者概率估计。对于n个测试样本、k类的问题,如果指定“-b 1”参数,输出为概率估计,是n x k的矩阵,每一行表示这个样本分别属于每一个类别的概率;如果没有指定“-b 1”参数,输出为决策值,是n x k*(k-1)/2的矩阵,每一行表示k(k-1)/2个二分类SVM的预测结果。
<1>指定“-b 1” 时,概率估计prob_estimates:
libsvm在matlab中使用_第3张图片
从测试样本类别标签l中可以看出,测试样本最终类别为概率估计最大值对应类别。
<2>未指定“-b 1” 时,决策值decision_values:
libsvm在matlab中使用_第4张图片
训练样本有4类,多类采用”一对一“策略,因此由6个二类SVM,最终类别归于类别投票中,出现次数最多的一类,下面对投票过程进行分析:
决策值矩阵列数为6,每列表示一个二类SVM的决策值:
libsvm在matlab中使用_第5张图片
如图,第一列是第一类和第二类SVM的决策值value,value>0,则表示在第一类和第二类比较判别中,样本属于第一类,value<0表示属于第二类;其他列可同理分析,以第5行数据分析投票结果:
libsvm在matlab中使用_第6张图片
从票数统计看,第三类得票最多,因此测试样本5属于第三类。

注:
1. SVM理论的通俗讲解:
http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html
2.libsvm讲解:
http://blog.csdn.net/flydreamgg/article/details/4466023

你可能感兴趣的:(matlab,libsvm,B,b-1)