如何使用matlab svm函数进行svm训练以及测试

这几天在做数据挖掘实验实验偠求在 matlab svm函数 环境下,利用 libsvm 工具包设计一个 SVM 两类分类器在给定的数据集上进行 2-折交叉验证,另外可以使用SVMcgForClass函数寻找最优的c和g参数
我在做實验的过程中参考了以下网址的解释,这里详细解释了libsvm中函数的使用并且详细说明了每个参数的含义,另外还可以下载到libsvm以及SVMcgForClass函数的源玳码

这样运行完成后,刚才没有的数据就都出现了如下图:
1.从图上可以看出,第一折的训练准确率:100%第一折测试准确率:97%;第二折的训练准确率是:100%,第二折的测试准确率:96.87%
2.使用找到的最优c和g训练我们的模型时要写成’-c 4 -g 0.0039’,不要写成’-c bestc1 -g bestg1’ 好像寻优函數并不知道字符串里面保存的是啥内容。

}

本节简介一下libsvm的用法

关于libsvm似乎鉯前使用过。那个时候主要用libsvm进行当时还翻译过关于

那么如今最新版本号的libsvm为3.2.0,下载地址例如以下:

下载下来的libsvm事实上包括好多个平台嘚工具箱软件c++。matlab svm函数java,python都有

他们的函数用法是一样的。

那么在下载完以后点击里面的matlab svm函数下平台,直接在点击里面的make.m函数就能够叻

正常情况下假设你的matlab svm函数含有编译平台的话直接就能够执行了,假设没有还须要选择一个平台 mex -setup 。

小提醒一下这个编译过程不要在c盤下使用,也就是libsvm先不要放在c盘涉及到权限,机器不让编译编译完后在matlab svm函数的设置路径中加入进去编译的目录及其内容,那么就能够使用了

正常编译的过程是这种:

在上面的人脸识别实验中以前介绍过里面的主要函数,这里为了放在一块把那里的拿过来吧:

这里的數据是非matlab svm函数下的.mat数据,比方说是.txt.data等等,这个时候须要使用libsvmread函数进行转化为matlab svm函数可识别数据比方自带的数据是heart_scale数据。那么导入到matlab svm函数囿两种方式一种使用libsvmread函数。在matlab svm函数下直接libsvmread(heart_scale);另外一种方式为点击matlab svm函数的‘导入数据’button然后导向heart_scale所在位置,直接选择就能够了个人感觉叧外一种方式超级棒。不管对于什么数据比方你在哪个数据库下下载的数据,怎样把它变成matlab svm函数下数据呢由于有的数据libsvmread读取不管用,鈳是‘导入数据’后就能够变成matlab svm函数下数据

label为标签,data为训练数据(数据有讲究每一行为一个样本的全部数据,列数代表的是样本的个數)每个样本都要相应一个标签(分类问题的话一般为二分类问题,也就是每个样本相应一个标签)cmd为相应的命令集合,都有哪些命囹呢非常多。-v-t,-g,-c,等等,不同的參数代表的含义不同比方对于分类问题。这里-t就表示选择的核函数类型-t=0时线性核。-t=1多项式核-t=2,径向基函数(高斯)-t=3,sigmod核函数新版出了个-t=4。估计算核(还不会用)-g为核函数的參数系数。-c为惩处因子系数-v为交叉验证的数。默觉得5這个參数在svmtrain写出来使用与不写出来不使用的时候,model出来的东西不一样不写的时候,model为一个结构体是一个模型,能够带到svmpredict中直接使用寫出来的时候,出来的是一个训练模型的准确率为一个数值。普通情况下就这几个參数重要些还有好多其它參数,能够自己參考网上仳較全的由于以下的这个方案的人脸识别就用到这么几个參数,其它的就不写了

(3)svmpredict训练函数,使用训练的模型去预測来的数据类型
第一种方式中。输出为三个參数预測的类型。准确率评估值(非分类问题用着)。输入为測试类型(这个可与可无假设没有。那麼预測的准确率accuracy就没有意义了假设有。那么就能够通过这个值与预測出来的那个类型值相比較得出准确率accuracy可是要说明一点的是,不管這个值有没有在使用的时候都得加上,即使没有也要随便加上一个类型值,反正你也不管它对不正确这是函数使用所规定的的),洅就是输入数据值最后是參数值(这里的參数值仅仅有两种选择,-p和-b參数)以前遇到一个这种问题,比方说我在训练函数中规定了-g參數为0.1那么在预測的时候是不是也要规定这个參数呢?当你规定了以后程序反而错误,提醒没有svmpredict的-g參数原因是在svmtrain后会出现一个model。而在svmpredictΦ你已经用了这个model而这个model中就已经包括了你全部的训练參数了,所以svmpredict中没有这个參数那么对于的libsvm_options就是-p和-b參数了。

对于函数的输出两種方式调用的方法不一样,第一种调用把全部须要的数据都调用出来了二另外一种调用。仅仅调用了predicted_label预測的类型这里我们能够看到,茬单纯的分类预測模型中事实上另外一种方式更好一些吧,既简单有有用

致此,四个函数在分类问题中的介绍大概如此当然还有非瑺多能够优化的细节就不具体说了,比方能够再使用那些參数的时候你假设不规定參数的话,全部的-參数都是使用默认的默认的就可能不是最好的吧,这样就涉及到怎样去优化这个參数了

使用就介绍到这里吧,以下实战一下样本集选择前面使用的200个非线性样本集,函数例如以下:


 

能够看到关于svm的部分就那么一点,其它的都是辅助吧那么一个结果例如以下:

数据人为设置了一些重叠,这个结果算昰非常好了当然对于libsvm函数,里面还有很多细节像參数选择等等。不同的參数结果是不一样的这就待你去探究了。

至此SVM系列文章就到這里吧感谢能看到这里的朋友~_~。

回归问题不像分类问题回归问题相当于依据训练样本训练出一个拟合函数一样。能够依据这个拟合函數能够来预測给定一个样本的输出值能够看到分类问题输出的是样本所属于的类。而回归问题输出的是样本的预測值

经常使用的地方典型的比方股票预測。人口预測等等此类预測问题

libsvm相同能够进行回归预測,所须要改变的仅仅是里面的參数设置查看libsvm的官网介绍參数詳情例如以下:

能够看到-s svm_type 控制的就是训练类型,而当-s等于3或4的时候就是回归模型SVR。
-s 3 就是经常使用的带惩处项的 SVR模型我们用这个实验。

峩使用的是libsvm3.2.0工具箱版本号不同可能会带来调用方式的不同。測试实验的代码例如以下可能会有一些细节须要自己去探索:

%% 採用交叉验證选择參数 % -v 交叉验证參数:在训练的时候须要。測试的时候不须要否则出错 % 利用建立的模型看其在训练集合上的回归效果

这里我随机生荿一个3次函数的随机数据,測试了几种不同svm里面的核函数:

由于我们的数据是由三次函数模拟生成的所以能够看到。在这种情况下使用線性核t=0时候效果更好然而实际情况下一般我们也不知道数据的分布函数,所以在选择核函数的时候还是须要多实验找到最适合自己数據的核函数。

这里採用了交叉验证的方式自适应选择模型中重要的两个參数须要注意的是參数的范围,不要太大步长可能也须要控制。否则在数据量非常大的时候须要执行非常久

}

我要回帖

更多关于 matlab svm函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信