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)
load('heart_scale')
model = svmtrain(heart_scale_label,heart_scale_inst);
[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的寻优。
%添加参数寻优代码
[bestacc,bestc,bestg] = SVMcg(heart_scale_label,heart_scale_inst,-,,-,,,,);
因为此测试用例并不规范,因此使用不能很好的体现参数寻优之后的优势。
以上就是实验部分,通过小小的实验可以对SVM的工作有了大概的了解,同时也促进自己学习理论的动力,因此下面一片博客就主要介绍SVM理论方面的内容,因为SVM理论方面的介绍也非常多,因此我主要把那些好的参考内容进行整理,同时将自己的心得体会和理解写出来,方便自己查看,也方便大家交流。
Libsvm的MATLAB调用和交叉验证的更多相关文章
- MATLAB曲面插值及交叉验证
在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点.插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值.曲面插值是对三维数据进行离 ...
- 如何调用sklearn模块做交叉验证
终于搞明白了如何用sklearn做交叉验证!!! 一般在建立完模型之后,我们要预测模型的好坏,为了试验的可靠性(排除一次测试的偶然性)我们要进行多次测试验证,这时就要用交叉验证. sklearn中的s ...
- libsvm交叉验证与网格搜索(参数选择)
首先说交叉验证.交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题.交叉验证一般要尽量满足:1 ...
- Matlab交叉验证函数——crossvalind
Generate cross-validation indices 生成交叉验证索引 Syntax语法 Indices = crossvalind('Kfold', N, K) %K折交叉验证 ...
- Libsvm在matlab环境下使用指南
一.安装 http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/.在这个地址上可以下的包含matlab接口的源程序.下载完后可以放到放到任意的盘上解压,最好建 ...
- 机器学习:weka中Evaluation类源码解析及输出AUC及交叉验证介绍
在机器学习分类结果的评估中,ROC曲线下的面积AOC是一个非常重要的指标.下面是调用weka类,输出AOC的源码: try { // 1.读入数据集 Instances data = new Inst ...
- k-折交叉验证(k-fold crossValidation)
k-折交叉验证(k-fold crossValidation): 在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数 ...
- 交叉验证(cross validation)
转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...
- 机器学习——交叉验证,GridSearchCV,岭回归
0.交叉验证 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set) ...
随机推荐
- cojs 火龙果 解题报告
昨天晚上做了一发HNOI,感觉有很多新的idea 于是就选了一个出成题目辣 我们考虑暴力 暴力很明显是把这个图A<=D,B<=E的形态搞出来 之后处理相关的询问 这样我们会很容易得到正解: ...
- [topcoder] EllysNumberGuessing
http://community.topcoder.com/stat?c=problem_statement&pm=12975 简单题 #include <cstdlib> #in ...
- TCL语言笔记:TCL过程控制练习
1.青蛙爬井 for {set day 1;set cur 7} {$cur<77} {incr cur 2 ;incr day } { } puts $day 2.求1加到100 proc g ...
- 编译器的未来——我们还需要C++么?
在未来我们还需要纯C++开发模式么? 随着C++11的诞生,C++已经越来越臃肿,从03的时候就觉得C++实在是太复杂了.以一个合格C++程序员的标准来简单的来说3-5年略有小成,5-8年才可以说自己 ...
- Spring3 报org.aopalliance.intercept.MethodInterceptor问题解决方法
原文:Spring3 报org.aopalliance.intercept.MethodInterceptor问题解决方法 一 开发环境:JDK5+Spring3.0.5+Myeclipse6.6+T ...
- 为什么国外程序员爱用Mac?
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里.普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒.那么为什么专业人士也对 Mac 情有独钟呢?从个人使用 ...
- linux sort命令学习
linux sort命令以行为单位对文本文件进行排序. 接下来我们会以/tmp/sort_test.txt这个文本文件为例对sort命令的用法进行说明. sh-# cat /tmp/sort_test ...
- 使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL
这里使用的是HttpComponents-Client-4.1.2 package com.jadyer.util; import java.io.File; import java.io.FileI ...
- poi操作oracle数据库导出excel文件2
package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFound ...
- Linux find xargs rm .orig
/********************************************************************* * Linux find xargs rm .orig * ...