目的:SVM_SteveGunn添加至我的matlab工具箱内
工具/原料:Matlab 2013B 、SVM工具箱
操作步骤:
1、下载svm工具包
地址:http://www.pudn.com/downloads343/sourcecode/math/detail1499382.html
2、解压工具包到E:\matlab\toolbox ,也可以解压后自己命名后复制过去。 (安装目录)
3、打开matlab点击set path---->add folder(也可以选择下面的addwithsubfolder) 然后把你的工具箱文件夹添加进去就可以了,保存。
4、刷新路径,这一步一定要做,路径加进去后在file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下。
5、验证是否添加成功,最后在matlab的命令栏中输入which svcoutput可以查看路径E:\matlab\toolbox\svm\svcoutput.m就可以了。
6、调用工具箱:
用SVM做分类的使用方法 1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2 我做的测试中取的数据为: N = 50; n=2*N; randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([-3 8 -3 8]); title('C-SVC') hold on; X1 = [x1,x2]; Y1 = [y1,y2]; X=X1'; Y=Y1'; 其中,X是100*2的矩阵,Y是100*1的矩阵 C=Inf; ker='linear'; global p1 p2 p1=3; p2=1; 然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示: Support Vector Classification _____________________________ Constructing ... Optimising ... Execution time: 1.9 seconds Status : OPTIMAL_SOLUTION |w0|^2 : 0.418414 Margin : 3.091912 Sum alpha : 0.418414 Support Vectors : 3 (3.0%) nsv = 3 alpha = 0.0000 0.0000 0.0000 0.0000 0.0000 2)输入预测函数,可以得到与预想的分类结果进行比较. 输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到: predictedY = 1 1 1 1 1 1 1 1 1 3)画图 输入:svcplot(X,Y,ker,alpha,bias),回车
补充: X和Y为数据,m*n:m为样本数,n为特征向量数 比如:取20组训练数据X,10组有故障,10组无故障的,每个训练数据有13个特征参数,则m=20,n=13 Y为20*1的矩阵,其中,10组为1,10组为-1. 对于测试数据中,如果取6组测试数据,3组有故障,3组无故障的,则m=6,n=13 Y中,m=6,n=1 |
可能出现的问题:
1.今天我在使用SVM通用工具箱对眼电的信号数据进行分类时出现如下错误: Support Vector Classification _____________________________ Constructing ... Optimising ... ??? Dimension error (arg 3 and later). Error in ==> svc at 60 [alpha lambda how] = qp(H, c, A, b, vlb, vub, x0, neqcstr); 不知道是什么原因?
答:今天上午终于找到出现这一错误的原因:它并不是SVM程序的问题,是我在整理样本时,把参数需要的样本行列颠倒所致。 此处X是样本特征(行向量),Y为对应样本的类别(一行对应X的一行样本)!
2.使用第一个steve gunn 's SVM 遇到一个问题。 ??? Invalid MEX-file ‘××××\svm\qp.dll': The specified procedure could not be found. ??? Invalid MEX-file 'D:\Program Files\MATLAB\R2007a\toolbox\svm\qp.dll': 找不到指定的程序。 Error in ==> svc at 60 [alpha lambda how] = qp(H, c, A, b, vlb, vub, x0, neqcstr); 这个问题是由于版本问题引起的,我使用的是Matlab R2007版。我正在努力找解决方案,看看能否重新编译一下qp.dll。 查阅一晚上资料,终于找到如何解决这个简单的问题了。关键是一开始没有仔细看。
问题:??? Invalid MEX-file 'D:\Program Files\MATLAB\R2007a\toolbox\svm\qp.dll':找不到指定的程序。 问题描述:mex在不同windows OS下编译的结果,所以我们需要重新编译一下qp.dll 方法:steve gunn 的包下面有一个optimiser 文件夹,把current Diretory目录改为optimiser目录,例如D:\Program Files\MATLAB\R2007a\toolbox\svm\Optimiser,然后运行命令 >> mex -v qp.c pr_loqo.c 命令运行完毕后,你会发现原先的qp.dll变为qp.dll.old,还出现了qp.mexw32,我们把该文件改为qp.dll 复制到工具箱文件夹下。原先的工具箱文件qp.dll可以先改一下名字....(Frysoo@hotmail.com) |
这个问题解决了... 我运行下面的文件通过(该文件从网所搜索测试,作者没有求证,感谢原作者)。
N = 50; n=2*N;randn('state',6); x1 = randn(2,N); y1 = ones(1,N); x2 = 5+randn(2,N);y2 = -ones(1,N); figure;plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');axis([-3 8 -3 8]);title('C-SVC') hold on;X1 = [x1,x2];Y1 = [y1,y2]; X=X1';Y=Y1'; C=Inf; ker='linear'; global p1 p2 p1=3; p2=1; [nsv alpha bias] = svc(X,Y,ker,C) |
|