主要参考了一些博客以及自己使用经验。收集来觉得比较有用的。

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。

LIBSVM使用方法及参数设置 主要参考了一些博客以及自己使用经验。的更多相关文章

  1. LIBSVM使用方法及参数设置

    LIBSVM 数据格式需要---------------------- 决策属性 条件属性a 条件属性b ... 2 1:7 2:5 ... 1 1:4 2:2 ... 数据格式转换--------- ...

  2. 【hadoop】有参考价值的博客整理

    好文章的网址: hadoop shuffle机制中针对中间数据的排序过程详解(源代码级) Hadoop mapreduce原理学习 与 Hadoop 对比,如何看待 Spark 技术? 深入理解Had ...

  3. HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)

    HtmlCleaner CleanerProperties 参数配置 Parameter Default Explanation advancedXmlEscape true If this para ...

  4. keras图像分类参考大神博客总结

    利用keras预加载模型添加新的层来构建自己所需的模型: from keras.layers import GlobalAveragePooling2D,Dense from keras.applic ...

  5. KMP的原理和代码实现(详细注释|参考多个博客总结|可作为模板)

    KMP算法解决的问题是字符匹配,是由Knuth–Morris–Pratt共同开发出来的,这个算法把字符匹配的时间复杂度缩小到O(m+n),而空间复杂度也只有O(m),n是target的长度,m是pat ...

  6. iOS中 动态启动图GIF的简单设置 韩俊强的博客

    // 设定位置和大小 CGRect frame = CGRectMake(50,340,[UIScreen mainScreen].bounds.size.width / 2,[UIScreen ma ...

  7. 关于mysql的wait_timeout参数 设置不生效的问题【转】

    关于wait_timeout 有一次去online set wait_timeout 的时候发现改了不生效,如下: mysql> show variables like 'wait_timeou ...

  8. Linux swappiness参数设置与内存交换

    swappiness参数设置与内存交换 by:授客 QQ:1033553122 简介 swappiness,Linux内核参数,控制换出运行时内存的相对权重.swappiness参数值可设置范围在0到 ...

  9. 详解SpringMVC中Controller的方法中参数的工作原理——基于maven

    转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...

随机推荐

  1. Linux时间子系统(一) 基本概念

    本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一.什么是时间? 这个问题实在是太复杂了,我都不知道这是一个物理学.宇宙学.还是热力学异或是哲学问题,我只是想从几个侧面来了解一下时 ...

  2. C#--类成员

    数据成员: 字段: 常量: 函数成员(执行代码): 方法: 属性 构造函数 析构函数 运算符 索引 事件 可以被声明为Static的类成员是:

  3. DevExpress控件之"XtraForm——窗体"

    1.AutoScaleMode:确定当屏幕分辨率或字体更改时窗体或控件将如何缩放. Dpi:根据显示分辨率控制缩放.常用分辨率为96和120Dpi: Font:根据类使用的字体(通常为系统字体)的维度 ...

  4. python标准库介绍——20 cStringIO 模块详解

    ==cStringIO 模块== ``cStringIO`` 是一个可选的模块, 是 ``StringIO`` 的更快速实现. 它的工作方式和 ``StringIO`` 基本相同, 但是它不可以被继承 ...

  5. 将数据库select出来的数据转化为与相应databean相应的字典

    例如以下图: 从user_logs表格select出来的数据放在一个可变数组NSMutableArray中,如 user_logs,如今要 把数据一条条转化为Userlog databean,User ...

  6. Win7中安装Windows PowerShell 3.0

    win7内置的powershell是2.0,现在已经明显落伍了,但win系统软件更新,需要解决依赖问题,so,按下面步骤安装即可. 1. 安装Microsoft .NET Framework 4.0的 ...

  7. 基于FPGA的异步FIFO设计

    今天要介绍的异步FIFO,可以有不同的读写时钟,即不同的时钟域.由于异步FIFO没有外部地址端口,因此内部采用读写指针并顺序读写,即先写进FIFO的数据先读取(简称先进先出).这里的读写指针是异步的, ...

  8. [na]802.1x协议无线认证协议&dot1x有线认证实验

    以前搞无线时候,会涉及到无线client接入方式的认证协议. 认证方式+加密方式+有线的dot1x. 注:以前都是doc粘贴到博客的,加上没写博客的习惯,因此会比较乱. EAP(扩展认证协议)是什么? ...

  9. android购物车遇到的问题

    近期 做购物车的时候 ,遇到几个问题.如今 总结例如以下: 1:不让listview复用组件(购物车.或者有特殊操作的时候): 自己保存全部的view对象 public View getView(fi ...

  10. Linux minilogd占用内存过高及开机启动项修改

    minilogd: 今天发现一台服务起的内存正常占用应该在70左右,但是内存占用却到了90%以上,用top查看发现minilogd占用了30%左右的内存,是不符合预期的,查看开机启动项并无minilo ...