支持向量机libsvm实战入门

LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。

LibSVM的一般使用过程如下:

  • (1) 准备数据,使其符合软件包处理的特定格式;
  • (2) 利用数据进行缩放操作,此步是为了提高结果的精度和效率;
  • (3) 选定核函数;
  • (4) 设置相应的参数对训练集进行训练获取SVM模型;
  • (5) 利用得到的模型对测试集进行测试预测。

下载网址,最新版3.2.0

http://www.csie.ntu.edu.tw/~cjlin/libsvm/#java

下载后有各种版本的,我们选择java版本的

java版本的包括一个可执行的jar包和源码,可以直接使用jar包方式运行程序(具体参见README文档)

这里我们使用导入源码到eclipse中运行

训练数据和测试数据下载页面

http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/

这里我下载的叫usps的数据集,分成了10类,训练样本7291,测试样本2007,属性(变量)256个

训练数据格式

LibSVM使用的数据格式为<label> <index1>:<value1> <index2>:<value2> …

label表示分类,index表示第几个变量/特征,

(2) 数据缩放

svm-scale.java 帮助提示

归一化后的数据默认显示在控制台上所以我们要重定向到文件里保存

java -classpath libsvm.jar svm_scale -s   1.txt   usps  > scale

表示将usps训练集进行缩放(默认的规则),将缩放后的数据结果重定向输出到scale,并将这个缩放规则存储在1.txt中以便后面继续使用。

java -classpath libsvm.jar svm_toy

弹出一个图形窗口自己可以在上面绘制不同颜色的点进行测试

(3) 选定核函数

(4) 训练

svm-train帮助提示

java -classpath libsvm.jar svm_train  scale  model

将归一化后的数据文件scale训练成模型保存在model文件中,训练过程如下

生成的model模型文件如下

5) 测试

svm_predict帮助提示

java -classpath libsvm.jar svm_predict  usps.t model output

命令将测试文件usps.t与模型文件model进行对比预测,将结果保存在output文件中。可选参数-b为1的话则保存其概率。

没有归一化后的测试结果

归一化后的结果稍好

预测结果文件output中直接是测试集中每个样本的分类,是属于哪个label。

参考文章:

http://www.tanglei.name/an-example-for-beginning-to-learn-libsvm/

别人翻译的README里面命令参数详解

http://blog.sina.com.cn/s/blog_4c38701d01011ept.html

注:One Class SVM 是指你的training data 只有一类positive (或者negative)的data, 而没有另外的一类。在这时,你需要learn的实际上你training data 的boundary。而这时不能使用 maximum margin 了,因为你没有两类的data。 所以呢,在这边文章中,“Estimating the support of a high-dimensional distribution”, Schlkopf 假设最好的boundary要远离feature space 中的原点。
左边是在original space中的boundary,可以看到有很多的boundary 都符合要求,但是比较靠谱的是找一个比较 紧(closeness) 的boundary (红色的)。这个目标转换到feature space 就是找一个离原点比较远的boundary,同样是红色的直线。当然这些约束条件都是人为加上去的,你可以按照你自己的需要采取相应的约束条件。比如让你data 的中心离原点最远。
这些都是我个人的理解,我不是专门研究machine learning的。如有不妥之处,还望指出。

时间: 2024-10-11 23:48:18

支持向量机libsvm实战入门的相关文章

[swift实战入门]手把手教你编写2048(三)

上篇地址:swift实战入门之手把手教你编写2048(二) github地址:https://github.com/scarlettbai/2048.git. 今天给大家带来2048最后一篇,之前已经实现了向游戏区域中随机插入数字块,接下来要做的,就是当我们滑动屏幕时移动及合并数字块以及插入一个新的数字块.本篇的难点就是移动时的算法问题,首先来给大家讲一下算法. 2048的算法实现其实很简单,假如我们当前数字格的格式如下: | |4| | | | | |4| | |2| |2|2| |2| |

机器学习、深度学习的理论与实战入门建议整理

