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理论方面的介绍也非常多,因此我主要把那些好的参考内容进行整理,同时将自己的心得体会和理解写出来,方便自己查看,也方便大家交流。

时间: 2024-11-06 02:15:54

Libsvm的MATLAB调用和交叉验证的相关文章

机器学习 libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证. 交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题. 交叉验证一般要尽量满足: 1)训练集的比例要足够多,一般大于一半 2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validation Double cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集

如何调用sklearn模块做交叉验证

终于搞明白了如何用sklearn做交叉验证!!! 一般在建立完模型之后,我们要预测模型的好坏,为了试验的可靠性(排除一次测试的偶然性)我们要进行多次测试验证,这时就要用交叉验证. sklearn中的sklearn.cross_validation.cross_val_score函数已经帮我们做好了. 直接调用就可以了. 无论是做回归还是做分类,都可以用这个函数. 具体用法: from sklearn.cross_validation import cross_val_score metric =

libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证.交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题.交叉验证一般要尽量满足:1)训练集的比例要足够多,一般大于一半2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validationDouble cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集,进行两回

Libsvm在matlab环境下使用指南

一.安装 http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/.在这个地址上可以下的包含matlab接口的源程序.下载完后可以放到放到任意的盘上解压,最好建一个专门来放matlab程序的文件夹.打开matlab,在matlab的面板上找到set path选项(不同版本不一样R2010b在file菜单下),将刚下载的libsvm整个目录都添加到matlab的搜索路径里.然后将当前路径定位到libsvm/matlab目录下(在current floder(

R: Kriging interpolation and cross validation 克里金插值及交叉验证浅析

克里金插值的基本介绍可以参考ARCGIS的帮助文档[1]. 其本质就是根据已知点的数值,确定其周围点(预测点)的数值.最直观的方法就是找到已知点和预测点数值之间的关系,从而预测出预测点的数值.比如IDW插值方法,就是假设已知点和预测点的值跟它们相对距离成反比.克里金插值的精妙之处在于它不仅考虑了已知点和预测点的距离关系,还考虑了这些已知点之间的自相关关系. 如何衡量已知点之间的自相关关系呢?通常使用的就是半变异函数,其公式如下[1]: Semivariogram(distance h) = 0.

Matlab调用外部库函数方法和注意事项

在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以节省内存开销. 加载库 加载库加载库 加载库 语法:loadlibrary('shrlib','hfile') 其中shrlib为加载的动态链接库文件名(filename.dll),hfile为头文件名,它包含函数原型.例如,当加载包 含MATLAB中mx程序的libmx库时,可以使用下列语句. h

Matlab调用C程序

Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C语言实现,并编译成Mex文件,Matlab便可以像调用内建函数一样调用C编写的函数.Mex文件其实是一种动态链接库,旧版本Matlab可以直接调用.dll,新版本要调用.mexw32或.mexw64文件. 编译过程需要C语言编译器,在Matlab中键入mex –setup进行安装与配置. MEX文件

机器学习:weka中Evaluation类源码解析及输出AUC及交叉验证介绍

在机器学习分类结果的评估中,ROC曲线下的面积AOC是一个非常重要的指标.下面是调用weka类,输出AOC的源码: try { // 1.读入数据集 Instances data = new Instances( new BufferedReader( new FileReader("E:\\Develop/Weka-3-6/data/contact-lenses.arff"))); data.setClassIndex(data.numAttributes() - 1); // 2.

基于sklearn和keras的数据切分与交叉验证

在训练深度学习模型的时候,通常将数据集切分为训练集和验证集.Keras提供了两种评估模型性能的方法: 使用自动切分的验证集 使用手动切分的验证集 一.自动切分 在Keras中,可以从数据集中切分出一部分作为验证集,并且在每次迭代(epoch)时在验证集中评估模型的性能. 具体地,调用model.fit()训练模型时,可通过validation_split参数来指定从数据集中切分出验证集的比例. # MLP with automatic validation set from keras.mode