Libsvm Java
在java环境下用Libsvm包解决一个多分类问题。
1、将训练数据和测试数据按照libsvm的数据格式存放
可以写程序直接构造,libsvm的数据格式如下
Label 1:value 2:value ….
其中1、2是特征的序号,后面跟的是该特征值。当特征值为0的时候,可以省略不写,也就是说特征序号可以不连续。如-15 1:0.708 3:-0.3333.....
2、用svm-scale对数据进行归一化处理
之前一直训练失败的原因主要是没有对数据进行缩放,svm-scale.exe在libsvm包里windows文件夹里,作用是对数据进行缩放,防止某个特征过大或过小,从而在训练中起的作用不平衡。
下图是可选参数,-l后面跟数据归一化的下界,-u后面跟数据归一化的上界。

具体用法

这里设置的归一化上下界为0和1,svmTrainData.txt是原始训练数据,将缩放后的数据保存到train.scale。
注意训练数据和测试数据都要做归一化处理。
3、用网格搜索(grid search)寻找最优参数
libsvm包的tools文件夹下有一个grid.py文件,可以对训练数据进行参数寻优。
先介绍一下svm_train的各项可选参数:
- -s svm类型:SVM设置类型(默认0)
0 — C-SVC; 1 –v-SVC; 2 – 一类SVM; 3 — e-SVR; 4 — v-SVR - -t 核函数类型:核函数设置类型(默认2)
0 – 线性核函数:u’v
1 – 多项式核函数:(r*u’v + coef0)^degree
2 – RBF(径向基)核函数:exp(-r|u-v|^2)
3 – sigmoid核函数:tanh(r*u’v + coef0) - -d degree:核函数中的degree设置(针对多项式核函数)(默认3)
- -g r(gamma):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/k,k为总类别数)
- -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
- -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)
- -n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
- -p p:设置e -SVR 中损失函数p的值(默认0.1)
- -m cachesize:设置cache内存大小,以MB为单位(默认40)
- -e eps:设置允许的终止判据(默认0.001)
- -h shrinking:是否使用启发式,0或1(默认1)
- -wi weight:设置第几类的参数C为weight*C (C-SVC中的C) (默认1)
- -v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
网格寻优找的主要是最优的gamma和cost。在使用grid.py之前得先装一个绘图工具gnuplot。具体使用方法可以参考博客https://blog.csdn.net/u014772862/article/details/51829727
4、训练和测试
获得归一化的数据以及找到最优参数后就可以进行svm训练了。训练和测试的java代码很简单:
public static void main(String[] args) throws IOException {
String[] arg = {"-c","2.0","-g","0.03125","D:/MnistDatabase/svm/train.scale","D:/MnistDatabase/svm/svmModel.txt" };
String[] parg = {"D:/MnistDatabase/svm/test.scale","D:/MnistDatabase/svm/svmModel.txt" ,"D:/MnistDatabase/svm/svmPredict.txt"};
System.out.println(".........svm运行开始.........");
svm_train t = new svm_train();
svm_predict p= new svm_predict();
t.main(arg);
p.main(parg);
}
svmModel.txt存放的是训练好的svm模型,模型中各参数的意义可以参考这篇博客https://blog.csdn.net/zhaoluruoyan89/article/details/78342101
Libsvm Java的更多相关文章
- libsvm java 调用说明
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9libsvm命名空间下主要使用类:svm_model 为模型类,通过训练或加载训练好的模型文件获 ...
- libsvm java版本使用心得(转)
http://blog.csdn.net/u010340854/article/details/19159883 https://github.com/cjlin1/libsvm 项目中要用到svm分 ...
- Libsvm java工程实践
在上篇文章中对libsvm的流程和简单的java代码测试做了说明,本篇简单对libsvm如何在工程中实践进行简短说明,不当的地方欢迎大家指正. 第一步是对libsvm的预测函数进行调整,我是从svm_ ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- [笔记]LibSVM源码剖析(java版)
之前学习了SVM的原理(见http://www.cnblogs.com/bentuwuying/p/6444249.html),以及SMO算法的理论基础(见http://www.cnblogs.com ...
- LibSVM源码剖析(java版)
之前学习了SVM的原理(见http://www.cnblogs.com/bentuwuying/p/6444249.html),以及SMO算法的理论基础(见http://www.cnblogs.com ...
- (转)java +libsvm 安装与测试:
libsvm 用SVM实现简单线性分类 (转自:http://www.cnblogs.com/freedomshe/archive/2012/10/09/2717356.html) 0. 下载lib ...
- libsvm+eclipse(java)的配置以及开发需要设置的内容
主要参考博客: 1.eclipse + libsvm-3.12 用SVM实现简单线性分类 cnBlog中的主要介绍如何导入jar包的问题. 2.LIBSVM入门解读 CSDN,主要是对LIB ...
- LibSvm流程及java代码测试
使用libSvm实现文本分类的基本过程,此文参考 使用libsvm实现文本分类 对前期数据准备及后续的分类测试进行了验证,同时对文中作者的分词组件修改成hanLP分词,对数字进行过滤,仅保留长度大于1 ...
随机推荐
- 【Python学习】Python3 环境搭建
参考地址:http://www.runoob.com/python3/python3-install.html Python3 环境搭建 本章节我们将向大家介绍如何在本地搭建 Python3 开发环境 ...
- djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习
Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...
- Redis单机版分布式锁实现
转载自:https://www.cnblogs.com/linjiqin/p/8003838.html Redis分布式锁的正确实现方式 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基 ...
- html5自带表单验证
起因:今天无意中发现chrome的input框自带表单验证!于是就去试试firefox,惊奇的发现也有自带的验证提示,只不过两者的样式不一样 chrome中的样子: firefox中的样子: 发散:具 ...
- Idea spring 配置文件报红 URI is not registered
把报错的加到如下忽略列表中
- (6.1)linux操作系统基础
Linux介绍: Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核.Linux可安装在各种计算机硬件设备中,比如手机.平板电脑.路由器.台式计算机 ...
- .Net导出pdf文件,C#实现pdf导出 转载 http://www.cnblogs.com/hmYao/p/5842958.html
导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本,之前下了个5.4的似乎不好用. 下载之后直接添加引用. <%@ Page Lan ...
- CSS设计中的错误大整理!
如果有人发明时间机器,那应该将这些错误纠正,不然可把前端程序猿们给还惨了.大家一起看看都有哪些CSS规则应该完善. (CSS 代码) white-space: nowrap 应该 white-spac ...
- ---rk3288 mipi 整发(适用于新版的kernel 4.4 )
http://www.pianshen.com/article/7245318143/ 老的Anroid 5.1 下 Linux 3.10 的数据的名字和 处理方式有不少不同 不过rk3128 还在走 ...
- jsfl 进入影片 退出影片
targetMC=fl.getDocumentDOM().getTimeline().layers [0].frames[0].elements[0]; fl.getDocumentDOM().lib ...