您的位置:首页 > 编程语言 > MATLAB

libsvm在matlab中使用

2015-07-27 11:14 162 查看
安装及测试过程见:

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个分类结果,对分类结果中的类别进行统计,出现次数最多的类别为样本类别。(/article/8625373.html)

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



<2>指定“-b 1” 时,训练得到的model



对比可知,训练时,如果未指定“-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:



从测试样本类别标签l中可以看出,测试样本最终类别为概率估计最大值对应类别。

<2>未指定“-b 1” 时,决策值decision_values:



训练样本有4类,多类采用”一对一“策略,因此由6个二类SVM,最终类别归于类别投票中,出现次数最多的一类,下面对投票过程进行分析:

决策值矩阵列数为6,每列表示一个二类SVM的决策值:



如图,第一列是第一类和第二类SVM的决策值value,value>0,则表示在第一类和第二类比较判别中,样本属于第一类,value<0表示属于第二类;其他列可同理分析,以第5行数据分析投票结果:



从票数统计看,第三类得票最多,因此测试样本5属于第三类。

注:

1. SVM理论的通俗讲解:

http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html

2.libsvm讲解:

/article/1906344.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: