初步体验libsvm用法1(官方自带工具)
在机器学习和模式识别领域,svm理论使用得很广泛,其理论基础是统计学习,但是如果我们的研究方向不是svm理论,我们只是利用已有的svm工具来对我们的任务进行分类和回归,那么libsvm是一个不错的选择。
那么libsvm到底怎么使用呢?研究了一下,发现使用起来不是很复杂,这一小结就说说到底怎么简单的体会libsvm吧。
一、 首先准备几个工具:
Libsvm下载 http://www.csie.ntu.edu.tw/~cjlin/libsvm/
Gnuplot下载:http://www.gnuplot.info/
Python下载: http://www.python.org/getit/
这里我下的libsvm版本为3.1.2,gnuplot版本为4.6.0,python版本为2.7.3。
其中libsvm的作用就不用多介绍了,gunplot是图像绘画工具,可以将数据可视化,python是一种程序编程语言,很方便,所以libsvm和她走得比较近。
我将libsvm解压(即相当于安装)在C:\Program Files\libsvm-3.12下
Gnuplot安装在C:\Program Files\gnuplot下
Python安装在C:\Program Files\Python27下。
二、准备环境 :
我在桌面建立了一个svm_test文件夹,将常用的几个二进制文件拷贝到该目录下,后面要用的。这些二进制文件包括svm-predict.exe,svm-scale.exe,svm-toy.exe,svm-train.exe,python.exe以及配置文件easy.py和grid.py。这些文件就在刚安装的几个软件目录中去找,这里就不列举了。如下所示:

当然并不是每一次分类和回归这些都要用到这些文件,可以自己选择,此处只是做个通用的介绍。
用文本文件打开grid.py,改变一下配置环境,在else语句后面,你可以根据自己的环境改一下。如下:

同理,easy.py也改变一下,我的改后为:

三 、准备训练的数据:
为了熟悉libsvm环境,这里我用libsvm自带svm-toy.exe来产生数据,打开svm-toy.exe显示如下:
注意到状态行的几个按钮,你自己摸索下就知道是什么用了,无需介绍。下面我产生数据如下所示:

点击下面的run按钮,结果显示如下:

点击save将数据保存,我保存为before_train。
四、准备训练参数
因为svm训练需要手动调整参数,一般采用默认的情况即可,这里还是为了体验libsvm,可以用libsvm自带的grid.py来自动暴力搜索最好的参数c和g,c表示惩罚系数,g表示 gamma系数。所以我们在命令行终端输入:

这是会出现如下的界面:

等运行完毕后在命令行终端会显示128.0 0.5 91.4141
前面那2个参数就是c和g,第三个不用管,也就是说如果我们c用128,g用0.5来训练svm数据效果是最好的。
但是在此过程中如果出现assertionerror:svm-train executable not found的错误提示:

这原因是前面的grid.py没有更改与自己安装文件相对应的路径。其实我改的那些路径也未必是安装路径,因为我已经把需要用的几个exe文件复制出来了,这样很方便,换别人的电脑这些配置不用改变太多。
五、训练数据:
在命令行输入svm-train .exe –c 128 –g 0.5 before_train after_train.model

运行结果如下:

并且在相应的svm_test中输出了一个文件after_train.model。
六、预测数据。
其实我们开始就预测了下数据,只是我们用的是默认的模型,参数是-t 2 -c 100,为了对比两者的效果,我们先采用默认参数来训练:
在命令行输入:svm-train.exe before_train default_predict.model

然后用默认参数训练出的模型进行预测:
在命令行输入:svm-predict.exe before_train default_predict.model after_train_default

其结果显示如下:

由此可见其准确率只有85.8586%.
下面我们采用用grid.py训练出的最佳参数来预测下模型,其过程和结果如下所示:

由此可见准确率提高到了91.6667%(但要注意这不一定很好,why?因为这是训练数据,有可能过拟合。)
用精确模型预测后的数据可视化显示如下:

