在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

svmlib java_Libsvm Java相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

最新文章

  1. 特斯拉AI总监:我复现了LeCun 33年前的神经网络,发现和现在区别不大
  2. python3 处理 html转义字符
  3. 【学习笔记 】sass教程巩固学习
  4. 【算法竞赛学习】资金流入流出预测-挑战Baseline_特征工程
  5. 一个42KB的文件,解压完其实是个4.5PB的“炸弹”
  6. html 属于mvvm框架,前端MVVM框架avalon揭秘 - HTML编译器
  7. java 自定义map_自定义写实现java中map中的功能(简易)
  8. php http_user_agent 微信浏览器改变为其他浏览器,微信内置浏览器HTTP_USER_AGENT
  9. window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法
  10. 朴素贝叶斯算法+模型的评价-查准率、召回率、F1-score及混淆矩阵(code实现)
  11. 气泡shader_仿蚂蚁森林气泡
  12. 2022年全国计算机二级Access数据库程序设计模拟试题及答案
  13. Mac OSX安装MongoDB
  14. 有限差分法求解高阶导数
  15. 汉思新材料:无人机控制板BGA芯片底部填充胶应用
  16. Go语言核心之美 2.5-字符串
  17. 琴生不等式(Jensen Inequality)
  18. 王思聪数字时钟android安卓/ios苹果下载
  19. 【计算机网络】分组交换和电路交换
  20. 简单常用JS函数集合大全107个

热门文章

  1. 【英语学习】【Level 07】U03 Amazing wonders L2 A global city
  2. java mvc 注解_Spring MVC注解开发入门
  3. mysql映射成hashmap_大厂面试必问!HashMap 怎样解决hash冲突?
  4. 正则表达式的使用,python正则匹配一个话题标签
  5. 关于插件管理器Alcatraz的一些问题
  6. 轻量级OLAP(一):Cube计算
  7. Android系统兼容性问题(持续更新)
  8. Spring ROO初体验
  9. (转)深入分析 Java I/O 的工作机制
  10. Linux 双网卡绑定方法