支持向量机程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

该工具箱包括了二种分类,二种回归,以及一种一类支持向量机算法(1)Main_SVC_C.m---C_SVC二类分类算法(2)Main_SVC_Nu.m---Nu_SVC二类分类算法(3)Main_SVM_One_Class.m---One-Class支持向量机(4)Main_SVR_Epsilon.m---Epsilon_SVR回归算法(5)Main_SVR_Nu.m---Nu_SVR回归算法%-------------------------------------------------------%3使用(1)目录下以Main_开头的文件即是主程序文件,直接按快捷键F5运行即可(2)工具箱中所有程序均在Matlab6.5环境中调试通过,不能保证在Matlab其它版本正确运行%-------------------------------------------------------%%%SupportVectorMachineMatlabToolbox1.0-CSupportVectorClassification%Platform:Matlab6.5/Matlab7.0%Copyright:LUZhen-bo,NavyEngineeringUniversity,WuHan,HuBei,P.R.China,430033%E-mail:luzhenbo@yahoo.com.cn%Homepage::Chih-ChungChang,Chih-JenLin.LIBSVM:aLibraryforSupportVectorMachines%%Solvethequadraticprogrammingproblem-quadprog.mclcclearcloseall%------------------------------------------------------------%%定义核函数及相关参数C=200;%拉格朗日乘子上界ker=struct('type','linear');%ker=struct('type','ploy','degree',3,'offset',1);%ker=struct('type','gauss','width',1);%ker=struct('type','tanh','gamma',1,'offset',0);%ker-核参数(结构体变量)%thefollowingfields:%type-linear:k(x,y)=x'*y%poly:k(x,y)=(x'*y+c)^d%gauss:k(x,y)=exp(-0.5*(norm(x-y)/s)^2)%tanh:k(x,y)=tanh(g*x'*y+c)%degree-Degreedofpolynomialkernel(positivescalar).%offset-Offsetcofpolynomialandtanhkernel(scalar,negativefortanh).%width-WidthsofGausskernel(positivescalar).%gamma-Slopegofthetanhkernel(positivescalar).%------------------------------------------------------------%%构造两类训练样本n=50;randn('state',3);x1=randn(n,2);y1=ones(n,1);x2=5+randn(n,2);y2=-ones(n,1);figure(1);plot(x1(:,1),x1(:,2),'bx',x2(:,1),x2(:,2),'k.');holdon;X=[x1;x2];%训练样本,n×d的矩阵,n为样本个数,d为样本维数Y=[y1;y2];%训练目标,n×1的矩阵,n为样本个数,值为+1或-1%------------------------------------------------------------%%训练支持向量机ticsvm=C_SVC_Train(X,Y,C,ker);t_train=toc%svm支持向量机(结构体变量)%thefollowingfields:%ker-核参数%x-训练样本%y-训练目标;%a-拉格朗日乘子%------------------------------------------------------------%%寻找支持向量a=svm.a;epsilon=1e-8;%如果小于此值则认为是0i_sv=find(aepsilon);%支持向量下标plot(X(i_sv,1),X(i_sv,2),'ro');%------------------------------------------------------------%%测试输出[x1,x2]=meshgrid(-2:0.05:7,-2:0.05:7);[rows,cols]=size(x1);nt=rows*cols;%测试样本数Xt=[reshape(x1,nt,1),reshape(x2,nt,1)];ticYd=C_SVC_Sim(svm,Xt);%测试输出t_sim=tocYd=reshape(Yd,rows,cols);contour(x1,x2,Yd,[00],'m');%分类面holdoff;function[K]=CalcKernel(ker,x,y)%Calculatekernelfunction.%%x:输入样本,n1×d的矩阵,n1为样本个数,d为样本维数%y:输入样本,n2×d的矩阵,n2为样本个数,d为样本维数%%ker核参数(结构体变量)%thefollowingfields:%type-linear:k(x,y)=x'*y%poly:k(x,y)=(x'*y+c)^d%gauss:k(x,y)=exp(-0.5*(norm(x-y)/s)^2)%tanh:k(x,y)=tanh(g*x'*y+c)%degree-Degreedofpolynomialkernel(positivescalar).%offset-Offsetcofpolynomialandtanhkernel(scalar,negativefortanh).%width-WidthsofGausskernel(positivescalar).%gamma-Slopegofthetanhkernel(positivescalar).%%ker=struct('type','linear');%ker=struct('type','ploy','degree',d,'offset',c);%ker=struct('type','gauss','width',s);%ker=struct('type','tanh','gamma',g,'offset',c);%%K:输出核参数,n1×n2的矩阵%-------------------------------------------------------------%%转成列向量x=x';y=y';%-------------------------------------------------------------%switchker.typecase'linear'K=x'*y;case'ploy'd=ker.degree;c=ker.offset;K=(x'*y+c).^d;case'gauss's=ker.width;rows=size(x,2);cols=size(y,2);tmp=zeros(rows,cols);fori=1:rowsforj=1:colstmp(i,j)=norm(x(:,i)-y(:,j));endendK=exp(-0.5*(tmp/s).^2);case'tanh'g=ker.gamma;c=ker.offset;K=tanh(g*x'*y+c);otherwiseK=0;endfunctionsvm=C_SVC_Train(X,Y,C,ker)%输入参数:%X训练样本,n×d的矩阵,n为样本个数,d为样本维数%Y训练目标,n×1的矩阵,n为样本个数,值为+1或-1%C拉格朗日乘子上界%ker核参数(结构体变量)%thefollowingfields:%type-linear:k(x,y)=x'*y%poly:k(x,y)=(x'*y+c)^d%gauss:k(x,y)=exp(-0.5*(norm(x-y)/s)^2)%tanh:k(x,y)=tanh(g*x'*y+c)%degree-Degreedofpolynomialkernel(positivescalar).%offset-Offsetcofpolynomialandtanhkernel(scalar,negativefortanh).%width-WidthsofGausskernel(positivescalar).%gamma-Slopegofthetanhkernel(positivescalar).%输出参数:%svm支持向量机(结构体变量)%thefollowingfields:%ker-核参数%x-训练样本%y-训练目标;%a-拉格朗日乘子%------------------------------------------------------------%%解二次优化n=length(Y);H=(Y*Y').*Calckernel(ker,X,X);f=-ones(n,1);A=[];b=[];Aeq=Y';beq=0;lb=zeros(n,1);ub=C*ones(n,1);a0=zeros(n,1);options=optimset;options.LargeScale='off';options.Display='off';[a,fval,eXitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options);eXitflag%------------------------------------------------------------%%输出svmsvm.ker=ker;svm.x=X;svm.y=Y;svm.a=a;functionYd=C_SVC_Sim(svm,Xt)%输入参数:%svm支持向量机(结构体变量)%thefollowingfields:%ker-核参数%type-linear:k(x,y)=x'*y%poly:k(x,y)=(x'*y+c)^d%gauss:k(x,y)=exp(-0.5*(norm(x-y)/s)^2)%tanh:k(x,y)=tanh(g*x'*y+c)%degree-Degreedofpolynomialkernel(positivescalar).%offset-Offsetcofpolynomialandtanhkernel(scalar,negativefortanh).%width-WidthsofGausskernel(positivescalar).%gamma-Slopegofthetanhkernel(positivescalar).%x-训练样本%y-训练目标;%a-拉格朗日乘子%%Xt测试样本,n×d的矩阵,n为样本个数,d为样本维数%输出参数:%Yd测试输出,n×1的矩阵,n为样本个数,值为+1或-1%------------------------------------------------------------%ker=svm.ker;X=svm.x;Y=svm.y;a=svm.a;%--------------------------------------------------------

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功