libsvm基本函数

本文整理自https://www.cnblogs.com/jiahuiyu/p/5415936.html

侵删!!!

  1.  libSVM 中包含的内容
    (1)Java文件夹  ,主要应用于java平台;  
    (2)Python文件夹,是用来参数优选的工具,稍后介绍;  
    (3)tools文件夹,主要包含四个python文件,用来数据集抽样(subset),参数优选(grid),集成测试(easy), 数据查(checkdata);  
    (4)windows文件夹 —— 包含libSVM四个exe程序包,我们所用的库就是他们, 里面还有个heart_scale,是一 个样本文件,可以用记事本打开,用来测试用的。  
    (5)svm-toy文件,一个可视化的工具,用来展示训练数据和分类界面,里面是源码,其编译后的程序在windows文件夹下;  
    (6)heart_scale文件,是测试用的训练文件
    (7)其他.h和.cpp文件都是程序的源码,可以编译出相应的.exe文件。其中,最重要的是svm.h和svm.cpp文件,svm-predict.c、svm-scale.c和svm-train.c(还有一个svm-toy.c在svm-toy文件夹中)都是调用的这个文件中的接口函数,编译后就是windows下相应的四个exe程序。另外,里面的 README 跟 FAQ 是很好的帮助文件。
  2. Svm-train

svm-train主要实现对训练数据集的训练,并可以获得SVM模型。用法: svm-train [options] training_set_file [model_file],其中options为操作参数,可用的选项即表示的涵义如下所示:

 -s 设置svm类型:  
           0 – C-SVC  ;1 – v-SVC  ; 2 – one-class-SVM  ; 3 – ε-SVR  ;  4 – n - SVR
      -t 设置核函数类型,默认值为2
           0 -- 线性核:u'*v  ;           1 -- 多项式核: (g*u'*v+ coef 0)degree  
            2 -- RBF 核:exp(-γ*||u-v||2) ; 3 -- sigmoid 核:tanh(γ*u'*v+ coef 0) 
        -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:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。

3. Svm-predict

svmpredict [options] test_file model_file output_file
      
其中,options为操作参数,可用的选项即表示的涵义如下所示:
      b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。     
      model_file:是由svmtrain 产生的模型文件; 
      test_file:是要进行预测的数据文件,格式也要符合libSVM格式,即使不知道label 的值,也要任意填一个,svmpredict会在output_file中给出正确的label结果,如果知道label的值,就会输出正确率; 
      output_file:是svmpredict 的输出文件,表示预测的结果值。

4. Svm-scale

svm-scale是用来对原始样本进行缩放的,范围可以自己定,一般是[0,1]或[-1,1]。缩放的目的主要是  (1)防止某个特征过大或过小,从而在训练中起的作用不平衡;  (2)为了计算速度,因为在核计算中,会用到内积运算或exp运算,不平衡的数据可能造成计算困难。
    用法:svm-scale [-l lower] [-u upper]  

                          [-y y_lower y_upper]  

                  [-s save_filename]  

                         [-r restore_filename] filename

     其中,[]中都是可选项:

-l:设定数据下限;

lower:设定的数据下限值,缺省为-1 ;

-u设定数据上限;upper:设定的数据上限值,缺省为 1;

-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;  

-s save_filename:表示将缩放的规则保存为文件save_filename;  

-r restore_filename:表示将按照已经存在的规则文件restore_filename进行缩放;   

filename:待缩放的数据文件,文件格式按照libSVM格式。 默认情况下,只需要输入要缩放的文件名就可以了:比如(已经存在的文件为)heart_scale。比如:svmscale –l 0 –u 1 –s test.rangeheart_scale > out.txt,其中-l是数据下限,-u是数据上限,-s是保存文件,规则信息保存的文件名为test.range,需要缩放的文件时heart_scale,数据缩放的结果文件保存为out.txt。

5. Model文件

在train.Model中,生成了许多相关系数(如图3),如下:
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                                          //以下为各个类的权系数及相应的支持向量

6. 运行后界面

运行后,可以在DOS界面看到如下结果:

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<c),nBSV为边界上的支持向量个数(a=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值