libsvm是support vector machine的一种开源实现,采用了smo算法。源代码编写有独到之处,值得一睹。

常用结构

svm_node结构

定义了构成输入特征向量的元素,index为索引(= -1为最后一个元素),value为值,

public class svm_node implements java.io.Serializable
{
public int index;
public double value;
}

借鉴了稀疏矩阵的表示方法。对于一个输入向量,定义为svm_node构成的一维数组

svm_node[] pa = {pa0, pa1};

所有输入序列有一个二维数组表示

svm_node[][] datas = {pa, pb};

标记序列

就是一个double数组,对应于输入序列datas的每一维。

double[] labels = {1.0, -1.0};

svm_problem结构

定义了(X, Y)的训练样本结构

public class svm_problem implements java.io.Serializable
{
public int l;
public double[] y;
public svm_node[][] x;
}

其中l是样本数量。

svm_parameter结构

定义了训练时的重要参数

public class svm_parameter implements Cloneable,java.io.Serializable
{
/* svm_type */
public static final int C_SVC = 0;
public static final int NU_SVC = 1;
public static final int ONE_CLASS = 2;
public static final int EPSILON_SVR = 3;
public static final int NU_SVR = 4; /* kernel_type */
public static final int LINEAR = 0;
public static final int POLY = 1;
public static final int RBF = 2;
public static final int SIGMOID = 3;
public static final int PRECOMPUTED = 4; public int svm_type;
public int kernel_type;
public int degree; // for poly
public double gamma; // for poly/rbf/sigmoid
public double coef0; // for poly/sigmoid // these are for training only
public double cache_size; // in MB
public double eps; // stopping criteria
public double C; // for C_SVC, EPSILON_SVR and NU_SVR
public int nr_weight; // for C_SVC
public int[] weight_label; // for C_SVC
public double[] weight; // for C_SVC
public double nu; // for NU_SVC, ONE_CLASS, and NU_SVR
public double p; // for EPSILON_SVR
public int shrinking; // use the shrinking heuristics
public int probability; // do probability estimates public Object clone()
{
try
{
return super.clone();
} catch (CloneNotSupportedException e)
{
return null;
}
} }

主要分为两大类参数:分类器的核函数性质和训练算法SMO的一些参数,包括精度啊等等

训练

通过调用svm.svm_train()训练模型

public static svm_model svm_train(svm_problem prob, svm_parameter param)

返回svm_model类对象表示训练得到的分类器

预测

通过svm.svm_predict()利用分类器进行预测

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

返回类别标记

实例代码如下,输入点pa = (10.0 10.0) ya = 1.0 pb = (-10.0, -10.0) yb = -1.0

测试点 (-0.1, 0)

 import libsvm.svm;
import libsvm.svm_model;
import libsvm.svm_node;
import libsvm.svm_parameter;
import libsvm.svm_problem; public class SvmTest {
public static void main(String[] args) { svm_node pa0 = new svm_node();
pa0.index = 0;
pa0.value = 10.0; svm_node pa1 = new svm_node();
pa1.index = -1;
pa1.value = 10.0; svm_node pb0 = new svm_node();
pb0.index = 0;
pb0.value = -10.0; svm_node pb1 = new svm_node();
pb1.index = -1;
pb1.value = -10.0; svm_node[] pa = {pa0, pa1};
svm_node[] pb = {pb0, pb1}; svm_node[][] datas = {pa, pb}; double[] labels = {1.0, -1.0}; svm_problem problem = new svm_problem();
problem.l = 2;
problem.x = datas;
problem.y = labels; svm_parameter param = new svm_parameter();
param.svm_type = svm_parameter.C_SVC;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
param.eps = 0.00001;
param.C = 1; System.out.println(svm.svm_check_parameter(problem, param));
svm_model model = svm.svm_train(problem, param); svm_node pc0 = new svm_node();
pc0.index = 0;
pc0.value = -0.1;
svm_node pc1 = new svm_node();
pc1.index = -1;
pc1.value = 0; svm_node[] pc = {pc0, pc1}; System.out.println(svm.svm_predict(model, pc));
}
}

