[转]LIBSVM详细使用方法

2024-05-02 11:48
文章标签 使用 方法 详细 libsvm

本文主要是介绍[转]LIBSVM详细使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Libsvm 是一个简单、方便使用和普遍适用高效率的软件,它是针对SVM分类的。这个文档将解释如何使用libsvm

Libsvm 在http://www.csie.ntu.edu.tw/~cjlin/libsvm 可以得到。在你使用libsvm前请阅读COPYRIGHT文件。

安装

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

在 Unix系统中,`make'类是用来建立`svm-train' `svm-classify' 程序的。不用看它们的使用说明,去运行它们。

在其它的系统中,使用pre-built binariesWindows binaries 在子目录`windows'下)或者求助`Makefile'创建它们,这很容易。

训练和测试数据文件的格式是:

<label> <index1>:<value1> <index2>:<value2> ...

.

.

.

<label>(标签)的值是+1或-1,<index>是一个从1开始的整型值,<value>是一个实数。

在这个打包文件里有一个示例训练数据文件(heart_scale) type`./svm-train heart_scale'和它的程序来读训练数据文件,然后输出它的模型文件`heart_scale.model',这时你就可以type`./svm-classify heart_scale heart_scale.model output'看到训练数据的分类速度。`output'文件包含了它的决策函数的输出属性。

 

在这个打包文件里还有其它的一些有用的程序。

scale:

这是个工具,用来归一化输入的数据文件,Type `make scale'来创建它。

svm-toy:

这是一个简单的图形接口,用来显示SVM在平面上如何分割数据。

      

你可以在窗口的底端输入选项,选项的语法规则与`svm-train'相同。

      

在各自的目录下创建类`make'

      

你需要Qt图书馆来创建Qt版本。

       (你可以从http://www.trolltech.com下载)

你需要GTK+图书馆来创建GTK版本。

       (你可以从http://www.gtk.org下载)

       我们用Visual C++来创建窗口视图。

pre-built Windows binaries windows 子目录下。

 

`svm-train' 的使用方法

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

 

用法: svm-train [选项] training_set_file [model_file]

选项:

-c cost : 设置约束违反的代价CC是个惩罚函数,是个常数)

-t kernel_type : 设置核函数的类型(缺省值 2

        0 --线性核函数

1 --多项式核函数

2 -- 径向基核函数

3 -- sigmoid核函数

-d degree :设置核函数的度

-g gamma :在核函数中设置gamma

-r coef0 :在多项式/sigmoid 核函数中设置coef0

-m cachesize :MB中设置cache内存大小

-e epsilon : 设置终止条件的容许误差(缺省值为0.001

 

Library 的使用

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

 

这些函数和结构在头文件`svm.h'中已经声明了。

你需要#include "svm.h" 在你的C/C++源文件中,然后把你的程序链接到`svm.cpp',这时你就能看到`svm-train.c' `svm-classify.c',来显示如何使用它们。

 

在分类测试数据之前,你需要用训练数据构建一个SVM模型(`svm_model')。这个模型被保存在一个文件里方便以后使用。一旦一个SVM模型创建好了,你就可以使用它来分类新的数据。

 

- Function: struct svm_model *svm_train(const struct svm_problem *prob,

                                   const struct svm_parameter *param);

 

这个函数根据你给定的训练数据和参数,创建和返回一个SVM模型。                                                                                 

      

                                                                                                                                                                                                                                                                                                                                                                                       

    struct svm_problem describes the problem:

      

       struct svm_problem

       {

              int l;

              signed char *y;

              struct svm_node **x;

       };

`l'为训练数据的个数,`y'是一个包含标签(+1/-1)的数组,`x' 是数组的指针,每一个指针都分别代表(svm_node数组)一个训练向量。                                  

例如,有如下的一个训练数据:

 

    LABEL    ATTR1    ATTR2    ATTR3    ATTR4    ATTR5

    ----- ----- ----- ----- ----- -----

      1           0    0.1        0.2        0    0

     -1           0    0.1        0.3      -1.2         0

      1           0.4        0    0    0    0

      1           0    0.1        0    1.4        0.5

     -1         -0.1       -0.2         0.1        1.1        0.1  

这时svm_problem 的各部分分别代表:                                     

l = 5

 

    y -> 1 -1 1 1 -1

 

    x -> [ ] -> (2,0.1) (3,0.2) (-1,?)

        [ ] -> (2,0.1) (3,0.3) (4,-1.2) (-1,?)

        [ ] -> (1,0.4) (-1,?)

        [ ] -> (2,0.1) (4,1.4) (5,0.5) (-1,?)

        [ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (-1,?)

(index,value)储存在结构`svm_node':

struct svm_node

       {

              int index;

              double value;

       };

 

index = -1 表明一个向量的结束。

struct svm_parameter describes the parameters of an SVM model:

 

       struct svm_parameter

       {

              int kernel_type;

              double degree;  // for poly

              double gamma;   // for poly/rbf/sigmoid

              double coef0;   // for poly/sigmoid

 

              // these are for training only

              double cache_size; // in MB

              double C;

              double eps;

       };

kernel_type can be one of LINEAR, POLY, RBF, SIGMOID.(几种核函数的类型)

 

    LINEAR: u'*v (线性)

    POLY:     (gamma*u'*v + coef0)^degree (多项式)

    RBF:       exp(-gamma*|u-v|^2) (径向基函数)

    SIGMOID:     tanh(gamma*u'*v + coef0) (SIGMOID函数)

cache_size 为核内存的大小,单位为MB

    C是惩罚函数的值,为一常数. (我们通常使用 1 1000)

    Eps是终止条件的容错误差 (我们通常使用 0.001)

 

    *注意* 因为 svm_model 包含指针指向 svm_problem, 如果你仍然使用由svm_train()创建的svm_model ,你可以使用svm_problem 不释放内存。(这里翻译的不好) 

- Function: int svm_save_model(const char *model_file_name,

                            const struct svm_model *model);

 

这个函数将一个模型保存到一个文件里,如果成功的话就返回0,如果不成功就返回-1.

  - Function: struct svm_model *svm_load_model(const char *model_file_name);

 

  这个函数从一个文件里读出一种模式,然后返回一个指针,如果找不到模式,就返回空指针.

   - Function: double svm_classify(const struct svm_model *model,

                            const struct svm_node *x);

 

这个函数使用一个模式来分类一个文本向量x,返回决策函数的值(正用+1表示,负用 -1表示)      

    - Function: void svm_destroy_model(struct svm_model *model);

 

这个函数用一个模式来释放内存.

 

其它的一些信息

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

 

Chih-Chung Chang and Chih-Jen Lin

Libsvm: Introduction and Benchmarks

http://www.csie.ntu.edu.tw/~cjlin/papers/q2.ps.gz

 

声明:

This work was supported in part by the National Science

Council of Taiwan via the grant NSC 89-2213-E-002-013.

The authors thank Chih-Wei Hsu and  Jen-Hao Lee

for many helpful discussions and comments.                                                                                                                                                                                               

这篇关于[转]LIBSVM详细使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954179

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依