zoukankan      html  css  js  c++  java
  • SVM学习笔记(一):libsvm参数说明(转)

    LIBSVM

    数据格式需要----------------------

    决策属性 条件属性a 条件属性b ...

    2 1:7 2:5 ...

    1 1:4 2:2 ...

    数据格式转换----------------------

    当数据较少时,可以用formatdatalibsvm轻松地将文本数据转换成为svm工具使用的数据。

    使用方法为:

    1,打开FormatDataLibsvm.xls然后将数据粘贴到sheet1的topleft单元。

    输入格式为:

    条件属性a 条件属性b ... 决策属性

    7 5 ... 2

    4 2 ... 1

    输出数据格式是

    决策属性 条件属性a 条件属性b ...

    2 1:7 2:5 ...

    1 1:4 2:2 ...

    2,再"工具"-->"宏"-->执行下面有一个选项(FormatDatatoLibsvm)-->执行,要选中这个然后运行就可以了 ,这时数据转换的问题就解决了(如果没有宏选项,点击“开始--excel选项---在功能区显示“开发工具”选项卡”)

    3,可以copy到一个记事本中即可。但是注意在用libsvm的时候要在命令行输入.txt后缀。

    svm参数说明----------------------

    如果你要输出类的概率,一定要有-b参数

    svm-train training_set_file model_file

    svm-predict test_file model_fileoutput_file

    自动脚本:python easy.py train_data test_data

    自动选择最优参数,自动进行归一化。

    对训练集合和测试结合,使用同一个归一化参数。

    -c:参数

    -g: 参数

    -v:交叉验证数

    -s svm_type : set type of SVM (default 0)

    0 -- C-SVC

    1 -- nu-SVC

    2 -- one-class SVM

    3 -- epsilon-SVR

    4 -- nu-SVR

    -t kernel_type : set type of kernelfunction (default 2)

    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)

    -d degree : set degree in kernel function(default 3)

    -g gamma : set gamma in kernel function(default 1/num_features)

    -r coef0 : set coef0 in kernel function(default 0)

    -c cost : set the parameter C of C-SVC,epsilon-SVR, and nu-SVR (default 1)

    -n nu : set the parameter nu of nu-SVC,one-class SVM, and nu-SVR (default 0.5)

    -p epsilon : set the epsilon in lossfunction of epsilon-SVR (default 0.1)

    -m cachesize : set cache memory size in MB(default 100)

    -e epsilon : set tolerance of terminationcriterion (default 0.001)

    -h shrinking: whether to use the shrinkingheuristics, 0 or 1 (default 1)

    -b probability_estimates: whether to traina SVC or SVR model for probability estimates, 0 or 1 (default 0)(如果需要估计分到每个类的概率,则需要设置这个)

    -wi weight: set the parameter C of class ito weight*C, for C-SVC (default 1)

    Thek in the -g option means the number of attributes in the input data.

    libsvm使用误区----------------------

    (1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。

    (2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。

    a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。

    b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。

    (3) 样本数<<特征数的情况:

    a) 推荐使用线性核,可以达到与RBF同样的性能。

    (4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。

    (5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数

    libsvm在训练model的时候,有如下参数要设置,当然有默认的参数,但是在具体应用方面效果会大大折扣。

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

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

    0 -- C-SVC

    1 --v-SVC

    2 –一类SVM

    3 -- e -SVR

    4 -- v-SVR

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

    0 –线性:u'v

    1 –多项式:(r*u'v + coef0)^degree

    2 – RBF函数:exp(-gamma|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部

    当构建完成model后,还要为上述参数选择合适的值,方法主要有Gridsearch,其他的感觉不常用,Gridsearch说白了就是穷举。

    网格参数寻优函数(分类问题):SVMcgForClass

    [bestCVaccuracy,bestc,bestg]=

    SVMcgForClass(train_label,train,

    cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

    输入:

    train_label:训练集的标签,格式要求与svmtrain相同。

    train:训练集,格式要求与svmtrain相同。

    cmin,cmax:惩罚参数c的变化范围,即在[2^cmin,2^cmax]范围内寻找最佳的参数c,默认值为cmin=-8,cmax=8,即默认惩罚参数c的范围是[2^(-8),2^8]。

    gmin,gmax:RBF核参数g的变化范围,即在[2^gmin,2^gmax]范围内寻找最佳的RBF核参数g,默认值为gmin=-8,gmax=8,即默认RBF核参数g的范围是[2^(-8),2^8]。

    v:进行Cross Validation过程中的参数,即对训练集进行v-fold Cross Validation,默认为3,即默认进行3折CV过程。

    cstep,gstep:进行参数寻优是c和g的步进大小,即c的取值为2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值为2^gmin,2^(gmin+gstep),…,2^gmax,默认取值为cstep=1,gstep=1。

    accstep:最后参数选择结果图中准确率离散化显示的步进间隔大小([0,100]之间的一个数),默认为4.5。

    输出:

    bestCVaccuracy:最终CV意义下的最佳分类准确率。

    bestc:最佳的参数c。

    bestg:最佳的参数g。

    网格参数寻优函数(回归问题):SVMcgForRegress

    [bestCVmse,bestc,bestg]=

    SVMcgForRegress(train_label,train,

    cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)

    其输入输出与SVMcgForClass类似,这里不再赘述。

    而当你训练完了model,在用它做classification或regression之前,应该知道model中的内容,以及其含义。

    用来训练的是libsvm自带的heart数据

    model =

    Parameters: [5x1 double]

    nr_class: 2

    totalSV: 259 % 支持向量的数目

    rho: 0.0514 % b

    Label: [2x1 double] % classification中标签的个数

    ProbA: []

    ProbB: []

    nSV: [2x1 double] % 每类支持向量的个数

    sv_coef: [259x1 double] % 支持向量对应的Wi

    SVs: [259x13 double] % 装的是259个支持向量

    model.Parameters参数意义从上到下依次为:

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

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

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

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

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

    SVM 怎样能得到好的结果

    1. 对数据做归一化(simple scaling)

    2. 应用 RBF kernel

    3. 用cross-validation和grid-search 得到最优的c和g

    4. 用得到的最优c和g训练训练数据

    5. 测试

    关于svm的C以及核函数参数设置----------------------

    参考自:对支持向量机几种常用核函数和参数选择的比较研究

    C一般可以选择为:10^t , t=- 4..4就是0.0001 到10000

    选择的越大,表示对错误例惩罚程度越大,可能会导致模型过拟合

    在LIBSVM中-t用来指定核函数类型(默认值是2)。

    0)线性核函数

    (无其他参数)

    1)多项式核函数

    (重点是阶数的选择,即d,一般选择1-11:1 3 5 7 9 11,也可以选择2,4,6…)

    2)RBF核函数

    (径向基RBF内核,exp{-|xi-xj|^2/均方差},其中均方差反映了数据波动的大小。

    参数通常可选择下面几个数的倒数:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默认的是类别数的倒数,即1/k,2分类的话就是0.5)

    3)sigmoid核函数 又叫做S形内核

    两个参数g以及r:g一般可选1 2 3 4,r选0.2 0.4 0.60.8 1

    4)自定义核函数

    常用的四种核函数对应的公式如下:

    与核函数相对应的libsvm参数:

    1)对于线性核函数,没有专门需要设置的参数

    2)对于多项式核函数,有三个参数。-d用来设置多项式核函数的最高此项次数,也就是公式中的d,默认值是3。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。

    3)对于RBF核函数,有一个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。

    4)对于sigmoid核函数,有两个参数。-g用来设置核函数中的gamma参数设置,也就是公式中的第一个r(gamma),默认值是1/k(k是类别数)。-r用来设置核函数中的coef0,也就是公式中的第二个r,默认值是0。

  • 相关阅读:
    [CF888G] Xor-mst (Trie 树,最小生成树)
    [JSOI2010]部落划分 (最小生成树)
    [USACO15FEB]Superbull (最小生成树)
    [APIO2009]抢掠计划 ($Tarjan$,最长路)
    [APIO2015] 雅加达的摩天楼 (分块,最短路)
    [USACO07NOV]牛继电器Cow Relays (最短路,DP)
    P1266 速度限制 (最短路,图论)
    C语言编程题目(1)字符串格式化操作 手机键盘次数统计
    MOCTF RE 暗恋的烦恼
    python 面向对象 私有化浅析
  • 原文地址:https://www.cnblogs.com/pursuit1996/p/5617951.html
Copyright © 2011-2022 走看看