libsvm使用

本文详细介绍了LibSVM工具包的使用方法,包括svm-train、svm-predict、svm-scale等核心命令及其参数说明,同时还提供了tools目录下常用脚本的使用指南。

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

一、命令

1. 预备工作
  • libsvm下载链接
  • cd ~/Downloads/libsvm-3.21
  • make(编译)
  • brew install gnuplot
  • which gnuplot(得到安装路径,后续运行python的时候需要修改)
2. 训练模型的命令
  • svm-train:主要实现对训练数据集的训练,并可以获得SVM模型。
    • svmtrain [options] training_set_file [model_file]
    • 例子:svm-train -s 0 -c 10 -t 2 -g 0.5 -e 0.1 test.txt test.model
      • -s 设置svm类型:默认值为0
        • 0 – C-SVC
        • 1 – v-SVC
        • 2 – one-class-SVM
        • 3 –ε-SVR
        • 4 – n - SVR
      • -t 设置核函数类型,默认值为2
        • 0 –线性核:u’*v
        • 1 –多项式核:(g*u’*v+coef0)degree
        • 2 – RBF核:exp(-γ*||u-v||2)
        • 3 – sigmoid核:tanh(γ*u’*v+coef0)
      • -d degree:设置多项式核中degree的值,默认为3
      • -gγ:设置核函数中γ的值,默认为1/k,k为特征(或者说是属性)数;
      • -r coef 0:设置核函数中的coef 0,默认值为0;
      • -c cost:设置C-SVC、ε-SVR、n - SVR中从惩罚系数C,默认值为1;
      • -n v:设置v-SVC、one-class-SVM与n - SVR中参数n,默认值0.5;
      • -pε:设置v-SVR的损失函数中的e,默认值为0.1;
      • -m cachesize:设置cache内存大小,以MB为单位,默认值为40;
      • -eε:设置终止准则中的可容忍偏差,默认值为0.001;
      • -h shrinking:是否使用启发式,可选值为0或1,默认值为1
      • -b概率估计:是否计算SVC或SVR的概率估计,可选值0或1,默认0;
      • -wi weight:对各类样本的惩罚系数C加权,默认值为1;
      • -v n:n折交叉验证模式;
      • model_file:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。
  • svm-predict:根据训练获得的模型,对数据集合进行预测
    • svmpredict [options] test_file model_file output_file
      • -b probability_estimates——是否需要进行概率估计预测,可选值为0或者1,默认值为0。
      • -
  • svm-scale:是用来对原始样本进行缩放的,范围可以自己定,一般是[0,1]或[-1,1]。
    • 缩放的目的主要是:
      • 防止某个特征过大或过小,从而在训练中起的作用不平衡
      • 为了计算速度。因为在核计算中,会用到内积运算或exp运算,不平衡的数据可能造成计算困难
    • svmscale [-l lower] [-u upper][-y y_lower y_upper][-s save_filename][-r restore_filename] filename
      • -l:设定数据下限,缺省为-1
      • -u:设定数据上限,缺省为1
      • -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值
      • -s save_filename:表示将缩放的规则保存为文件save_filename
      • -r restore_filename:表示将按照已经存在的规则文件restore_filename进行缩放
      • filename:待缩放的数据文件,文件格式按照libsvm格式。
    • 例子:svmscale –l 0 –u 1 –s test.range test.txt > out.txt,重定向符 > 来另存为(假设为out.txt),避免覆盖源文件
  • 切换到目录下,键入以下命令,会提示具体用法:
./svm-train (liblinear为./train)
./svm-predict (liblinear为./predict)
./svm-scale (数据缩放)
3. tools中easy.py的使用
  • python easy.py training_file [testing_file]
