在做Kinect手势识别项目的时候用到了SVM这个东西。原理上不甚了解,但是用起来感觉还是很神奇的。

度娘百科:支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习方法。

具体实施时,归纳一下大概是下面这几个步骤:

1. 获得样本数据,按SVM训练函数的传入参数格式要求,进行整理;
2. 利用训练函数train,根据样本进行训练,获得预测模型model;
3. 利用预测函数predict和模型model,对测试数据进行预测,取得结果;

当然了SVM的整个一套系统我们不用自己写,可以直接拿开源的来用。台湾大学的林智仁教授弄的这个LIBSVM效果是相当好的!他提供了MatLab和Java两种形式的封装。但是我们的项目是用C#写的,所以为了方便就用了一个C#封装版的。版本不是很新但是够用就行。作者是袋鼠国Andrew Poh,在林智仁教授的LIBSVM上也提供了其他各种语言封装的LIBSVM。

不过这个C#封装版的LIBSVM的源码,看起来有些不够“面向对象”(当然深受“u can u up no can no bb”思想毒害的我是不会继续吐槽的。能封装而且用起来稳定,这就很好了)。

扯了这么多我想说LIBSVM在调用的时候最值得注意的部分就是样本数据的格式(同理测试数据的的格式也同样重要),这个让我一开始蛋疼了很久而且一度找不到办法。后来发现LIBSVM的官网上居然就有范例……虽然不针对C#封装版,但只要源码一样,调用参数的格式就应该差别不大对吧(想当然,但值得一试)。

样本数据这样写:

<类别1> <空格> <1:><数据> <空格> <2:><数据> <空格> <3:><数据> ……
<类别1> <空格> <1:><数据> <空格> <2:><数据> <空格> <3:><数据> ……
<类别2> <空格> <1:><数据> <空格> <2:><数据> <空格> <3:><数据> ……
……

类别只能是整数。建议取0、1、2、3……因为建立string数组存放类别名的时候,从0开始的整数刚好可以作为数组索引。

数据必须用科学计数法表示。保留小数点后6位,比如0.1要写成:

0.010000e+01   或   0.010000e+001

e+后面不能是00

测试数据用同样的格式写。最终由predict函数返回的结果是这样的:

<STX(ASCII里面的一个值)><测试数据1结果的类别>
<STX(ASCII里面的一个值)><测试数据2结果的类别>
<STX(ASCII里面的一个值)><测试数据3结果的类别>
……

就是这样。注意以上都用由Andrew Poh编写C#封装版的LIVSVM得到的测试结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

初试LIBSVM的更多相关文章

  1. 初试weka数据挖掘

    初试weka数据挖掘 Posted on 2013-09-07 13:26 DM张朋飞 阅读(321) 评论(7) 编辑 收藏 偶然间在网上看到了一篇关于weka好的博文,就记录了下来…… weka下 ...

  2. 6.LibSVM核函数

    libsvm的核函数类型(svmtrain.c注释部分): "-t kernel_type : set type of kernel function (default 2)\n" ...

  3. libsvm的数据格式及制作

    1.libsvm数据格式 libsvm使用的训练数据和检验数据文件格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1 ...

  4. libsvm下的windows版本中的工具的使用

    下载的libsvm包里面已经为我们编译好了(windows).进入libsvm\windows,可以看到这几个exe文件: a.svm-toy.exe:图形界面,可以自己画点,产生数据等. b.svm ...

  5. 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优

    libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...

  6. Tensorflow 处理libsvm格式数据生成TFRecord (parse libsvm data to TFRecord)

    #写libsvm格式 数据 write libsvm     #!/usr/bin/env python #coding=gbk # ================================= ...

  7. LibSVM for Python 使用

    经历手写SVM的惨烈教训(还是太年轻)之后,我决定使用工具箱/第三方库 Python libsvm的GitHub仓库 LibSVM是开源的SVM实现,支持C, C++, Java,Python , R ...

  8. libsvm简介和函数调用参数说明

    1.      libSVM简介 libSVM是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归.由于libSVM程序小 ...

  9. Libsvm Matlab 快速安装教程 (适用于Win7+, 64bit, and Matlab2016a+)

    近日在开始学习Machine Learning SVM 相关算法,将Matlab平台安装SVM的步骤记录如下,亲测可用: 开发环境: Windows 8 64 bit, Matlab 2016a, S ...

随机推荐

  1. php笔记(八)PHP类与对象之抽象类

    <?php //通过abstract关键字定义一个抽象类 abstract class ACanEat{ //通过abstract关键字定一个不用具体实现的抽象方法eat() abstract ...

  2. sudo命令出错 must set be suid

    特殊权限 4,2 ,1 4  suid,控制用户执行的文件,以文件所属用户的身份执行.当一个可执行的文件拥有suid时,会将文件拥有者的x位变成s(---s--x--x),这时称为set uid,简写 ...

  3. 小团队git开发模式

    实验室要使用Git进行代码管理,但是git非常复杂,各种开发模式也是层出不穷.作为新手的偶们很是发囧啊!!网上搜了一下,发现很多并不适合我们小团队运作(它本身就是为Linux内核管理而开发的分布式代码 ...

  4. vcs 下使用system verilog调用c函数

    c中要加入<svdpi.h> sv的tb中加入 import "DPI-C" function int funcname(); 仿真时,vcs命令行中加入 +vc fu ...

  5. 绳关节(b2RopeJoint)

    package{ import Box2D.Collision.b2AABB; import Box2D.Collision.b2RayCastInput; import Box2D.Collisio ...

  6. MarkDown初遇

    MarkDown初遇 纠结盘桓许久,由于那只胖纸,最终决定再次捡起博客这个东东,记录记录生活中.心灵里的点点滴滴. 寻觅的过程中忽然发现MarkDown这个东东,查了查,学习成本不高,简洁而标准,关键 ...

  7. j2ee tomcat 部署学习

    J2EE基础实例demo http://www.cnblogs.com/javabin/p/3809954.html J2EE 数据库JDBC(Java Data Base Connectivity, ...

  8. Mac MySQLdb模块安装,可算解决了

    转载:http://blog.csdn.net/janronehoo/article/details/25207825 短评:这篇文章感觉是比较全面解决Mac MySQLdb模块安装问题的文章了,特别 ...

  9. HDU 5758 Explorer Bo

    思维,树形$dp$. 首先选择一个度不为$0$的节点作为根节点,将树无根转有根. 这题的突破口就是要求瞬间移动的次数最少. 次数最少,必然是一个叶子节点走到另一个叶子节点,然后瞬间移动一次,再从一个叶 ...

  10. Android应用程序组件介绍

    应用程序组件是Android应用程序的基本构建单元.每个组件是系统进入你的应用程序的不同入口点.不是所有的组件对于用户都是实际上的入口点,有些是互相依赖的,但是每个组件都有特定的作用——每个都是唯一的 ...