[转]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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超