LIBSVM参数解释

最近学习libsvm库,将一些个人认为可以mark的东西做了记录,虽然README文档很清晰,但是在这篇文章中列出了dual problemd和核函数的公式,这样在选择参数时更加清楚。刚开始学习LIBSVM库时直接一脸懵,现在也还是在不断摸索中,如若有理解错误,请指出哦,谢谢!

Libsvm 使用步骤: 
1. 按照libsvm要求的数据格式,将要训练和预测的数据准备好;http://blog.csdn.net/u014772862/article/details/51828981 
2. 使用svm-scale实现数据缩放,可有可没有,需要按照特征的相关性进行操作; 
3. 考虑svm-train时是否使用核函数以及核函数的选择,建议首先考虑RBF核函数; 
4. 采用grid.py选择最优参数c和g;http://blog.csdn.net/u014772862/article/details/51829727 
5. 设置svm-train参数,对整个数据集训练获取svm模型; 
6. 利用svm-predict加载训练好的模型进行测试与预测。

1. svmscale 的用法

对数据集缩放的目的在于: 
1)避免原始数据中部分特征范围过大而另一部分特征范围过小; 
2)避免在训练时选择核函数计算内积时引起数值计算的困难; 
3)加快训练速度,提高准确率。 
因此,将数据缩放到[-1,1]或者[0,1]之间。

用法:svm-scale [options] data_filename” 
其中,options选择如下: 
-l lower,数据下限标记,设置lower值表示缩放后数据下限,默认为-1; 
-u upper,数据上限标记,设置upper值表示缩放后数据上限,默认为1; 
-y y_lower y_upper,是否对目标值同时进行缩放,y_lower 表示下限值, y_upper表示上限值; 
-s save_filename,将缩放的规则保存为文件save_filename; 
-r restore_filename,表示将缩放规则文件restore_filename载入后按此缩放; 
filename,待缩放的数据文件。 
缩放规则文件可以使用notepad++或者其他文本操作软件打开,格式为: 
lower upper 
index1 lval1 uval1 
index 2 lval2 uval2 
………………. 
其中,lower和upper是数据的上下限,与参数设置中的lower和upper含义相同,index表示测试数据集的特征维数,lval 为该index维特征对应转换后下限lower 的特征值,uval 为该index维特征对应转换后上限upper 的特征值。输入命令./svm-scale -s heart_scale.range heart_scale>heart_scale.scale测试svm-scale,下面是缩放heart_scale数据输出的缩放规则文件heart_scale.range.

x
-1 1
1 -1 1
2 -1 1
3 -1 1
 
  • 1
  • 2
  • 3
  • 4
  • 5

使用示例: 
1) svmscale –s train.range train>train.scale 
表示采用缺省值(将特征缩放到[-1,1]之间,对y目标值不进行缩放)对数据集train进行缩放,其结果保存在文件train.scale中,缩放规则保存在文件train.range中。 
2) svmscale –r train.range test>test.scale 
表示载入缩放规则文件train.range,按照文件中的上下限对应的特征值和上下限值线性的对数据test进行缩放操作,并将其结果保存在文件train.scale中。

2. svm-train的用法

用法: svm-train [options] training_set_file [model_file] 
其中, 
-s svm训练,默认0, 其中前三种用来做分类问题,后两种用来实现回归问题。 
0 c-SVC,这里写图片描述 
1 nu-SVC, 这里写图片描述 
2 one-class SVM,这里写图片描述 
3 epsilon-SVR,这里写图片描述 
4. v-SVR,这里写图片描述

-t 核函数类型 
0 线性核函数,这里写图片描述 
1 多项式核函数,这里写图片描述 
2 RBF核函数,这里写图片描述 
3 sigmoid核函数,这里写图片描述 
4 自定义核函数

-v n, n-fold交叉验证。 
-d degree,设置多项式核函数的参数d,默认为3。 
-g gamma,设置多项式、RBF 、sigmoid核函数的参数,在多项式和sigmoid中gamma表示为a,在RBF中表示为r,默认为1/num_features。 
-r 设置多项式和sigmoid核函数中的常数项c,默认为0。 
-c cost,设置c-svc,epsilon-SVR,nu-SVR类型的惩罚系数C,默认为1。 
-n nu,设置nu-SVC,one-class SVM,nu-SVR类型的参数v,默认为0.5。 
-p epsilon,设置epsilon-SVR的loss function参数,默认为0.1。 
-m cachesize ,设置cache大小,默认为100MB。 
-e epsilon,设置终止条件,默认为0.001。 
-h shrinking,是否运用shrinking启发式,默认为1。 
-b probability_estimates,是否使用概率估计模型,默认0。 
-wi weight,将i类的参数C设置为weight*C,默认为1。 
-v n, n-fold交叉验证。

使用示例: 
svmtrain train3.scale train3.model 
训练 train3.scale, 将模型保存于文件 train3.model, 并在 dos 窗口中输出如下结果:

optimization finished, #iter = 1756
nu = 0.464223
obj = -551.002342, rho = -0.337784
nSV = 604, nBSV = 557
Total nSV = 604
 
  • 1
  • 2
  • 3
  • 4
  • 5

其中,#iter 为迭代次数,nu 与前面的操作参数-n ν 相同,obj 为 SVM 文件转换为的二次规划求解得到的最小值,rho 为判决函数的常数项 b ,nSV 为支持向量个数,nBSV 为边界上的支持向量个数,Total nSV 为支持向量总个数。 
模型文件介绍:

svm_type c_svc % 训练所采用的svm类型,此处为C SVC −
kernel_type rbf % 训练采用的核函数类型,此处为RBF核
gamma 0.047619 % 与操作参数设置中的 γ 含义相同
nr_class 2 % 分类时的类别数,此处为两分类问题
total_sv 604 % 总共的支持向量个数
rho -0.337784 % 决策函数中的常数项 b
label 0 1 % 类别标签
nr_sv 314 290 % 各类别标签对应的支持向量个数
SV % 以下为支持向量
1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1
1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1
... ... ...
1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3. svm-predict的用法

用法:svm-predict [options] test_file model_file output_file 
其中 
-b probability_estimates,是否需要进行概率估计预测,可选值为 0 或者 1,默认值为 0。 
est_file 是要进行预测的数据文件; 
model_file 是由 svmtrain 产生的模型文件; 
output_file 是 svmpredict 的输出文件,表示预测的结果值。 
svmpredict 没有其它的选项。


原文: http://blog.csdn.net/u014772862/article/details/51873590

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值