4. tools中grid.py的使用
  • vim tools/grid.py(self.gnuplot_pathname = '/usr/local/bin/gnuplot'
  • pyhton grid.py [grid_options] [svm_options] dataset
  • 需要查看options的具体信息,可以先不带参,是libsvm的通用用法。
    例子: python grid.py -s 0 -t 2 train.txt
    • -s 选择模型
      • 0 – C-SVC
      • 1 – nu-SVC
      • 2 – one-class SVM
      • 3 – epsilon-SVR
      • 4 – nu-SVR
    • -t 选择核函数
      • 0 – linear: u’*v
      • 1 – polynomial: (gamma*u’*v + coef0)^degree
      • 2 – radial basis function: exp(-gamma*|u-v|^2)
      • 3 – sigmoid: tanh(gamma*u’*v + coef0)
      • 4 – precomputed kernel (kernel values in training_set_file)
    • train.txt 训练集数据
5. tools中subset.py的使用
  • subset.py用于分割数据集
  • subset.py [options] dataset subset_size [output1] [output2]
    • -s method : method of selection (default 0)
      • 0 – stratified selection (classification only)
      • 1 – random selection
  • 例子:要随机选取dataset中的2000个样本作为trainset,剩下的作为testset
    python subset.py dataset 2000 trainset testset
6. tools中checkdata.py的使用
  • checkdata.py检查数据格式符不符合要求
    python checkdata.py dataset
7. 其他
  • 缩放数据。例如,缩放每个属性为 [0,1] 或 [-1,+1]。
  • 对于 C-SVC,可以考虑用 ‘tools’ 文件夹下的模型选择工具。
  • nu-SVC/one-class-SVM/nu-SVR 中的 nu 参数近似为训练误差和支持向量的比率。
  • 如果要分类的数据是不平衡的(如,大正集和小负集),用 -wi 尝试不同的惩罚因子,如何解决分类中样本倾斜问题
  • 对于复杂问题,指定更大的缓存(即,larger -m)。

三、 常见用法

svm-scale -l -1 -u 1 -s range train > train.scale
svm-scale -r range test > test.scale
  • 缩放训练数据的每个特征值在 [-1,1] 内(训练数据文件为 train,缩放后的数据为 train.scale),缩放因子(就是一些参数)被存储在 range 文件中然后被用于缩放测试数据(测试数据文件为test,缩放后的数据为test.scale)。
svm-train -s 0 -c 5 -t 2 -g 0.5 -e 0.1 data_file
  • 用 RBF核函数 exp(-0.5|u-v|^2) 训练(data_file文件)得到一个分类器,C=10,终止允差为0.1。
svm-train -s 3 -p 0.1 -t 0 data_file
  • 用线性核函数 u’v 解决 SVM 回归(问题),损失函数中 epsilon=0.1。
svm-train -c 10 -w1 1 -w2 5 -w4 2 data_file
  • 训练一个分类器,对于 ‘1’ 类 惩罚因子为 10= 1 * 10,对于 ‘2’ 类 惩罚因子为 50 = 5 * 10,对于 ‘4’ 类 惩罚因子为 20 = 2 * 10。
svm-train -s 0 -c 100 -g 0.1 -v 5 data_file
  • 对分类器用参数 C=100,gamma=0.1 做五折交叉验证。
svm-train -s 0 -b 1 data_file
svm-predict -b 1 test_file data_file.model output_file
  • 用概率信息得到一个模型。用概率估计来预测测试数据。

四、模型参数解读

optimization finished, #iter = 162

nu = 0.431029

obj = -100.877288, rho = 0.424462

nSV = 132, nBSV = 107

Total nSV = 132

  其中,#iter为迭代次数,nu 是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV 为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

  在目录下,还可以看到产生了一个train.model文件,可以用记事本打开,记录了训练后的结果。

      svm_type c_svc                     //所选择的svm类型,默认为c_svc

      kernel_type rbf                       //训练采用的核函数类型,此处为RBF核

      gamma 0.0769231                   //RBF核的参数γ

      nr_class 2                               //类别数,此处为两分类问题

      total_sv 132                           //支持向量总个数

      rho 0.424462                          //判决函数的偏置项b

      label 1 -1                                 //原始文件中的类别标识

      nr_sv 64 68                           //每个类的支持向量机的个数

      SV                                          //以下为各个类的权系数及相应的支持向量

   1 1:0.166667 2:1 3:-0.33333310:-0.903226 11:-1 12:-1 13:1

   0.5104832128985164 1:0.125 2:1 3:0.33333310:-0.806452 12:-0.333333 13:0.5

   ………..

   -1 1:-0.375 2:1 3:-0.333333…. 10:-1 11:-1 12:-1 13:1

    -1 1:0.166667 2:1 3:1 …. 10:-0.870968 12:-1 13:0.5

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值