LIBSVM 使用的一般步骤是:
1)准备数据集,转化为 LIBSVM支持的数据格式 :
[label] [index1]:[value1] [index2]:[value2] ...
即 [l类别标号] [特征1]:[特征值] [特征2]:[特征值] ...
2)对数据进行简单的缩放操作(scale);(为什么要scale,这里不解释了)
3)考虑选用核函数(通常选取径函数,程序默认);
4)采用交叉验证(一般采用5折交叉验证),选择最佳参数C与g ;
5)用得到的最佳参数C与g 对整个训练集进行训练得到SVM模型;
6)用得到的SVM模型进行测试

Libsvm 是一个简单的,易用的,高效的SVM分类和回归软件。它解决了 C-SVM 分类,nu-SVM 分类,
one-class-SVM,epsilon-SVM 回归,nu-SVM 回归(的问题)。它也提供了一个自动的 C-SVM 分类的模型选择工具。本文档解释了 Libsvm 的用法。

Libsvm 的获取:http://www.csie.ntu.edu.tw/~cjlin/libsvm
请在使用 Libsvm 之前阅读 COPYRIGHT 文档。

目录:
=======================


- 快速开始
- 安装与数据格式
- 使用 ‘svm-train’
- 使用 ‘svm-predict’
- 使用 ‘svm-scale’
- 实际应用的小贴士
- 例子
- 自定义核函数
- 库的使用
- Java 版本
- 编译 Windows 二进制文件
- 附加工具:Sub-sampling, Parameter Selection, Format checking, 等
- MATLAB/OCTAVE 接口
- Python 接口
- 补充

快速开始
=======================


如果你刚接触 SVM 并且数据不大,安装完毕之后请用 ‘tools' 文件夹下的 easy.py。它自动做好所有的事情——从数据缩放到参数选择。

使用方法:easy.py training_file [testing_file]
有关参数选择的更多信息请参阅 ‘tools/README’。

安装和数据格式
=======================


在 Unix 系统中,键入 ‘make’  编译 ‘svm-train’ 和 ‘smv-predict’ 程序。运行程序时不设参数可以显示它们的用法。

在另一些系统中,查阅 ‘Makefile’ 来编译它们( 例如,参阅本文档中的 ‘编译 Windows 二进制文件’ )或者使用已编译的二进制文件( Windows 二进制文件在 ‘windows’ 目录下 )。
训练数据和测试数据的文件格式如下:
<label> <index1>:<value1> <index2>:<value2> ...

   .
   .

每一行包括一个实例(样本)并以 ‘\n’ 字符结束。对于分类,<label> 是一个整型数据,表示一个分类标签(支持多类分类)。对于回归,<label> 是一个可以为任意实数的目标值。对于 one-class SVM,它不被使用,所以可取任意值。一对 <index>:<value> 提供一个特征(属性)值:<index> 是从 1 开始的整型数据,<value> 是一个实数。唯一的例外是自定义核函数,<index> 从 0 开始;参见自 ‘定义核函数’ 部分。Indices 必须是单调增的顺序。测试文件中的 Labels 仅仅用于计算精度或误差。如果它们是未知量,只需在第一列任意填一个数。
本程序包中的一个已分类的数据的样本是 ‘heart_scale’。使用‘tools/checkdata.py(细节参阅 ‘tools/README’ )’ 来检查你的数据是否为正确的格式。
键入 ‘svm-train heart_scale’,此程序会读入训练数据并且输出(建立好的)模型文件 ‘heart_scale.model’。如果你有一个命名为 ‘heart_scale.t’ 的测试集,键入 ‘svm-predict heart_scale.t heart_scale.model output’ 来观察预测精度。‘output’ 文件包含预测后的类别标签。
 
对于分类(问题),如果训练数据都是同一类(即,所有标签都一样),那么 'svm-train' 会出示一个警告信息:‘Warning: training data in only one class. See README for details’,意味着训练数据是非常不平衡的。训练数据的 label 在测试的时候直接返回。
 
下面是本程序包中的其他的一些有用的程序:
svm-scale:
   这是一个缩放输入数据文件的工具(其实就是把属性值归一化)。
svm-toy:
   这是一个简单的图形接口,它用一个平面展示 SVM 怎样将数据分开。你可以在窗口内点击来画出一些数据点,使用 ‘change’ 按钮来选择类别 1,2,3(即,最多支持三个类别),‘load’ 按钮用来载入文件中的数据,‘save’ 按钮用来保存数据到一个文件,‘run’ 按钮用来得到一个 SVM 模型,‘clear’ 按钮来清空窗口。
