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”参数的使用:
测试数据及程序:
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
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
相关文章推荐
- matlab如何求矩阵行列式
- Matlab--函数
- matlab 图片批量读取
- 在matlab中进行遥感影像地理坐标的相互转换
- 在matlab中实现遥感影像和shp文件的结合显示
- vs2008中调用matlab3013a程序配置方法
- matlab cosd,cos,acos,acosd
- matlab图像处理 笔记
- matlab中find函数的使用
- Caffe+Ubunt14.04+Cuda7.0+Opencv3.0+MKL+Matlab2014a安装教程
- VS2010和Matlab2012b混合编程 配置详解
- MATLAB 修改启动路径
- MATLAB图像函数 块和邻域的处理
- Matlab稀疏矩阵
- Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方
- Matlab工具箱下载地址汇总
- MATLAB中的ind2vec和vec2ind函数
- Latex 中插入 Matlab 代码
- Matlab 高斯分布 均匀分布 以及其他分布 的随机数
- MATLAB 概率统计