您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > matlab中SVM工具箱的使用方法
包已经解压到文件夹F:\R2009b\toolbox\svmmatlab中SVM工具箱的使用方法1,下载SVM工具箱:安装到matlab文件夹中1)将下载的SVM工具箱的文件夹放在\matlab71\toolbox\下2)打开matlab-File-SetPath中添加SVM工具箱的文件夹现在,就成功的添加成功了.可以测试一下:在matlab中输入whichsvcoutput回车,如果可以正确显示路径,就证明添加成功了,例如:C:\ProgramFiles\MATLAB71\toolbox\svm\svcoutput.m3,用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([-38-38]);title('C-SVC')holdon;X1=[x1,x2];Y1=[y1,y2];X=X1';Y=Y1';其中,X是100*2的矩阵,Y是100*1的矩阵C=Inf;ker='linear';globalp1p2p1=3;p2=1;然后,在matlab中输入:[nsvalphabias]=svc(X,Y,ker,C),回车之后,会显示:SupportVectorClassification_____________________________Constructing...Optimising...Executiontime:1.9secondsStatus:OPTIMAL_SOLUTION|w0|^2:0.418414Margin:3.091912Sumalpha:0.418414SupportVectors:3(3.0%)nsv=3alpha=0.00000.00000.00000.00000.00002)输入预测函数,可以得到与预想的分类结果进行比较.输入:predictedY=svcoutput(X,Y,X,ker,alpha,bias),回车后得到:predictedY=1111111113)画图输入:svcplot(X,Y,ker,alpha,bias),回车补充:X和Y为数据,m*n:m为样本数,n为特征向量数比如:取20组训练数据X,10组有故障,10组无故障的,每个训练数据有13个特征参数,则m=20,n=13Y为20*1的矩阵,其中,10组为1,10组为-1.对于测试数据中,如果取6组测试数据,3组有故障,3组无故障的,则m=6,n=13Y中,m=6,n=1://一些问题???????1.今天我在使用SVM通用工具箱对眼电的信号数据进行分类时出现如下错误:SupportVectorClassification_____________________________Constructing...Optimising...???Dimensionerror(arg3andlater).Errorin==svcat60[alphalambdahow]=qp(H,c,A,b,vlb,vub,x0,neqcstr);不知道是什么原因?答:今天上午终于找到出现这一错误的原因:它并不是SVM程序的问题,是我在整理样本时,把参数需要的样本行列颠倒所致。此处X是样本特征(行向量),Y为对应样本的类别(一行对应X的一行样本)!2.使用第一个stevegunn'sSVM遇到一个问题。???InvalidMEX-file‘××××\svm\qp.dll':Thespecifiedprocedurecouldnotbefound.???InvalidMEX-file'D:\ProgramFiles\MATLAB\R2007a\toolbox\svm\qp.dll':找不到指定的程序。Errorin==svcat60[alphalambdahow]=qp(H,c,A,b,vlb,vub,x0,neqcstr);这个问题是由于版本问题引起的,我使用的是MatlabR2007版。我正在努力找解决方案,看看能否重新编译一下qp.dll。查阅一晚上资料,终于找到如何解决这个简单的问题了。关键是一开始没有仔细看。问题:???InvalidMEX-file'D:\ProgramFiles\MATLAB\R2007a\toolbox\svm\qp.dll':找不到指定的程序。问题描述:mex在不同windowsOS下编译的结果,所以我们需要重新编译一下qp.dll方法:stevegunn的包下面有一个optimiser文件夹,把currentDiretory目录改为optimiser目录,例如D:\ProgramFiles\MATLAB\R2007a\toolbox\svm\Optimiser,然后运行命令mex-vqp.cpr_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([-38-38]);title('C-SVC')holdon;X1=[x1,x2];Y1=[y1,y2];X=X1';Y=Y1';C=Inf;ker='linear';globalp1p2p1=3;p2=1;[nsvalphabias]=svc(X,Y,ker,C)注:有的读者通过google或者百度搜索,???InvalidMEX-file找不到指定的程序,找到这里来了,呵呵。其实该文章是对svm的matlab工具包编写的。解决:???InvalidMEX-file的一个共性就是,版本问题,您可以尝试更换matlab版本。例如您的mexdll在6.5版本中编写的,请不要使用7.4版本去调用,matlab就这一点很讨厌人...FrysooSVM函数详解支持向量机分类的相关函数1.[nsvalphabias]=svc(X,Y,ker,C)X是训练样本Y是训练样本的输出,即Labelker为核函数,支持向量机的工具箱支持如下几种核函数:linearpolyrbfsigmoidsplinebsplinefouriererfbanova其中,除了linear和spline两个核函数之外,其他的核函数还需要设定一些参数。例如核函数poly的阶数、径向基函数rbf的宽度等。这些参数的设置在工具箱中的全局变量p1,p2中设置。Valuesforker:linear-poly-p1isdegreeofpolynomialrbf-p1iswidthofrbfs(sigma)sigmoid-p1isscale,p2isoffsetspline-bspline-p1isdegreeofbsplinefourier-p1isdegreeerfb-p1iswidthofrbfs(sigma)anova-p1ismaxorderoftermsnsv是svc函数返回的训练样本中支持向量的个数alpha是svc函数返回的每个训练样本对应的拉格朗日乘子,拉格朗日乘子不为零的向量即为支持向量bias是偏置量2.predictedY=svcoutput(trnX,trnY,tstX,ker,alpha,bias,actfunc)trnX训练数据trnY训练数据类别tstX测试数据ker核函数alpha拉格朗日乘子LagrangeMultipliersbias偏置量actfunc激励函数:0(默认值)hard;1soft平滑该函数根据训练样本得到的最优分类面计算实际样本的输出。利用它还可以得到测试样本的分类情况,对最优分类面进行测试。3.[h]=svcplot(X,Y,ker,alpha,bias,aspect,mag,xaxis,yaxis,input)支持向量机分类绘图函数svcplot,用于绘制最优分类面,并标识出支持向量X训练数据Y训练数据类别ker核函数alpha拉格朗日乘子bias偏置量aspect图像纵横比:0(默认)fixed;1variablemag缩放率0.1默认xaxis1(默认)yaxis2(默认)inputvectorofinputvalues(default:zeros(no_of_inputs))4.err=svcerror(trnX,trnY,tstX,tstY,ker,alpha,bias)统计测试样本分类错误数量的函数,用于统计利用已知的最优分类面对测试样本进行分类,发生错误分类的数目trnX训练数据trnY训练目标类别tstX预测数据tstY预测目标类别ker核函数alpha拉格朗日乘子bias偏置量5.uiclass简易图形用户界面函数。1loadfisheriris2data=[meas(:,1),meas(:,2)];3groups=ismember(species,'setosa');4[train,test]=crossvalind('holdOut',groups);5cp=classperf(groups);6svmStruct=svmtrain(data(train,:),groups(train),'showplot',true);7classes=svmclassify(svmStruct,data(test,:),'showplot',true);8classperf(cp,classes,test);9cp.CorrectRategroups=cellstr(num2str(groups))第一行是读入matlab数据集第二行是仅分析2列,对根据这2列的数据进行分类第三行是生成组号.原有的组名是setosa,versicolor,virginica.这里进行分类是分成2类,是setosa(组号为1)以及非setosa(组号为0)第四行是生成交叉检验的数据.即决定哪一些行作为测试集,哪一些行作为训练集.其中train中为1的元素表示训练集,test中为1的元素表示测试集第五行是生成了一个评估分类结果的对象第六行使用训练集的数据生成svm分类器第七行使用这个分类器对测试集的数据进行分类.结果放在classes中第八行评估分类的性能,把评估器,分类结果和测试集的索引作为参数进行评估第九行得出评估结果
本文标题:matlab中SVM工具箱的使用方法
链接地址:https://www.777doc.com/doc-2887133 .html