MATLAB环境使用LIBSVM-分类详解(三)

本文详细介绍了LIBSVM在MATLAB环境下的四个核心函数:libsvmread,libsvmwrite,svmtrain和svmpredict。通过实例解析了如何使用这些函数进行数据读写、模型训练和预测,并深入探讨了svmtrain函数的参数设置及其对模型的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

LIBSVM在MATLAB下只有四个函数,分别时:libsvmread,Libsvmwrite,svmtrain,svmpredict。

函数说明及参数详解

libsvmread函数用于读取数据 。
用法

[label,instance]=libsvmread('libsvm_data'); 

libsvmwrite写函数,就是把已知数据存起来 。
用法

libsvmwrite('libsvm_data.mat',label, instance); 

要求instance为稀疏矩阵。

svmtrain训练函数,训练数据产生模型的,参数options可以省略,但是默认的参数可能无法得到较好的分类或回归效果。

model = svmtrain(label,instance,options) 
options 参数

options的参数设置可以按照 SVM 的类型和核函数所支持的参数进行任意组合。如果设置的参数在函数或 SVM 类型中没有或者错误将使用默认设置。

-s svm类型:SVM模型设置类型(默认值为0)
    0:C - SVC
    1:nu - SVC
    2:one - class SVM
    3: epsilon - SVR
    4: nu - SVR
- t 核函数类型:核函数设置类型(默认值为2)
    0:线性核函数 u'v
    1:多项式核函数(r *u'v + coef0)^degree
    2:RBF 核函数 exp( -r|u - v|^2)
    3:sigmiod核函数 tanh(r * u'v + coef0)
- d degree:核函数中的 degree 参数设置(针对多项式核函数,默认值为3)
- g r(gama):核函数中的gama参数设置(针对多项式/sigmoid 核函数/RBF/,默认值为属性数目的倒数)
- r coef0:核函数中的coef0参数设置(针对多项式/sigmoid核函数,默认值为0)
- c cost:设置 C - SVC,epsilon - SVR 和 nu - SVR的参数(默认值为1)
- n nu:设置 nu-SVC ,one - class SVM 和 nu - SVR的参数
- p epsilon:设置 epsilon - SVR 中损失函数的值(默认值为0.1)
- m cachesize:设置 cache 内存大小,以 MB 为单位(默认值为100)
- e eps:设置允许的终止阈值(默认值为0.001)
- h shrinking:是否使用启发式,0或1(默认值为1)
- wi weight:设置第几类的参数 C 为 weight * C(对于 C - SVC 中的 C,默认值为1)
- v n:n - fold 交互检验模式,n为折数,必须大于等于2

options参数使用例子

% 建立分类模型
model = svmtrain(label,instance,'-s 0 -t 2 -c 1.2 -g 2.8');

svmpredict训练函数,使用训练的模型去预测数据类型。

[predict_label,accuracy,dec_values] = svmpredict(test_label,test_instance,model) 

输出为三个参数,预测的类型,准确率,评估值。

分类测试

测试数据使用 LIBSVM 自带的 heart_scale.mat 数据(共计270个样本,每个样本有13个属性),进行测试。3.23版本的LIBSVM提供的heart_scale数据无法使用libsvmread直接打开,我们使用MATLAB自带函数load加载数据即可。

heart_scale数据讲解

LIBSVM 自带的 heart_scale数据共计270个样本,每个样本有13个属性。

测试代码如下:

clc;  
clear;  
load heart_scale;
model = svmtrain(heart_scale_label,heart_scale_inst)   
[predict_label,accuracy,dec_values] = svmpredict(heart_scale_label,heart_scale_inst,model) 

模型训练信息

*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132

其中,
#iter 为迭代次数,
nu 为options参数中的介绍,
obj 为 SVM 文件转换为的二次规划求解得到的最小值,
rho 为判决函数的常数项 b ,
nSV 为支持向量个数,
nBSV 为边界上的支持向量个数,
Total nSV 为支持向量总个数。
模型信息

model = 

  包含以下字段的 struct:

    Parameters: [5×1 double]
      nr_class: 2
       totalSV: 132
           rho: 0.4245
         Label: [2×1 double]
    sv_indices: [132×1 double]
         ProbA: []
         ProbB: []
           nSV: [2×1 double]
       sv_coef: [132×1 double]
           SVs: [132×13 double]
model.Parameters意义
>> model.Parameters
ans =

         0
    2.0000
    3.0000
    0.0769
         0

从上至下意义:

- s svm类型:SVM模型设置类型(默认值为0)
- t 核函数类型:核函数设置类型(默认值为2)
- d degree:核函数中的 degree 参数设置(针对多项式核函数,默认值为3)
- g r(gama):核函数中的gama参数设置(针对多项式/sigmoid 核函数/RBF/,默认值为属性数目的倒数)
- r coef0:核函数中的coef0参数设置(针对多项式/sigmoid核函数,默认值为0)
model.Label model.nr_class

model.label 表示数据集中类别的标签,这是[1 -1]
model.nr_class 表示数据集有多少个类别,这里是2个

model.totalSV model.nSV

model.totalSV 代表总共的支持向量的数目
model.nSV 代表每类样本的支持向量的数目,model.nSV 所代表的顺序是和 model.label 相对应。

model.sv_coef model.SVs model.rho

model.sv_coef,是支持向量在决策函数中的系数;
model.SVs,是支持向量;
model.rho,是决策函数中的常数项的相反数。

accuracy

svmpredict函数,返回参数accuracy是分类准确率,分类问题中用到的参数指标。
predict_label是,对输入数据进行分类预测的类别标签。

对于其中的不足或有新的体会届时会重新更新。

引用
https://www.cnblogs.com/blogwww/p/9473360.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值