你可以在窗口底端内输入选项,选项语法与 ‘svm-train’ 相同。
注意,‘load’ 和 ‘save’ 会考虑分类和回归情况中的密集数据格式。对于分类,每一个数据点有一个必须为1,2,3的 label(颜色)和两个在 [0,1)上的属性(x坐标和y坐标)。对于回归,每一个数据点有一个在 [0,1)上的目标值(y坐标)和一个在 [0,1)上属性(x坐标)。
分别在其各自的文件夹中键入‘make’来编译它们。
你需要 Qt 库来编译 Qt 版本。从 http://www.trolltech.com 获取。
你需要 GTK+ 库来编译 GTK 版本。从 http://www.gtk.org 获取。
预编译的 Windows 二进制文件在 ‘windows’ 文件夹下。我们使用的是32位的机器上的 Visual C++,所以最大缓存
大小是2GB。

使用‘svm-train’
=======================


用法:svm-train [options] training_set_file [model_file]
options:
-s svm_type:设定SVM类型(默认为0)

        0 -- C-SVC   (多类分类)
        1 -- nu-SVC   (多类分类)
        2 -- one-class SVM
        3 -- epsilon-SVR   (回归)
        4 -- nu-SVR   (回归)
-t kernel_type:设定核函数类型(默认为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) sigmoid核函数
        4 -- precomputed kernel (kernel values in training_set_file) 自定义核函数
-d degree:设定核函数的 degree 值(默认为 3)
-g gamma:设定核函数的 gamma 值(默认为 1/k)
-r coef0:设定核函数的 coef0 值(默认为 0)
-c cost:设定 C-SVC,epsilon-SVR,nu-SVR 的参数惩罚因子C值(默认为 1)
-n nu:设定 nu-SVC,one-class SVM,nu-SVR 的参数nu值(默认为 0.5)
-p epsilon:设定 epsilon-SVR 的损失函数中的 epsilon 值(默认为 0.1)
-m cachesize:设定缓存大小,以 MB 为单位(默认为 100)
-e epsilon:设定终止条件的允差(默认为 0.001)
-h shrinking:是否使用 shrinking heuristics(PS:这玩意太不好翻译),0 或 1(默认为 1)
-b probability_estimates:是否训练一个 SVC 或 SVR 模型做概率估计,0或1(默认为 0)
-wi weight : 对于 C-SVC,设定 i 类的参数 C 为 weight*C(默认为1)
-v n:n-折交叉验证模式
-q :退出模式(无输出)

-g 选项中的的 k 为输入数据的属性数量。
-v 选项随机截取数据为 n 个部分,计算它们的交叉验证的精度或者均方误差。
关于输出的意义,参阅libsvm FAQ。

使用‘svm-predict’

=======================

用法:svm-predict [options] test_file model_file output_file

options:
-b probability_estimates:是否预测概率估计,0或1(默认为 0);对于one-class SVM,仅支持 0。
model_file 是由 ‘svm-train’ 产生的模型文件。
test_file 是你欲预测的测试数据。
output_file 是 ‘svm-predict’ 产生的输出文件。

使用‘svm-scale’
=======================


用法:svm-scale [options] data_filename
options:
-l lower:x 缩放下限(默认为-1)
-u upper:x 缩放上限(默认为+1)
-y y_lower y_upper:y 缩放上下限(默认为不缩放)
-s save_filename:储存缩放参数到save_filename文件中
-r restore_filename:载入 restore_filename 中的缩放参数
 
例子请参阅本文件中的‘Examples’。

实际应用的小贴士
=======================
 
