开发者社区> yichudu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

libsvm-javaAPI

简介: 获得 <dependency> <groupId>tw.edu.ntu.csie</groupId> <artifactId>libsvm</artifactId> <version>3.17</version> </dependency> libsvm-3.17.jar的结构见
+关注继续查看

获得

<dependency>
	<groupId>tw.edu.ntu.csie</groupId>
	<artifactId>libsvm</artifactId>
	<version>3.17</version>
</dependency>

libsvm-3.17.jar的结构见下图,

default package:这里是工具制作者自己封装出来的一些类,它们都有main函数,可作为小工具直接使用。
libsvm package:核心文件。
关于default package:因为里面的类不在任意一个package中,所以我们的工程无法引用。解决办法是,通过maven得到源代码,然后复制粘贴到我们的package下面。

svm_train的输入为训练集,输出为得到的训练模型。
svm_predict的输入为待预测数据,输出为得到的预测结果。
它们的输入输出都是文件。

训练集

libsvm官方提供了一些训练集:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/
其中有一个breast-cancer训练集,见图:

格式为: label featurIndex1:value1featurIndex2:value2  ...

缩放

在一些情况下,我们会对训练数据进行缩放,缩放的目的在于:
1)避免一些特征值范围过大而另一些特征值范围过小;
2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。
因此,通常将数据缩放到[ -1,1]或者是[0,1]之间。
libsvm提供了svm_scale类来进行缩放。
缩放参数有-l lower : x scaling lower limit (default -1)与-u upper : x scaling upper limit (default +1)。

将breast-cancer训练集缩放后的部分结果见图:


训练模型model

它是一个文本文件,内容见图:



预测

本例中直接把训练集作为待预测集,结果见下:

预测集与训练集一样,每一行都要有label标签。当我们用已知的结果来检验预测的准确性时,那么下行输出的准确性统计就是真实的:

Accuracy = 90.9090909090909% (10/11) (classification)

当我们预测未知数据时(大多数情况都属于这一种),那么这行信息忽略就可以了。

代码

参数设置

-b 表示是否携带准确性估计信息。
训练阶段与预测阶段都需要携带-b参数。例:
 String[] testArgs = {"-b","1","d:/libsvm/breast-cancer.predict.txt", "d:/libsvm/breast-cancer.model", "d:/libsvm/breast-cancer.predict.result.txt"};
此时,预测结果的输出为:

第一行是标签的集合。
从第二行开始,格式为: 预测结果    预测准确的概率    预测不准确的概率

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】
32 0
2021-Java后端工程师面试指南-(SSM)(下)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
21 0
2021-Java后端工程师面试指南-(SSM)(上)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
21 0
【JAVA SE】—— 异常(下)
【JAVA SE】—— 异常(下)
31 0
【J2SE快速进阶】——Java内存分析
要在Java中分析内存,我们先来了解一下程序的执行过程:
31 0
02 - JavaSE之基础及面向对象(补充)
引用数据类型 java中的数据类型可以分为 基本数据类型 和 引用数据类型 两大类 int float char boolean等都是基本数据类型 类类型都是引用数据类型 引用数据类型类似C语言中的指针,多个引用数据类型可以引用同一个对象 基本数据类型的变量都有一份自己的值拷贝,而引用数据类型都是指向自己堆空间的值。
1046 0
Java中NIO和IO的比较
NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道。管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征。 概念解释: Channel——管道实际上就像传统IO中的流,到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象。一个 Buffer 实质上是一个容器对象。 每一种基本
939 0
+关注
618
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载