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

📄 mregcvex.m

📁 关于svm的例程
💻 M
字号:
%
% Example of multiscale approximation 
% Hyperparameters adjustments by CrossValidation
%
% A training set is a available.
% a validation set is chosen so the model hyperparameters are adjusted
%
% final error is measured with regards to the true function
% 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
lambdavect=5:5:50;
%lambda1vect=[10 50 100 200 500];
lambda1vect=2:2:30;
%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(3*(xapp-5))+sinc(6*(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(3*(xf-5));
    ydet2=sinc(6*(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=[-7];
    framematrix=framewav(t,dilation,uo,a,bord1,bord2);
    
    x1=xapp;
    x2=xapp;
    kernel='numerical';
    spanning='wavelet';
    dilation=[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=[0];
    framematrix=framewav(t,dilation,uo,a,bord1,bord2);
    
    kernel='numerical';
    spanning='wavelet';
    dilation=[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.05 0.1 0.15 .2 0.25 0.3];
    %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 + -