支持向量机matlab实现源代码知识讲解.docx

上传人:b****5 文档编号:28738458 上传时间:2023-07-19 格式:DOCX 页数:14 大小:18.67KB
下载 相关 举报
支持向量机matlab实现源代码知识讲解.docx_第1页
第1页 / 共14页
支持向量机matlab实现源代码知识讲解.docx_第2页
第2页 / 共14页
支持向量机matlab实现源代码知识讲解.docx_第3页
第3页 / 共14页
支持向量机matlab实现源代码知识讲解.docx_第4页
第4页 / 共14页
支持向量机matlab实现源代码知识讲解.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

支持向量机matlab实现源代码知识讲解.docx

《支持向量机matlab实现源代码知识讲解.docx》由会员分享,可在线阅读,更多相关《支持向量机matlab实现源代码知识讲解.docx(14页珍藏版)》请在冰豆网上搜索。

支持向量机matlab实现源代码知识讲解.docx

支持向量机matlab实现源代码知识讲解

 

支持向量机matlab实现源代码

editsvmtrain

>>editsvmclassify

>>editsvmpredict

function[svm_struct,svIndex]=svmtrain(training,groupnames,varargin)

%SVMTRAINtrainsasupportvectormachineclassifier

%

%SVMStruct=SVMTRAIN(TRAINING,GROUP)trainsasupportvectormachine

%classifierusingdataTRAININGtakenfromtwogroupsgivenbyGROUP.

%SVMStructcontainsinformationaboutthetrainedclassifierthatis

%usedbySVMCLASSIFYforclassification.GROUPisacolumnvectorof

%valuesofthesamelengthasTRAININGthatdefinestwogroups.Each

%elementofGROUPspecifiesthegroupthecorrespondingrowofTRAINING

%belongsto.GROUPcanbeanumericvector,astringarray,oracell

%arrayofstrings.SVMTRAINtreatsNaNsoremptystringsinGROUPas

%missingvaluesandignoresthecorrespondingrowsofTRAINING.

%

%SVMTRAIN(...,'KERNEL_FUNCTION',KFUN)allowsyoutospecifythekernel

%functionKFUNusedtomapthetrainingdataintokernelspace.The

%defaultkernelfunctionisthedotproduct.KFUNcanbeoneofthe

%followingstringsorafunctionhandle:

%

%'linear'Linearkernelordotproduct

%'quadratic'Quadratickernel

%'polynomial'Polynomialkernel(defaultorder3)

%'rbf'GaussianRadialBasisFunctionkernel

%'mlp'MultilayerPerceptronkernel(defaultscale1)

%functionAkernelfunctionspecifiedusing@,

%forexample@KFUN,orananonymousfunction

%

%Akernelfunctionmustbeoftheform

%

%functionK=KFUN(U,V)

%

%Thereturnedvalue,K,isamatrixofsizeM-by-N,whereUandVhaveM

%andNrowsrespectively.IfKFUNisparameterized,youcanuse

%anonymousfunctionstocapturetheproblem-dependentparameters.For

%example,supposethatyourkernelfunctionis

%

%functionk=kfun(u,v,p1,p2)

