libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9
libsvm命名空间下主要使用类:
svm_model 为模型类,通过训练或加载训练好的模型文件获得
svm_parameter 为参数类,主要为支持向量机设定参数,具体参数如下:
     svm_parameter.svm_type
     svm类型:SVM设置类型(默认svm_parameter.C_SVC)
           svm_parameter.C_SVC -- C-SVC n(n>=2)分类器,允许用异常值惩罚因子C进行不完全分类。
           svm_parameter.NU_SVC -- ν-SVC n类似然不完全分类的分类器。参数nu取代了c,其值在区间【0,1】中,nu越大,决策边界越平滑。
           svm_parameter.ONE_CLASS – 一类SVM 单分类器,所有的训练数据提取自同一个类里,然後SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特              征空间中所占区域。
           svm_parameter.EPSILON_SVR -- ε -SVR 回归。训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
           svm_parameter.NU_SVR -- ν-SVR 回归;nu 代替了p
           svm_parameter.kernel_type
    核函数类型:核函数设置类型(svm_parameter.LINEAR)
          svm_parameter.LINEAR – 线性:u'×v - 没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。 d(x,y) = x?y == (x,y)
          svm_parameter.POLY– 多项式:(γ×u'×v + coef0)^degree - 多项式核: d(x,y) = (gamma*(x?y)+coef0)degree
          svm_parameter.RBF – RBF函数:exp(-γ×|u-v|^2) - 径向基,对于大多数情况都是一个较好的选择:d(x,y) = exp(-gamma*|x-y|2)
          svm_parameter.SIGMOID – sigmoid:tanh(γ×u'×v + coef0) - sigmoid函数被用作核函数: d(x,y) = tanh(gamma*(x?y)+coef0)
          degree, gamma, coef0:都是核函数的参数,具体的参见上面的核函数的方程。
    svm_parameter.degree
    核函数中的degree设置(默认3)
         svm_parameter.coef0
    核函数中的coef0设置(默认0)
    svm_parameter.shrinking
    是否使用启发式,0或1(默认1)
    svm_parameter.nu
    设置ν-SVC,一类SVM和ν- SVR的参数(默认0.5)
    svm_parameter.C
    设置C-SVC,ε -SVR和ν-SVR的参数(默认1)
    svm_parameter.cache_size
    设置cache内存大小,以MB为单位(默认40)
svm_problem 相当于训练集合,可讲需要训练的数据加入该类传递给训练器
svm_node 内部使用的数据结构,主要用于保存待训练数据
svm 主调用程序中我们一般使用以下几个方法:
     svm.svm_train(svm_problem,svm_parameter) 该方法返回一个训练好的svm_model
     svm.svm_load_model(文件名); 该方法返回一个训练好的svm_model
     svm.svm_save_model(文件名,svm_model); 该方法将svm_model保存到文件中
     svm.svm_predict_values(svm_model,svm_node,double); 该方法返回doule类值,svm_node对svm_model测试,返回值确定了svm_node在模型中的定位

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

LibSVM库函数的调用

库函数在"libsvm"包中。

在Java版中以下函数可以调用:

public class svm {

public static final int LIBSVM_VERSION=310;

public static svm_model svm_train(svm_problem prob, svm_parameter param);

public static void svm_cross_validation(svm_problem prob, svm_parameter param, int nr_fold, double[] target);

public static int svm_get_svm_type(svm_model model);

public static int svm_get_nr_class(svm_model model);

public static void svm_get_labels(svm_model model, int[] label);

public static double svm_get_svr_probability(svm_model model);

public static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values);

public static double svm_predict(svm_model model, svm_node[] x);

public static double svm_predict_probability(svm_model model, svm_node[] x, double[] prob_estimates);

public static void svm_save_model(String model_file_name, svm_model model) throws IOException

public static svm_model svm_load_model(String model_file_name) throws IOException

public static String svm_check_parameter(svm_problem prob, svm_parameter param);

public static int svm_check_probability_model(svm_model model);

public static void svm_set_print_string_function(svm_print_interface print_func);

}

注意在Java版中svm_node[]的最后一个元素的索引不是-1.

用户可以自定义自己的输出格式,通过:

your_print_func = new svm_print_interface()

{

public void print(String s)

{

// your own format

}

};

svm.svm_set_print_string_function(your_print_func);

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

LIBSVM使用的一般步骤是: 
1) 按照LIBSVM软件包所要求的格式准备数据集;

