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. MyEclipse保存文件时 自动格式化代码! 不包括文档注释

    设置不格式化 文档注释

  2. Visual Studio写的项目在 IIS 服务器上运行的两种简单方法

    首先需要PC上开启了IIS服务,相关方法网上很多,也很简单 第一种:直接在项目中操作 1.创建一个项目,然后右击选中项目,右击,单击属性,打开项目属性标签页面 如图,选择Web标签,在服务器栏目中选中 ...

  3. css样式之边框和内外边距

    1.css样式之边框:border 实心的边框: <!DOCTYPE html><html> <head> <meta http-equiv="co ...

  4. RTX管理器服务运行状态空白

    A)打开RTX管理器安装目录下的bin文件夹,运行convert.bat 右键计算机——管理——服务——找到以RTX开头的服务,按RTX_ConfigCenter.RTX_HTTPServer. RT ...

  5. rtsp转发服务器设计

    做一个设备实时监控.需求是这样的,一个用户有多个设备(android系统,支持摄像头),设备分布在家中或者其它地方:用户可以远程通过终端(手机.pc.ipad,etc...)管理操纵这些设备(包括实时 ...

  6. OnCreate

    用于创建插入符 /* CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm);//得到窗口字体信息 CreateSolidCaret ...

  7. 转载:Java连接MySQL 数据库的正确操作流程

    转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html       以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...

  8. WDCP安装memcached

    memcached安装 我们打开Web控制面板的时候其实memcached是没有安装的,所以我们要手动安装这个组件. 首先是要下载安装源代码并执行. 1 2 wget -c http://down.w ...

  9. Cstring类

    GetLength: 获取CString类的对象包含的字符串的长度(字节数) IsEmpty: 测试CString类的对象包含的字符串是否为空 Empty: 使CString类的对象包含的字符串为空字 ...

  10. 针对access数据库的增删改查

    1.执行查询操作:(ExecuteReader方法) string myConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data ...