Libsvm的MATLAB调用和交叉验证

今天听了一个师兄的讲课,才发现我一直在科研上特别差劲,主要表现在以下几个方面,(现在提出也为了督促自己在以后的学习工作道路上能够避免这些问题)

1、做事情总是有头无尾,致使知识点不能一次搞透,每次在用到相同知识点的时候才发现之前对这个知识了解的还是不透彻。

2、不善于总结,做的东西(如代码和论文)很多也比较杂,但是却没有记录每一项工作,致使到最后很难理清之前做过的东西。

3、检索能力较差,致使寻找自己需要的资料需要耗费太长的时间。

4、阅读文献的数量太少,因此很难提出新的想法和见解。

以上4点是我认为的科研和工作中主要需要提高的地方,我也从现在起开始逐条的改善,希望1个月之后的我可以养成良好的习惯,使得上面的缺陷得以修正。

下面就进行第一个改善:SVM接触时间很长了,理论和代码都研究和使用过,由于网上的资料整理的很多,自己就懒得整理,每次有问题就百度、谷歌一下基本都解决了,但是现在如果有人问我相关具体的内容,我还是很难答出来,毕竟别人的东西就是别人的,看了并不代表你掌握了,只有自己掌握的知识才是自己的,才能与人交流,并提出自己的见解。

一、SVM如何使用MATLAB调用

我之所以介绍这个,主要的原因是,大家在做机器视觉算法时使用最多的工具,而matlab中自带的svm工具箱又只能用于分两类的情况,而且不能进行交叉验证选择合适的参数,但是在正常的使用时不可避免的会遇到分多类的问题,而且选择合适的参数对于SVM也非常重要。下面介绍如何下载libsvm,配置matlab环境。

主要参考的主页有:http://blog.csdn.net/abcjennifer/article/details/7370177

1. 参考网站:

libsvm库下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/http://www.matlabsky.com/thread-9327-1-1.html(faruto,推荐)

视频:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html

详解:http://www.matlabsky.com/thread-11925-1-1.html

2、配置MATLAB环境

A.设置path

File->set path ->add with subfolders->加入libsvm-3.11文件夹的路径

B. 在matlab中编译

目的:将libsvm-3.11\matlab 中 libsvmwrite.c 等 C++文件编译成 libsvmread.mexw32 等matlab文件,这样就可以在command window中被直接调用了。

操作如下:1、mex -setup

Please choose your compiler for building external interface (MEX) files:

     Would you like mex to locate installed compilers [y]/n? y

   

    Please choose your compiler for building external interface (MEX) files:

    Would you like mex to locate installed compilers [y]/n? y

    Select a compiler:

    [1] Lcc-win32 C 2.4.1 in D:\MATLAB~1\sys\lcc

    [2] Microsoft Visual C++ 6.0 in D:\Microsoft Visual Studio

    [0] None

    Compiler: (此处不同版本的MATLAB和自己安装的编译器的不同显示会有差别,因此只要选择你已经安装的编译器就好了)

    

  Compiler: 2

  Please verify your choices:

  Compiler: Microsoft Visual C++ 6.0

  Location: D:\Microsoft Visual Studio

  Are these correct [y]/n? y

  Trying to update options file: C:\Users\faruto\AppData\Roaming\MathWorks\MATLAB\R2009b\mexopts.bat

  From template: D:\MATLAB~1\bin\win32\mexopts\msvc60opts.bat

  Done . . .

2、make

  make

此过程中一定要注意将路径转换到matlab路径下,这样才能调用make函数进行make.

上述需要注意的地方都已经指出来了,我也已经在matlab2012a和VS2010中测试过,好使。

  操作结束就可以使用现成的数据集heart_scale来测试一下了,出现Accuracy = 86.6667% (234/270) (classification)

1 load('heart_scale')
2 model = svmtrain(heart_scale_label,heart_scale_inst);  
3 [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model); 

其中的‘heart_scale’在libsvm中自带的mat文件。

二、如何参数寻优

  参考网址:http://www.ilovematlab.cn/thread-47819-1-1.html,这篇帖子介绍的非常详细,主要使用了SVMcg函数来进行C和g的寻优。

1 %添加参数寻优代码
2 [bestacc,bestc,bestg] = SVMcg(heart_scale_label,heart_scale_inst,-9,9,-1,1,5,1,1);

  因为此测试用例并不规范,因此使用不能很好的体现参数寻优之后的优势。

以上就是实验部分,通过小小的实验可以对SVM的工作有了大概的了解,同时也促进自己学习理论的动力,因此下面一片博客就主要介绍SVM理论方面的内容,因为SVM理论方面的介绍也非常多,因此我主要把那些好的参考内容进行整理,同时将自己的心得体会和理解写出来,方便自己查看,也方便大家交流。