2) 对数据进行简单的缩放操作;

3) 考虑选用RBF核函数

4) 采用交叉验证选择最佳参数C与γ;

5) 采用最佳参数C与γ对整个训练集进行训练获取支持向量机模型; 6) 利用获取的模型进行测试与预测。

svm_type c_svc  % 训练所采用的svm类型,此处为CSVC−

kernel_type rbf % 训练采用的核函数类型,此处为RBF核

gamma 0.047619  % 与操作参数设置中的γ含义相同

nr_class 2  % 分类时的类别数,此处为两分类问题

total_sv 604 % 总共的支持向量个数

rho -0.337784 % 决策函数中的常数项b

label 0 1  % 类别标签 
nr_sv 314 290 % 各类别标签对应的支持向量个数

SV % 以下为支持向量 
1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1  1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1   ...        ...                        ...  
1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1  
   % 对于分类问题,上面的支持向量的各列含义与训练数据集相同;对于回归问题,略有不同,与训练数据中的标签label(即y值)所对应的位置在模型文件的支持向量中现在存放的是Lagrange系数α值

libsvm java 调用说明的更多相关文章

  1. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  2. java调用mysql服务做备份与恢复

    首先添加mysql的bin到环境变量,这样可以简写部分命令,并且做到不依赖系统mysql的具体安装路径. 重启计算机可以让添加的环境变量在java代码中调用时生效.(cmd中生效但java中调用没有生 ...

  3. 存储过程详解与java调用(转)

    存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] ...

  4. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  5. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  6. 【转】java调用webservice

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  7. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  8. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  9. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

随机推荐

  1. (转)Discuz!NT图文安装教程

    不同目录下的安装方法根据目前大家对论坛的使用需求,在安装上面大致有三种情况,站点根目录下安装,站点虚拟目录下安装和站点子目录下安装. 1.根目录安装 根目录安装是最简单也是稳定系数最高的安装和使用方式 ...

  2. Redis,MemCached,MongoDB 概述

    调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...

  3. linux 第二天

    文件权限和用户组 groupadd 组名 groupadd policeman 查看组 vi /etc/group cat /etc/group 创建用户,并同时指定将该用户分配到哪个组 userad ...

  4. php中函数不确定参数个数时获取所有参数

    func_get_arg(),func_get_args()和func_num_args()的用法 这三个函数呢,都是以func_打头的,顾名思义,是跟php的函数有关的.我们在写类的时候也经常用到这 ...

  5. R2:获取一个event_base

    原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 创建一个event_base 在你使用任何有意思的Libeve ...

  6. javascript call()与apply()

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  7. [转载] 与WIN不同,linux替换文件夹会删除原文件夹下的全部内容!

    今天差点把源码给覆盖掉了><...555... 虚惊一场!!看了一篇博客分析这种情况.我的环境是CentOS5.5,不会出现文件夹直接被覆盖的情况,但是在Linux下不要用Win下的一些直 ...

  8. CentOS6.4 GOOGLE chrome install

    yum install http://people.centos.org/hughesjr/chromium/6/i386/RPMS/chromium-28.0.1500.45-205727.i686 ...

  9. Mysql删除表名中有特殊字符的表

    由于公司业务和应用的调整,之前在Mysql中的很多表都不需要了,故需要对数据库进行整理.   刚开始,我在想:不就删除一些表吗?很好解决,写个简单的脚本就可以了.我先看了数据库中有80000多个表,很 ...

  10. C#数字图像处理的3种方法

    本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类.BitmapData类和Graphics类是C#处理图像的的3个重要的类. Bitmap只要用于处理由像素数据定义的图像的对 ...