* 缩放数据。例如,缩放每个属性为 [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
用概率信息得到一个模型。用概率估计来预测测试数据。

自定义核函数
=======================


用户可以自定义核函数的值并输入它们作为训练和测试文件。之后 libsvm 不需要原始的训练和测试集。
假定有 L 个训练实体 x1, ..., xL。以 K(x, y) 做核函数中两个实体 x,y 的值,输入格式如下:
 
新训练实例 xi:
<label> 0:i 1:K(xi,x1) ... L:K(xi,xL)
新测试实例 任意 x:
<label> 0:? 1:K(x,x1) ... L:K(x,xL)
 
即,在训练文件中,第一列必须是 xi 的‘ID’。在测试中,用 ? 作为任意值。
 
所有核函数值包括 ZEROs 必须是明确提供的。训练和测试文件中任何随机的或排列的子集也有效(见下例)。
 
注意:格式与以前在 libsvmtools(文件夹)中发布的预定义核函数略有不同。
例子:
        假定最初的训练数据有三个 4-feature 的实例,测试数据有一个实例:
 
        15  1:1 2:1 3:1 4:1
        45        2:3       4:3
        25              3:1
 
        15  1:1       3:1
 
        如果用线性核函数,我们将得到如下新的训练和测试子集:
 
        15  0:1 1:4 2:6   3:1
        45  0:2 1:6 2:18 3:0
        25  0:3 1:1 2:0   3:1
 
        15  0:? 1:2 2:0  3:1
 
        ? 可为任何值。
 
        上面的训练文件的任何子集也是有效的。如,
 
        25  0:3 1:1 2:0  3:1
        45  0:2 1:6 2:18 3:0
 
        意味着核矩阵为:
 
                [K(2,2) K(2,3)] = [18 0]
                [K(3,2) K(3,3)] = [ 0  1]

svm使用的一般步骤的更多相关文章

  1. cs231n笔记:线性分类器

    cs231n线性分类器学习笔记,非完全翻译,根据自己的学习情况总结出的内容: 线性分类 本节介绍线性分类器,该方法可以自然延伸到神经网络和卷积神经网络中,这类方法主要有两部分组成,一个是评分函数(sc ...

  2. Struck: Structrued Output Tracking with Kernels 论文笔记

    Main idear Treat the tracking problem as a classification task and use online learning techniques to ...

  3. 斯坦福《机器学习》Lesson8感想-------1、SMO

    从上一篇文章可知支持向量(supervector)就是指的离分隔超平面近期的那些点.整个SVM最须要的步骤是训练分类器.得到alpha,从而得到整个用于数据分类的分隔超平面.支持向量机(super v ...

  4. CNN结构:用于检测的CNN结构进化-分离式方法

    前言: 原文链接:基于CNN的目标检测发展过程       文章有大量修改,如有不适,请移步原文. 参考文章:图像的全局特征--用于目标检测 目标的检测和定位中一个很困难的问题是,如何从数以万计的候选 ...

  5. 13 opencv训练器

    https://blog.csdn.net/WZZ18191171661/article/details/91305466 https://blog.csdn.net/qq_25352981/arti ...

  6. Spark-Bench 测试教程

    Spark-Bench 教程 本文原始地址:https://sitoi.cn/posts/19752.html 系统环境配置 操作系统:centos7 环境要求:安装 JDK, Hadoop, Spa ...

  7. 目标检测从入门到精通—R-CNN详细解析(二)

    R-CNN目标检测详细解析 <Rich feature hierarchies for Accurate Object Detection and Segmentation> Author ...

  8. Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦

    Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...

  9. SVM 实践步骤

    主要公式步骤: 原距离问题的函数: 1.将SVM的距离问题转化为拉格朗日函数: 2.原函数问题化成如下问题:   3.对各非拉格朗日参数求偏导来求min值: 4.将上面 令各偏导等于0 的结果带回 拉 ...

随机推荐

  1. 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)

    此刻我的内心是忐忑的,这个标题给了我很大的压力,虽然很久以前我就在github上搜索一圈了,也没发现有其他更好的开源电子病历编辑器,如各位亲发现有更好的,烦请知会我一声. 该编辑器其实已经憋了很久了, ...

  2. php实现hack中的Shape特性

    用php进行静态类型编程,估计是我的一个心结. 依次有几篇文章都记录了我的一些探索: 通过指定函数/方法形参类型提高PHP代码可靠性 http://www.cnblogs.com/x3d/p/4285 ...

  3. SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决

    在SQL Server中,需要对数据操作进行先SELECT 之后UPDATE,对于这样的操作,如果出现高并发,可能导致脏读情况的发生.不能保证数据的同步. 解决方案是在事物中对表进行加更新锁: 事务一 ...

  4. Spring Boot中静态资源(JS, 图片)等应该放在什么位置

    Spring Boot的静态资源,比如图片应该放在什么位置呢, 如果你放在传统WEB共的类似地方, 比如webapp或者WEB-INF下,你会得到一张示意文件未找到的破碎图片.那应该放哪里呢? 百度一 ...

  5. 深入研究Java类装载机制

    目录 1.为什么要研究java类装在机制? 2.了解类装载机制,对于我们在项目开发中有什么作用? 3.装载实现细节. 4.总结 一.为什么药研究Java类装载机制 java类加载机制,便于我们使用自定 ...

  6. Java的关键字与标识符

    Java作为一门编程语言,与其他语言一样,有字符集.标识符.和关键字.变量.常量.语句等编程语言的基本要素. 1.关键字 abstract boolean break byte case catch ...

  7. IEEE829-2008软件测试文档标准介绍

    1998版中定义了一套文档用于8个已定义的软件测试阶段: 测试计划: 一个管理计划的文档 包括:   测试如何完成 (包括SUT的配置).   谁来做测试   将要测试什么   测试将持续多久 (虽然 ...

  8. jqGrid几个需要注意的默认设置

    jqGrid中的option属性设置中,几乎每个属性都会给出默认值,然而,有些默认值实在有些坑爹,导致在使用过程中,如果没有注意到而使用了默认值,就会出现一些问题. height:是指jqGrid表格 ...

  9. 【webapp的优化整理】要做移动前端优化的朋友进来看看吧

    单页or多页 本文仅代表个人观点,不足请见谅,欢迎赐教. webapp 小钗从事单页相关的开发一年有余,期间无比的推崇webapp的网站模式,也整理了很多移动开发的知识点,但是现在回过头来看,weba ...

  10. cocos2dx骨骼动画Armature源码分析(三)

    代码目录结构 cocos2dx里骨骼动画代码在cocos -> editor-support -> cocostudio文件夹中,win下通过筛选器,文件结构如下.(mac下没有分,是整个 ...