📄 mregcvex.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 + -