libsvm 用SVM实现简单线性分类

 (转自:http://www.cnblogs.com/freedomshe/archive/2012/10/09/2717356.html)

0. 下载libsvm压缩包解压到本地目录(from:http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html) 
1. 新建JAVA工程,导入libsvm包及其源码
2. 编写测试代码,使用libsvm函数进行分类预测
3. 参考贴


一、新建JAVA工程,导入libsvm包及其源码。

  1. 新建JAVA工程及主函数main后,右键工程=>build path=>configure build path,Java Build Path>Libraries>Add External JARs,导入libsvm.jar。

  2. 关联libsvm源码(方便以后查看源码):点开libsvm.jar=>Source attachment:(None)=>Edit,External location=>External Folder

  选择libsvm-3.12下java目录,一路OK。

[Go Top]


二. 编写测试代码,使用libsvm函数进行分类预测

  测试代码如下:

 1 import libsvm.svm;
2 import libsvm.svm_model;
3 import libsvm.svm_node;
4 import libsvm.svm_parameter;
5 import libsvm.svm_problem;
6
7 public class jmain {
8
9 /**
10 * @param args
11 */
12 public static void main(String[] args) {
13 //定义训练集点a{10.0, 10.0} 和 点b{-10.0, -10.0},对应lable为{1.0, -1.0}
14 svm_node pa0 = new svm_node();
15 pa0.index = 0;
16 pa0.value = 10.0;
17 svm_node pa1 = new svm_node();
18 pa1.index = -1;
19 pa1.value = 10.0;
20 svm_node pb0 = new svm_node();
21 pb0.index = 0;
22 pb0.value = -10.0;
23 svm_node pb1 = new svm_node();
24 pb1.index = 0;
25 pb1.value = -10.0;
26 svm_node[] pa = {pa0, pa1}; //点a
27 svm_node[] pb = {pb0, pb1}; //点b
28 svm_node[][] datas = {pa, pb}; //训练集的向量表
29 double[] lables = {1.0, -1.0}; //a,b 对应的lable
30
31 //定义svm_problem对象
32 svm_problem problem = new svm_problem();
33 problem.l = 2; //向量个数
34 problem.x = datas; //训练集向量表
35 problem.y = lables; //对应的lable数组
36
37 //定义svm_parameter对象
38 svm_parameter param = new svm_parameter();
39 param.svm_type = svm_parameter.C_SVC;
40 param.kernel_type = svm_parameter.LINEAR;
41 param.cache_size = 100;
42 param.eps = 0.00001;
43 param.C = 1;
44
45 //训练SVM分类模型
46 System.out.println(svm.svm_check_parameter(problem, param)); //如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。
47 svm_model model = svm.svm_train(problem, param); //svm.svm_train()训练出SVM分类模型
48
49 //定义测试数据点c
50 svm_node pc0 = new svm_node();
51 pc0.index = 0;
52 pc0.value = -0.1;
53 svm_node pc1 = new svm_node();
54 pc1.index = -1;
55 pc1.value = 0.0;
56 svm_node[] pc = {pc0, pc1};
57
58 //预测测试数据的lable
59 System.out.println(svm.svm_predict(model, pc));
60 }
61 }

  运行结果为:

null
*
optimization finished, #iter = 1
nu = 0.0033333333333333335
obj = -0.0033333333333333335, rho = 0.0
nSV = 2, nBSV = 0
Total nSV = 2
-1.0

  第一行null是svm.svm_check_parameter(problem, param)的输出,表示参数设置无误;最后一行的-1.0表示对c点的预测lable是-1.0。

  要注意的几点是:
  1. 主要用了svm.svm_train()做训练,用svm.svm_predict()做预测,其中用到了svm_problem、svm_parameter、svm_model、svm_node几种“结构体”对象。
  2. svm_node表示的是{向量的分量序号,向量的分量值},很多稀疏矩阵均用此方法存储数据,可以节约空间;svm_node[]则表示一个向量,一个向量的最后一个分量的svm_node.index用-1表示;svm_node[][]则表示一组向量,也就是训练集。

[Go Top]


参考贴:

  1. 视频: 一个实例搞定libsvm分类《Learn SVM Step by Step》by faruto
  2. 如何使用libsvm进行分类
  3. Felomeng翻译:libsvm2.88之函数库的使用

 

(转)java +libsvm 安装与测试:的更多相关文章

  1. Apache Thrift入门(安装、测试与java程序编写)

    安装Apache Thrift ubuntu linux运行: #!/bin/bash #下载 wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thr ...

  2. java yum安装的环境变量设置

    如何(怎样)在CentOS 6.X 或 redhat 上使用安装JDK runtime environment (openjdk) ? CentOS 6.X 和 5.X 自带有OpenJDK runt ...

  3. java JDK安装

    JDK安装包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 图释安装 ...

  4. jdbc_odbc SQLserver 驱动安装及测试

    有2次被问到同一个问题,尽管博客园是.net的园子,我还是分享下吧.PS:我现在做的.net,以前学过点java.献丑了. ------------------ 原始邮件 -------------- ...

  5. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

  6. hadoop2-HBase的安装和测试

    在安装和测试HBase之前,我们有必要先了解一下HBase是什么 我们可以通过下面的资料对其有一定的了解: HBase 官方文档中文版 HBase 深入浅出 我想把我知道的分享给大家,方便大家交流. ...

  7. JMeter ----与WebDriver安装与测试

    JMeter ----与WebDriver安装与测试 主要内容 JMeter安装 WebDriver安装 一个简单的JMeter+WebDriver示例 环境与参考 jvm版本: 1.8.0_65 j ...

  8. JMeter (1) —— JMeter与WebDriver安装与测试(101 Tutorial)

    JMeter (1) -- JMeter与WebDriver安装与测试(101 Tutorial) 主要内容 JMeter安装 WebDriver安装 一个简单的JMeter+WebDriver示例 ...

  9. Selenium (1) —— Selenium安装与测试(101 Tutorial)

    Selenium (1) -- Selenium安装与测试(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standalone Selenium ...

随机推荐

  1. VINS(五)非线性优化与在线标定调整

    首先根据最大后验估计(Maximum a posteriori estimation,MAP)构建非线性优化的目标函数. 初始化过程通过线性求解直接会给出一个状态的初值,而非线性优化的过程关键在于求解 ...

  2. Spring的定时任务(任务调度)<task:scheduled-tasks>

    Spring内部有一个task是Spring自带的一个设定时间自动任务调度,提供了两种方式进行配置,一种是注解的方式,而另外一种就是XML配置方式了.注解方式比较简洁,XML配置方式相对而言有些繁琐, ...

  3. oracle分区表按时间自动创建

    表分区是一种思想,分区表示一种技术实现.当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO.oracle分区表是oracle数据库提供的一种表分区的实现形式.表进行分区后,逻辑上仍然是一张 ...

  4. WPF DataGridRow Event

    CM(Caliburn.Micro)框架绑定DataGridRow事件 <DataGrid.ItemContainerStyle> <Style TargetType="D ...

  5. js 中常用到的封装方法

    /** * 获取URL参数 */ function getQueryString(name) { var reg = new RegExp("(^|&)" + name + ...

  6. git 操作几个命令

     git clone ssh://lijianfeng@192.168.1.246:29418/GMGameSDK压栈:git stash查状态:git status切换到要修改的提交:git reb ...

  7. c和c++的强制类型转换

    我们知道c语言中的类型转换只有一种, TYPE b = (TYPE)a; 而在c++中按照不同作用的转换类型将其细分为三个显示类型转换符号static_cast, const_cast, reinte ...

  8. Centos 7 快速安装 Docker

    摘要: 安装 Docker [root@localhost~]# yum install docker 启动 docker 服务 [root@localhost~]# systemctl start ...

  9. Jmeter使用之:高效组织接口自动化用例技巧

    Jmeter怎么使用的文章多如牛毛,但怎么组织好测试用例,则几乎很难看到.在本文,我将把Jmeter下怎么组织测试用例的几点心得分享给大家,希望能给你一些帮助或启示. 1.善用“逻辑控制器”中的“简单 ...

  10. 利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...