⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mregwav3.m

📁 关于svm的例程
💻 M
字号:
%
% Example of multiscale approximation 
% Hyperparameters adjustments by CrossValidation
%
% Wavelet frame are used for approximating a
% Sin + sinc functions.
%
%
% 13/11/2000 AR
%
%


%--------------------------------------------------------------------%
%																	 %
%				   Initialisation       							 % 
%																	 %
%--------------------------------------------------------------------%


close all
clear all

lambdavect=[100 200 500 1000 1200];  % 40
lambda1vect=[10 50 100 200 500];
%lambdavect=200;
%lambda1vect=100;
kmax=length(lambdavect);
jmax=length(lambda1vect);

itermax=1;
errabs=zeros(itermax,2);
errl2=zeros(itermax,2);
for iter=1:itermax
   
   
   %--------------------------------------------------------------------%
   %																	%
   %					BUILDING DATA     								% 
   %																	%
   %--------------------------------------------------------------------%
   bruit=0.2;
   N=100;
   xapp=sort([0.01; 9.99;10*rand(N-2,1)]);
   
   yapp=sin(xapp)+sinc(1*(xapp-5))+sinc(5*(xapp-2))+bruit*randn(size(xapp));
   xvalid=sort([0.01; 9.99;10*rand(N-2,1)]);
   yvalid=sin(xvalid)+sinc(1*(xvalid-5))+sinc(5*(xvalid-2))+bruit*randn(size(xvalid));
   
   xf=linspace(0,10,200)';
   yapprox=sin(xf);
   ydet3=sinc(1*(xf-5));
   ydet2=sinc(5*(xf-2));
   yf=yapprox+ydet3+ydet2;   
   
   %--------------------------------------------------------------------%
   %																	%
   %				Building Frame Kernel and Span functions           	% 
   %																	%
   %--------------------------------------------------------------------%
   
   
   
   
   n=200;
   t=linspace(0,10,n)';
   uo=1;
   a=2^0.25;
   bord1=0;
   bord2=10;
   dilation=[-10];
   framematrix=framewav(t,dilation,uo,a,bord1,bord2);
   
   x1=xapp;
   x2=xapp;
   kernel='numerical';
   spanning='wavelet';
   dilation=[-5 0 5];
   Kstep1=kernelframe(x1,kernel,x2,framematrix,t);
   Tstep1=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   x1=xvalid;
   Kstep1v=kernelframe(x1,kernel,x2,framematrix,t);
   Tstep1v=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   
   uo=1;
   a=2^0.25;
   bord1=0;
   bord2=10;
   dilation=[-5];
   framematrix=framewav(t,dilation,uo,a,bord1,bord2);
      kernel='numerical';
   spanning='wavelet';
   dilation=[0 5];
   uo=1;
   x1=xapp;
   x2=xapp;
   Kstep2=kernelframe(x1,kernel,x2,framematrix,t);
   Tstep2=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   x1=xvalid;
   Kstep2v=kernelframe(x1,kernel,x2,framematrix,t);
   Tstep2v=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   
   errmreg=inf;
   
   %--------------------------------------------------------------------%
   %																	%
   %					Multiscale Wavelet Regularization   			% 
   %																	%
   %--------------------------------------------------------------------%
   for k=1:kmax
      for j=1:jmax
         lambda=lambdavect(k);
         lambda1=lambda1vect(j);
         
         [c,d]=regsolve(Kstep1,Tstep1,yapp,lambda);
         y1=Tstep1*d;
         
         
         det1=Kstep1v*c;
         f1=Kstep1v*c+Tstep1v*d;
         
         
         [c,d]=regsolve(Kstep2,Tstep2,y1,lambda1);
         y2=Tstep2*d;
         det2=Kstep2v*c;
         f2=Kstep2v*c+Tstep2v*d;
         approx=Tstep2v*d;
         yfull=approx+det1+det2;
         
         
         %--------------------------------------------------------------------%
         %																	  %
         %								Error Processing             		  % 
         %																	  %
         %--------------------------------------------------------------------%
         
         
         
         errfull=sum( (yvalid-yfull).^2/200);
         %fprintf('k:%d j:%d  errfull: %f \n',k,j,errfull);
         
         if errfull<errmreg
            lambdamini=lambda;
            lambda1mini=lambda1;
            errmreg=errfull;
            %--------------------------------------------------------------------%
            %																	 %
            %						Saving Results      		    			 % 
            %																	 %
            %--------------------------------------------------------------------%   
            %save hypermreg k j  errl2
         end;
      end;
   end;
   
   
   %--------------------------------------------------------------------%
   %																	%
   %					SVM Approximation								% 
   %																	%
   %--------------------------------------------------------------------%
   %------------------------ Learning Parameters ------------------------   lambda3 = 0.000001; 
   kernel='gaussian';
   errmini=inf;
   cmat=[1 5 10 15 20 25];
   epsilonmat=[0.01 0.05 0.1];
   kerneloptionmat=[0.2 0.3 0.4 0.5];
   %cmat=1;
   %epsilonmat=0.1;
   %kerneloptionmat=0.25;
   for i=1:length(cmat);
      for j=1:length(epsilonmat);
         for k=1:length(kerneloptionmat);
            C=cmat(i);
            epsilon=epsilonmat(j);
            kerneloption=kerneloptionmat(k);
            [xsup,ysup,w,w0] = svmreg(xapp,yapp,C,epsilon,kernel,kerneloption,lambda3,0);            rx = svmval(xvalid,xsup,w,w0,kernel,kerneloption);
            errsvmaux=sum( (yvalid-rx).^2/200);
            %fprintf('i:%d j:%d k:%d  errsvm: %f \n',i,j,k,errsvmaux);
            if errsvmaux<errmini
               cmini=C;
               epsmini=epsilon;
               kernelmini=kerneloption;
               errmini=errsvmaux;
            end;
         end;
      end;
   end;   
   %--------------------------------------------------------------------%
   %                                                                    %
   %                                                                    %
   %                                                                    %
   %                                                                    %
   %		   	Final Comparison after hyperparameters been set		   	% 
   %                                                                    %
   %                                                                    %
   %                                                                    %
   %                                                                    %
   %--------------------------------------------------------------------%
   
   [x ind] =sort([xapp' xvalid']);
   x=x';
   aux=[yapp' yvalid'];
   y=aux(ind);
   y=y';
   lambda=lambdamini;
   lambda1=lambda1mini;
   %--------------------------------------------------------------------%
   %																	%
   %					Multiscale Wavelet Regularization   			% 
   %																	%
   %--------------------------------------------------------------------%
   
   %-------------------  Step  1  High Level details  -------------------
   n=250;
   t=linspace(0,10,n)';
   uo=1;
   a=2^0.25;
   bord1=0;
   bord2=10;
   dilation=[-10];
   framematrix=framewav(t,dilation,uo,a,bord1,bord2);
   
   x1=x;
   x2=x;
      
   kernel='numerical';
   spanning='wavelet';
   dilation=[-5 0 5];
   K=kernelframe(x1,kernel,x2,framematrix,t);
   K1=K;
   T=phispan(x,spanning,dilation,uo,a,bord1,bord2);
   T1=T;
   [c,d]=regsolve(K,T,y,lambda);
   y1=T*d;
   x1=xf;
   K=kernelframe(x1,kernel,x2,framematrix,t);
   T=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   
   det1=K*c;
   f1=K*c+T*d;
   fprintf('step 1 done\n');
   %plot(det1)
   %pause
   %-------------------Step 2 Catching Low  resolution -------------------
   n=200;
   t=linspace(0,10,n)';
   
   uo=1;
   a=2^0.25;
   bord1=0;
   bord2=10;
   dilation=[-5];
   framematrix=framewav(t,dilation,uo,a,bord1,bord2);
      kernel='numerical';
   spanning='wavelet';
   dilation=[0 5];
   uo=1;
   x1=x;
   x2=x;
   K=kernelframe(x1,kernel,x2,framematrix,t);
   T=phispan(x,spanning,dilation,uo,a,bord1,bord2);
   [c,d]=regsolve(K,T,y1,lambda1);
   y2=T*d;
   x1=xf;
   K=kernelframe(x1,kernel,x2,framematrix,t);
   T=phispan(x1,spanning,dilation,uo,a,bord1,bord2);
   det2=K*c;
   f2=K*c+T*d;
   fprintf('step 2 done\n');
   approx=T*d;
   yfull=approx+det1+det2;
   
   %--------------------------------------------------------------------%
   %																	%
   %					SVM Approximation								% 
   %																	%
   %--------------------------------------------------------------------%
   %------------------------ Learning Parameters ------------------------   lambda3 = 0.000001; 
   kernel='gaussian';
   [xsup,ysup,w,w0] = svmreg(x,y,cmini,epsmini,kernel,kernelmini,lambda3,0);   rx = svmval(xf,xsup,w,w0,kernel,kernelmini);   
   
   %--------------------------------------------------------------------%
   %																	%
   %								Plotting Results     				% 
   %																	%
   %--------------------------------------------------------------------%
   
   
   
   
   figure
   plot(xf,yf,'k',x,y,'k+',xf,yfull,'b',xf,rx,'r');
   
   set(gcf,'color','white');
   xlabel('x');
   ylabel('y')
   title('Multiscale Approx on Frame');
   legend('Original','Data','Approximation','SVM approximation');
   
   %--------------------------------------------------------------------%
   %																	%
   %								Error Processing     				% 
   %																	%
   %--------------------------------------------------------------------%
   
   
   
   errfull=sum( (yf-yfull).^2/200);
   errsvm=sum((yf-rx).^2/200);
   absfull=sum(abs(yf-yfull)/200);
   abssvm=sum(abs(yf-rx)/200);
   fprintf('i:%d errfull: %f   errsvm :%f\n',iter,errfull,errsvm);
   fprintf('i:%d  absfull: %f   abssvm :%f\n',iter,absfull,abssvm);
   if errfull>0.1
      fprintf('STOP\n')
      pause
   end;
   errabs(iter,:)=[absfull  abssvm];
   errl2(iter,:)=[errfull errsvm];
   
   %--------------------------------------------------------------------%
   %																	%
   %								Saving Results        				% 
   %																	%
   %--------------------------------------------------------------------%   
   %save cvmreg-svm i errabs errl2
   
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -