[转]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学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.