肉眼感觉不出太大的区别,不过数据摆在那里,说明grid.py还是很牛叉的!
好吧,libsvm使用的简单体验过程就先到这里。
初步体验libsvm用法1(官方自带工具)的更多相关文章
- MongoDB3.6之Replica Set初步体验
Replica Set在国内叫做副本集,简单来说就是一份数据在多个地方存储. 1.为什么要用副本集,什么时候使用副本集? 有人说一份数据在多个地方存储占用了大量的额外空间,是一种浪 ...
- mysql connector c++ 1.1 API初步体验
mysql connector c++ 1.1 API初步体验 1,常用的头文件 #include <mysql_connection.h> #include <mysql_driv ...
- 如何利用 Visual Studio 自带工具提高开发效率
Visual Stuido 是一款强大的Windows 平台集成开发工具,你是否好好地利用了它呢? 显示行号 有些时候(比如错误定位)的时候,显示行号将有利于我们进行快速定位. 如何显示 1. 工具 ...
- JDK自带工具keytool生成ssl证书
前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...
- Expo大作战(二十七)--expo sdk api之Util(expo自带工具类),tackSnapshotAsync,Svg,SQLite
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- (转)用mysql自带工具mysqlslap对数据库进行压力测试
http://aolens.blog.51cto.com/7021142/1901557-------用mysql自带工具mysqlslap对数据库进行压力测试 mysqlslap是mysql自带的工 ...
- Tiff – 值得你体验一下的可视化的字体对比工具
Tiff 是一款字体对比工具,可视化对比两种字体之间的差异.这是一个工具来帮助比较两种字体,同时学习排版.在这一点上,谷歌 Web 字体作为 Tiff 外部字体文件的唯一来源.由于应用程序使用的一些功 ...
- 教你用Windows自带工具给优盘/移动硬盘添加密码
教你用Windows自带工具给优盘/移动硬盘添加密码 本文中优盘,移动硬盘和分区操作方式一样,为方便描述,下文将只说优盘 优盘成了很多人每天都会用到的工具,有时候自己优盘会存着一些不希望别人看到的文件 ...
- 【计算机视觉】如何使用opencv自带工具训练人脸检测分类器
前言 使用opencv自带的分类器效果并不是很好,由此想要训练自己的分类器,正好opencv有自带的工具进行训练.本文就对此进行展开. 步骤 1.查找工具文件: 2.准备样本数据: 3.训练分类器: ...
随机推荐
- [LeetCode]Wildcard Matching 通配符匹配(贪心)
一開始採用递归写.TLE. class Solution { public: bool flag; int n,m; void dfs(int id0,const char *s,int id1,co ...
- 利用runtime动态生成对象?
利用runtime我们能够动态生成对象.属性.方法这特性 假定我们要动态生成DYViewController,并为它创建属性propertyName 1)对象名 NSString *class = @ ...
- 【剑指Offer学习】【面试题34:丑数】
题目:我们把仅仅包括因子2.3 和5 的数称作丑数(Ugly Number).求从小到大的顺序的第1500个丑数. 举例说明: 比如6.8 都是丑数.但14 不是.它包括因子7.习惯上我们把1 当做第 ...
- 关联查询之map的延伸使用方法
<select id="front.sort.selectListall" parameterType="myshop.services.front.sort.be ...
- BZOJ3172 单词 Fail树
题目大意:求一篇论文中每个单词分别在论文中出现多少次. 本题用AC自动机太慢,应该用Fail树将AC自动机中所有的Fail指针反向得到一个新树,这就是Fail树.对长度为x的字符串a和长度为y的字符串 ...
- luogu1226 取余运算||快速幂
题目大意:快速求$a^b\mod p$的值. 根据二进制,令$b=\sum t_k\cdot 2^k, t\in \{0,1\}$,那么$$a^b=a^{\sum t_k\cdot 2^k}\mod ...
- poj1028--动态规划--Ignatius and the Princess III
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- js 随机生成信用卡号
本文实例讲述了JavaScript随机生成信用卡卡号的方法.分享给大家供大家参考.具体分析如下: 这段JS代码根据信用卡卡号产生规则随机生成信用卡卡号,是可以通过验证的,仅供学习参考,请不要用于非法用 ...
- Nginx实现负载均衡 + Keepalived实现Nginx的高可用
前言 使用集群是大中型网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求 ...
- django URL多层路由
一.多层路由 如果django里的app数量越来越多,那项目里的urls文件配置起来将会很麻烦,而且也不利于后续项目的改动和整理 所以看了杨老师的视频https://www.bilibili.com/ ...