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. P2664 树上游戏

    P2664 树上游戏 https://www.luogu.org/problemnew/show/P2664 分析: 点分治. 首先关于答案的统计转化成计算每个颜色的贡献. 1.计算从根出发的路径的答 ...

  2. Kafka在高并发的情况下,如何避免消息丢失和消息重复?kafka消费怎么保证数据消费一次?数据的一致性和统一性?数据的完整性?

    1.kafka在高并发的情况下,如何避免消息丢失和消息重复? 消息丢失解决方案: 首先对kafka进行限速, 其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all,即需要相应的 ...

  3. struts2-01:作用域传值

    方式一.使用ServletActionContext(耦合度高,不建议使用) public String login(){ ServletActionContext.getRequest().getS ...

  4. OpenSUSE 11 安装Qt5.0,失败,失败,失败,留个坑,以后来填,万一实现了呢

    我又来无耻的写问题来了,这次还真的是没有解决,线留坑吧,万一以后实现了. 同样,这次也是以恶搞网友说听说想在open suse 上面安装5.0版本以后的Qt,自己折腾好几没有成功. 我一想,哎,这不是 ...

  5. git服务器搭建及eclipse使用git

    一.搭建git服务器 1.yum install git 2.新建用户linux用户git,管理git服务 useradd git passwd git 3.初始化git仓库 git init --b ...

  6. Python 集合内置函数大全(非常全!)

    Python集合内置函数操作大全 集合(s).方法名 等价符号 方法说明 s.issubset(t) s <= t 子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员   s ...

  7. TPO-14 C1 Locate a political book

    TPO-14 C1 Locate a political book 第 1 段 1.Listen to a conversation between the student and librarian ...

  8. 【转载】OpenCV(C++ 与 Python 的比较)与 MATLAB 的比较

    原文作者 : Satya Mallick 译者 : aleen42 原文  https://aleen42.gitbooks.io/personalwiki/content/translation/o ...

  9. TensorFlow | ReluGrad input is not finite. Tensor had NaN values

    问题的出现 Question 这个问题是我基于TensorFlow使用CNN训练MNIST数据集的时候遇到的.关键的相关代码是以下这部分: cross_entropy = -tf.reduce_sum ...

  10. 2.hbase原理(未完待续)

    hbase简介相关概念hmsterhregionserver表regionhstorememstorestorefilehfileblockcacheWALminorcompactmajorcompa ...