在MATLAB中使用libSVM的方法

在MATLAB中使用libSVM的方法

libsvm库下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/

详解:http://www.matlabsky.com/thread-11925-1-1.html

安装libsvm方法,参考博客:http://blog.csdn.net/abcjennifer/article/details/7370177


先举一个栗子:

代码:


<span style="font-size:12px;"> clc,clear


%4个训练样本4*4,每个样本4条属性(特征)

train_data=[5.1 3.5 1.4 0.2;4.9 3.0 1.4 0.2;4.7 3.2 1.3 0.2;4.6 3.11.5 0.2];

%4个测试样本4*4,每个样本4条属性(特征)

test_data=[5.0 3.6 1.4 0.2;5.4 3.9 1.7 0.4;4.6 3.4 1.4 0.3;5.0 3.41.5 0.2];


train_labels=[1,1,2,2]';%训练样本标签4*1

test_labels=[1,1,1,1]';%测试样本标签4*1


model = svmtrain(train_labels, train_data);

[predict_label, accuracy,dec_values] =svmpredict(test_labels,test_data, model);

</span>

结果:

optimization finished, #iter = 2

nu = 1.000000

obj = -3.872840, rho = -0.009619

nSV = 4, nBSV = 4

Total nSV = 4

Accuracy = 75% (3/4) (classification)

1.分类问题处理整体正规流程


step1. 选定训练集和测试集 >>规范化 >> 特征提取

step2. 利用训练集训练分类器得到model

step3. 利用model对测试集进行预测

step4. 分类器性能评测[分类准确率的高低

2.svmtrain(… )  通过训练集来训练模型


函数:model= svmtrain(train_label, train_matrix, ['libsvm_options']);

       -train_label:

                    An m by 1 vector oftraining labels (type must be double).   标签数据应是m行1列的数据

       -train_matrix:

                   An m by n matrix of mtraining instances with n features.

                  It can be dense or sparse(type must be double).  训练数据应是m行n列,m表示样本数,n表示1个样本有n中属性

       -libsvm_options:

                  A stringof training options in the same format as that of LIBSVM.  是一个字符串如:'-c 2 -g 0.02 -t 2'

 

Options:可用的选项即表示的涵义如下:

       -ssvm类型:SVM设置类型(默认0)

                0 -- C-SVC(C-support vector classification)

                1 -- nu-SVC(nu-support vectorclassification)

                2 -- one-class SVM (distributionestimation)  一类SVM

                3 -- epsilon-SVR(epsilon-support vectorregression)

                4 -- nu-SVR (nu-support vectorregression)

  -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)

  -d  degree:核函数中的degree设置(针对多项式核函数)(默认3)

  -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/k)

  -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)

  -c cost:设置C-SVC,e-SVR和v-SVR的参数(损失函数)(默认1)

  -n  nu:设置v-SVC,一类SVM和v-SVR的参数(默认0.5)

  -p  p:设置e -SVR 中损失函数p的值(默认0.1)

  -m  cachesize:设置cache内存大小,以MB为单位(默认40)

  -e  eps:设置允许的终止判据(默认0.001)

  -h  shrinking:是否使用启发式,0或1(默认1)

  -wi  weight:设置第几类的参数C为weight?C(C-SVC中的C)(默认1)

  -v  n: n-fold交互检验模式,n为fold的个数,必须大于等于2

        其中-g选项中的k是指输入数据中的属性数。option-v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。

 

model:SVM根据样本训练的得到的分类器

      model是struct结构[Parameters, nr_class,totalSV, rho, Label, ProbA, ProbB, nSV, sv_coef, SVs]

      model.Parameters参数(均是用户自定义或者默认的)意义从上到下依次为:

                 -s svm类型:SVM设置类型(默认0)

                 -t 核函数类型:核函数设置类型(默认2)

                 -d degree:核函数中的degree设置(针对多项式核函数)(默认3)

                -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认类别数目的倒数)

                -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)

      model.nr_class表示数据集中有多少类别;=2 for regression/one-class svm

      model.Label表示数据集中类别的标签都是什么

      model.totalSV代表总共的支持向量的数目

      model.nSV表示每类样本的支持向量的数目

      model.ProbA和model.ProbB使用-b参数时才能用到,用于概率估计。

     -b  probability_estimates: whether to train a SVC or SVR model for probabilityestimates,0 or 1 (default 0)

      model.sv_coef是一个totalSV*1的矩阵,承装的是totalSV个支持向量在决策函数中的系数

      model.SVs是一个totalSV×维度的稀疏矩阵,承装的是totalSV个支持向量

      model.rho是决策函数中的常数项的相反数

 

 

3.svmpredict(….) 对测试集进行预测


      函数:[predicted_label,accuracy, decision_values/prob_estimates] = svmpredict(test_label, test_matrix,model, ['libsvm_options']);

      返回参数:

      predict_label是预测标签向量

      accuracy从上到下依次的意义分别是:

              -分类准率(分类问题中用到的参数指标)

             -平均平方误差(MSE(mean squared error))[回归问题中用到的参数指标]

             -平方相关系数(r2(squared correlation coefficient))[回归问题中用到的参数指标]

    dec_values是一个包含decision值或概率估计(-b1)的矩阵,如果k个类,对于decision值,每行包含k(k-1)/2个二分类问题的结果;对于概率,每列包含k个属于每类的概率值

 

 

4.注意事项


1.测试数据的格式要求必须是每一列代表一个属性,每一列代表一个样本.

2.数据类型需要是double型.

3.如果自己编写的程序使用到libsvm,就应该将libsvm中的MATLAB代码复制到自编程序位置,否则MATLAB会调用自带的SVM程序,报错“Ymust be a vector or a character array.”

4.跟编译器有关吧,在使用SVM做预测的时候,返回的参数必须填全,否则出来的预测结果是空的,即是:

[predicted_label, accuracy, decision_values] =svmpredict(test_label, test_matrix, model);

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值