libsvm使用简介的更多相关文章

  1. LibSVM格式简介

    对于训练或预测,XGBoost采用如下格式的实例文件: train.txt 1 101:1.2 102:0.03 0 1:2.1 10001:300 10002:400 0 0:1.3 1:0.3 1 ...

  2. SVM训练结果参数说明 训练参数说明 归一化加快速度和提升准确率 归一化还原

    原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html 举例说明 svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 - ...

  3. libsvm简介和函数调用参数说明

    1.      libSVM简介 libSVM是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归.由于libSVM程序小 ...

  4. libSVM简介及核函数模型选择

    1. libSVM简介 训练模型的结构体 struct svm_problem //储存参加计算的所有样本 { int l; //记录样本总数 double *y; //指向样本类别的组数 struc ...

  5. libsvm Minist Hog 手写体识别

    统计手写数字集的HOG特征 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ 这篇文章是模式识别的小作业,利用sv ...

  6. libsvm使用详细说明

    一,简介 LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量机的库,这套库运算速度还是挺快的,因此成为目前国内应用最多的SVM的库.详细的使用说明及博主博客见下链接: ...

  7. libSVM 简易使用手册

    关于SVM的基础理论知识,可以google这篇文章<SVM的八股简介>,讲解得生动有趣,是入门的极好教材.作为拿来主义者,我更关心怎么用SVM,因此瞄上了台湾林智仁教授提供的libSVM. ...

  8. LibSVM使用指南

    LibSVM使用指南 一.     SVM简介 在进行下面的内容时我们认为你已经具备了数据挖掘的基础知识. SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实 ...

  9. LIBSVM的使用方法

    [原文:http://wenku.baidu.com/view/7e7b6b896529647d27285276.html] 目  录 1 Libsvm下载... 3 2 Libsvm3.0环境变量设 ...

随机推荐

  1. [ Laravel 5.5 文档 ] 数据库操作 —— 在 Laravel 中轻松实现分页功能

     简介 在其他框架中,分页是件非常痛苦的事,Laravel 让这件事变得简单易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基于 ...

  2. JSDoc 介绍

    什么是JSDoc JSDoc是一个根据javascript文件中注释信息,生成JavaScript应用程序或库.模块的API文档 的工具.你可以使用他记录如:命名空间,类,方法,方法参数等.类似Jav ...

  3. 推荐几本WinCE 6程序开发的书

    因为学校期中考试和课程设计的原因,winCE6的项目开发耽误了一个多月的时间,现在学校没什么事情了,公司这边杂事也差不多办完了,可以专心的搞开发了,同时这也成了我的毕业设计,我不得不上心喽. 今天在卓 ...

  4. HDU1387:Team Queue

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1 ...

  5. 如果有多个集合的迭代处理情况【使用MAP】

    在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内.它也允许你指 ...

  6. 学习Linux相关书籍

    要推荐的书,我在<那两年炼就的Android内功修养>这篇文章中有提到,这里再列一下出来: 语言类: <深度探索C++对象模型>,对应的英文版是<Inside C+++  ...

  7. Thread之三:Thread Join()的用法

    一.join用法 join()和wait()不会释放锁,join()是Thread的方法,wait()是Object的方法 1.join方法定义在Thread类中,则调用者必须是一个线程 例如: Th ...

  8. 西安电子科技大学第16届程序设计竞赛 F Operating System (unique() 去重函数)

    链接:https://www.nowcoder.com/acm/contest/107/F来源:牛客网 Operating System 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  9. C语言在32位和64位机器下数字数据类型的字节数取决于编译器和平台, 主要由编译器决定。

    C语言中数字数据类型的字节数 C声明 32位机器 64位机器 char 1 1 short int 2 2 int   4 4 //整型在32位和64位下都是4个字节 long int   4 8 l ...

  10. 运动事件Motion Events

    备注:运动事件,也是加速度时间,一般像摇晃手机就属于运动事件           监听运动事件对于UI控件有个前提就是监听对象必须是第一响应者(对于UIViewController视图控制器和UIAP ...