%k=tanh(p1*(u*v')+p2);

%

%Youcansetvaluesforp1andp2andthenuseananonymousfunction:

%@(u,v)kfun(u,v,p1,p2).

%

%SVMTRAIN(...,'POLYORDER',ORDER)allowsyoutospecifytheorderofa

%polynomialkernel.Thedefaultorderis3.

%

%SVMTRAIN(...,'MLP_PARAMS',[P1P2])allowsyoutospecifythe

%parametersoftheMultilayerPerceptron(mlp)kernel.Themlpkernel

%requirestwoparameters,P1andP2,whereK=tanh(P1*U*V'+P2)andP1

%>0andP2<0.DefaultvaluesareP1=1andP2=-1.

%

%SVMTRAIN(...,'METHOD',METHOD)allowsyoutospecifythemethodused

%tofindtheseparatinghyperplane.Optionsare

%

%'QP'Usequadraticprogramming(requirestheOptimizationToolbox)

%'LS'Useleast-squaresmethod

%

%IfyouhavetheOptimizationToolbox,thentheQPmethodisthedefault

%method.Ifnot,theonlyavailablemethodisLS.

%

%SVMTRAIN(...,'QUADPROG_OPTS',OPTIONS)allowsyoutopassanOPTIONS

%structurecreatedusingOPTIMSETtotheQUADPROGfunctionwhenusing

%the'QP'method.Seehelpoptimsetformoredetails.

%

%SVMTRAIN(...,'SHOWPLOT',true),whenusedwithtwo-dimensionaldata,

%createsaplotofthegroupeddataandplotstheseparatinglinefor

%theclassifier.

%

%Example:

%%Loadthedataandselectfeaturesforclassification

%loadfisheriris

%data=[meas(:

1),meas(:

2)];

%%ExtracttheSetosaclass

%groups=ismember(species,'setosa');

%%Randomlyselecttrainingandtestsets

%[train,test]=crossvalind('holdOut',groups);

%cp=classperf(groups);

%%Usealinearsupportvectormachineclassifier

%svmStruct=svmtrain(data(train,:

),groups(train),'showplot',true);

%classes=svmclassify(svmStruct,data(test,:

),'showplot',true);

%%Seehowwelltheclassifierperformed

%classperf(cp,classes,test);

%cp.CorrectRate

%

%SeealsoCLASSIFY,KNNCLASSIFY,QUADPROG,SVMCLASSIFY.

%Copyright2004TheMathWorks,Inc.

%$Revision:

1.1.12.1$$Date:

2004/12/2420:

43:

35$

%References:

%[1]Kecman,V,LearningandSoftComputing,

%MITPress,Cambridge,MA.2001.

%[2]Suykens,J.A.K.,VanGestel,T.,DeBrabanter,J.,DeMoor,B.,

%Vandewalle,J.,LeastSquaresSupportVectorMachines,

%WorldScientific,Singapore,2002.

%[3]Scholkopf,B.,Smola,A.J.,LearningwithKernels,

%MITPress,Cambridge,MA.2002.

%

%SVMTRAIN(...,'KFUNARGS',ARGS)allowsyoutopassadditional

%argumentstokernelfunctions.

%setdefaults

 

plotflag=false;

qp_opts=[];

kfunargs={};

setPoly=false;usePoly=false;

setMLP=false;useMLP=false;

if~isempty(which('quadprog'))

useQuadprog=true;

else

useQuadprog=false;

end

%setdefaultkernelfunction

kfun=@linear_kernel;

%checkinputs

ifnargin<2

error(nargchk(2,Inf,nargin))

end

numoptargs=nargin-2;

optargs=varargin;

%grp2idxsortsanumericgroupingvarascending,andastringgrouping

%varbyorderoffirstoccurrence

[g,groupString]=grp2idx(groupnames);

%checkgroupisavector--thoughcharinputisspecial...

if~isvector(groupnames)&&~ischar(groupnames)

error('Bioinfo:

svmtrain:

GroupNotVector',...

'Groupmustbeavector.');

end

%makesurethatthedataiscorrectlyoriented.

ifsize(groupnames,1)==1

groupnames=groupnames';

end

%makesuredataistherightsize

n=length(groupnames);

ifsize(training,1)~=n

ifsize(training,2)==n

training=training';

else

error('Bioinfo:

svmtrain:

DataGroupSizeMismatch',...

'GROUPandTRAININGmusthavethesamenumberofrows.')

end

end

%NaNsaretreatedasunknownclassesandareremovedfromthetraining

%data

nans=find(isnan(g));

iflength(nans)>0

training(nans,:

)=[];

g(nans)=[];

end

ngroups=length(groupString);

ifngroups>2

error('Bioinfo:

svmtrain:

TooManyGroups',...

'SVMTRAINonlysupportsclassificationintotwogroups.\nGROUPcontains%ddifferentgroups.',ngroups)

end

%convertto1,-1.

g=1-(2*(g-1));

%handleoptionalarguments

ifnumoptargs>=1

ifrem(numoptargs,2)==1

error('Bioinfo:

svmtrain:

IncorrectNumberOfArguments',...

'Incorrectnumberofargumentsto%s.',mfilename);

end

okargs={'kernel_function','method','showplot','kfunargs','quadprog_opts','polyorder','mlp_params'};

forj=1:

2:

numoptargs

pname=optargs{j};

pval=optargs{j+1};

k=strmatch(lower(pname),okargs);%#ok

ifisempty(k)

error('Bioinfo:

svmtrain:

UnknownParameterName',...

'Unknownparametername:

%s.',pname);

elseiflength(k)>1

error('Bioinfo:

svmtrain:

AmbiguousParameterName',...

'Ambiguousparametername:

%s.',pname);

else

switch(k)

case1%kernel_function

ifischar(pval)

okfuns={'linear','quadratic',...

'radial','rbf','polynomial','mlp'};

funNum=strmatch(lower(pval),okfuns);%#ok

ifisempty(funNum)

funNum=0;

end

switchfunNum%maybemakethislessstrictinthefuture

case1

kfun=@linear_kernel;

case2

kfun=@quadratic_kernel;

case{3,4}

kfun=@rbf_kernel;

case5

kfun=@poly_kernel;

usePoly=true;

case6

kfun=@mlp_kernel;

useMLP=true;

otherwise

error('Bioinfo:

svmtrain:

UnknownKernelFunction',...

'UnknownKernelFunction%s.',kfun);

end

elseifisa(pval,'function_handle')

kfun=pval;

else

error('Bioinfo:

svmtrain:

BadKernelFunction',...

'Thekernelfunctioninputdoesnotappeartobeafunctionhandle\norvalidfunctionname.')

end

case2%method

ifstrncmpi(pval,'qp',2)

useQuadprog=true;

ifisempty(which('quadprog'))

warning('Bioinfo:

svmtrain:

NoOptim',...

'TheOptimizationToolboxisrequiredtousethequadraticprogrammingmethod.')

useQuadprog=false;

end

elseifstrncmpi(pval,'ls',2)

useQuadprog=false;

else

error('Bioinfo:

svmtrain:

UnknownMethod',...

'Unknownmethodoption%s.Validmethodsare''QP''and''LS''',pval);

end

case3%display

ifpval~=0

ifsize(training,2)==2

plotflag=true;

else

warning('Bioinfo:

svmtrain:

OnlyPlot2D',...

'Thedisplayoptioncanonlyplot2Dtrainingdata.')

end

end

case4%kfunargs

ifiscell(pval)

kfunargs=pval;

else

kfunargs={pval};

end

case5%quadprog_opts

ifisstruct(pval)

qp_opts=pval;

elseifiscell(pval)

qp_opts=optimset(pval{:

});

else

error('Bioinfo:

svmtrain:

BadQuadprogOpts',...

'QUADPROG_OPTSmustbeanoptsstructure.');

end

case6%polyorder

if~isscalar(pval)||~isnumeric(pval)

error('Bioinfo:

svmtrain:

BadPolyOrder',...

'POLYORDERmustbeascalarvalue.');

end

ifpval~=floor(pval)||pval<1

error('Bioinfo:

svmtrain:

PolyOrderNotInt',...

'Theorderofthepolynomialkernelmustbeapositiveinteger.')

end

kfunargs={pval};

setPoly=true;

case7%mlpparams

ifnumel(pval)~=2

error('Bioinfo:

svmtrain:

BadMLPParams',...

'MLP_PARAMSmustbeatwoelementarray.');

end

if~isscalar(pval

(1))||~isscalar(pval

(2))

error('Bioinfo:

svmtrain:

MLPParamsNotScalar',...

'Theparametersofthemulti-layerperceptronkernelmustbescalar.');

end

kfunargs={pval

(1),pval

(2)};

setMLP=true;

end

end

end

end

ifsetPoly&&~usePoly

warning('Bioinfo:

svmtrain:

PolyOrderNotPolyKernel',...

'Youspecifiedapolynomialorderbutnotapolynomialkernel');

end

ifsetMLP&&~useMLP

warning('Bioinfo:

svmtrain:

MLPParamNotMLPKernel',...

'YouspecifiedMLPparametersbutnotanMLPkernel');

end

%plotthedataifrequested

ifplotflag

[hAxis,hLines]=svmplotdata(training,g);

legend(hLines,cellstr(groupString));

end

%calculatekernelfunction

try

kx=feval(kfun,training,training,kfunargs{:

});

%ensurefunctionissymmetric

kx=(kx+kx')/2;

catch

error('Bioinfo:

svmtrain:

UnknownKernelFunction',...

'Errorcalculatingthekernelfunction:

\n%s\n',lasterr);

end

%createHessian

%addsmallconstanteyetoforcestability

H=((g*g').*kx)+sqrt(eps(class(training)))*eye(n);

ifuseQuadprog

%Thelargescalesolvercannothandlethistypeofproblem,soturnit

%off.

qp_op

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1