引言 拿到这份文档时想必你的脑海中一直萦绕着这么一个问题,"机器学习/深度学习要怎么学呢?(怎么入门,又怎么进一步掌握?)".关于这个问题其实并没有一个标准答案,有的人可能适合自底向上的学,也就是先从理论和数学开始,然后是算法实现,最后再通过一些项目去解决生活中的实际问题:有的人则可能适合自顶向下的学,也就是在弄清楚什么是机器学习及为什么学机器学习后,先确定一个系统性的用机器学习来解决实际问题的程序,然后找到一个合适的工具,接着再在各种数据集上做练习以不断加强自己的实践能力与巩固对算法

微信开发实战入门视频教程(Android4.4.2)

基于移动技术微信公众平台开发实战入门(Android4.4.2,微移动应用,项目实战) 适合人群:初级课时数量:40课时用到技术:微移动应用涉及项目:手机微信开发 qq:1840215592 课程内容简介微信腾讯公司推出的一个即时通讯服务的应用,微信提供公众平台.朋友圈.消息推送等功能,预计到2014年年底其注册用户量将突破10亿.面对一个用户数如此巨大的家伙,大家怎么能放过,都迫不及待的希望自己的应用能够跟微信产生一些联系.那么我们这套课程要讲的就是如何跟微信产生连接,如何将我们的网站接入到微

[swift实战入门]手把手教你编写2048(二)

上篇地址:swift实战入门之手把手教你编写2048(一) github地址:https://github.com/scarlettbai/2048.git. 上篇文章已经中已经把2048的游戏区块画好了,这篇来加入计分板以及往游戏面板中插入数字块 计分板同样作为一个view,我们新建一个ScoreView.swift文件,代码如下: import UIKit //这里协议的作用是方便别的类中调用计分板的scoreChanged方法 protocol ScoreProtocol{ func sc

Spring Boot 2.x 实战入门

"老齐的IT脱口秀,说人话,讲编程." 国内一线培训机构的金牌讲师齐毅诚意录制,没有忽悠,案例实战.<Spring Boot 2.x 实战入门>,老齐会把15年经验揉到实战手把手陪你学习.只要你需要,所有PPT和源码都给你,一切都是为了让你学的更轻松.希望老齐能成为你进入IT行业的引路人!课程完全免费,没有套路,也不会骗你去培训机构,只是一个老司机希望能让你少走点弯路!!课程地址: http://edu.51cto.com/course/13147.html 课程章节:第1

[公益课程]Spring Boot 2.x 实战入门

[公益内容]Spring Boot 2.x 实战入门课程内容 http://edu.51cto.com/course/13147.html 第1章Spring Boot 2.X快速入门45分钟1节 1-1Spring Boot 2.x 快速上手[免费观看]45:51第2章Spring Boot 常用配置1小时44分钟3节 2-1Spring Boot Web常用配置[免费观看]33:15 2-2日志配置[免费观看]28:59 2-3环境切换与自定义配置[免费观看]41:59第3章Thymelea

Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接

? Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接: 推荐给你高品质的实战课程 https://laravel-china.org/courses?rf=15818 ? ? 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论. 原文地址:https://www.cnblogs.com/lovebing/p/9578193.html

04.风哥Oracle数据库实战入门-Oracle安装配置视频教程

04.风哥Oracle数据库实战入门-Oracle安装配置视频教程链接:https://pan.baidu.com/s/1UDhT_A_e62sZshQ5n2toYQ 提取码:pqca 请分享链接到5个QQ IT交流群后,加入以下QQ群找群主获取更多免费视频. 更多视频教程,请加入QQ群(只加一个即可):189070296336282998 更多视频课程请点击:http://www.itpux.com/oracle.html 原文地址:http://blog.51cto.com/oracle18

编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语

四则运算编译器,虽然说功能很简单,只能编译四则运算表达式.但是编译原理前端部分几乎都有涉及,词法分析,语法分析,还有代码生成. 再复杂的编译器.再简单的编译器,功能上是差不多的,只是复杂的编译器实现上会更困难. 这个系列的文章是为了帮助你入门,在这个基础上再去看编译原理相关书籍,不至于打瞌睡. 如果你对编译原理很有兴趣,并且想更深一步的学习,在这里强烈推荐你看一本书--我心目中的神书--<计算机系统要素-从零开始构建现代计算机>. 这本书神在哪? 神在它通俗易懂,对小白足够友好,但又不过分肤浅