📄 mregwav1.m
字号:
% Example of multiscale approximation using
% Regularization Networks
%
% Learning parameters "lambda" have to be tuned
% for instance by means of a cross-validation.
% Wavelet frame are used for approximating a
% Sin + sinc functions.
%
%
% 30/10/2000 AR
%
%
%
%--------------------------------------------------------------------%
% %
% Initialisation %
% %
%--------------------------------------------------------------------%
close all
clear all
itermax=1;
errabs=zeros(itermax,3);
errl2=zeros(itermax,3);
lambda=50; %
lambda1=15; %
lambdawav=80;
for i=1:itermax
%--------------------------------------------------------------------%
% %
% BUILDING DATA %
% %
%--------------------------------------------------------------------%
N=100;
x=sort([0.01; 9.99;10*rand(N-2,1)]);
bruit=0.2;
y=sin(x)+sinc(1*(x-5))+sinc(5*(x-2))+bruit*randn(size(x));
xf=linspace(0,10,200)';
yapprox=sin(xf);
ydet3=sinc(1*(xf-5));
ydet2=sinc(5*(xf-2));
yf=yapprox+ydet3+ydet2;
%--------------------------------------------------------------------%
% %
% Multiscale Wavelet Regularization %
% %
%--------------------------------------------------------------------%
%------------------- Step 1 High Level details -------------------
n=200;
t=linspace(0,10,n)';
uo=1;
a=2^0.25;
bord1=0;
bord2=10;
dilation=[-8];
framematrix=framewav(t,dilation,uo,a,bord1,bord2);
x1=x;
x2=x;
kernel='numerical';
spanning='wavelet';
dilation=[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');
%-------------------Step 2 Catching Low resolution -------------------
n=200;
t=linspace(0,10,n)';
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=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;
%--------------------------------------------------------------------%
% %
% Semiparametric reg %
% %
%--------------------------------------------------------------------%
x1=x;
uo=1;
a=2^0.25;
bord1=0;
bord2=10;
dilation=[-7];
framematrix=framewav(t,dilation,uo,a,bord1,bord2);
dual=dualframe(framematrix,t);
kerneloption=lambdawav;
kernel='numerical';
spanning='wavelet';
dilation=[0 5];
T=phispan(x,spanning,dilation,uo,a,bord1,bord2);
K=kernelframe(x,kernel,x2,framematrix,t,dual);
[c,d]=regsolve(K,T,y,lambdawav);
T=phispan(xf,spanning,dilation,uo,a,bord1,bord2);
K=kernelframe(xf,kernel,x2,framematrix,t,dual);
f1=K*c+T*d;
%--------------------------------------------------------------------%
% %
% SVM Approximation %
% %
%--------------------------------------------------------------------%
%------------------------ Learning Parameters ------------------------ C = 1; lambda3 = 0.000001;
epsilon = .01; kerneloption = 0.25; kernel='gaussian';
[xsup,ysup,w,w0] = svmreg(x,y,C,epsilon,kernel,kerneloption,lambda3,0); rx = svmval(xf,xsup,w,w0,kernel,kerneloption);
%--------------------------------------------------------------------%
% %
% Plotting Results %
% %
%--------------------------------------------------------------------%
figure(1)
h=plot(xf,yf,'k',x,y,'k+',xf,yfull,'b',xf,rx,'r',xf,f1,'g');
set(h,'LineWidth',2);
set(gcf,'color','white');
xlabel('x');
ylabel('y')
title('Multiscale Approx on Frame');
legend('Original','Data','Multi Reg','SVM','Semi Param');
figure(2)
h=plot(xf,approx,'r',xf,det2+2,'g',xf,det1+4,'b')
set(h,'LineWidth',2);
set(gcf,'color','white');
xlabel('x');
ylabel('y')
%--------------------------------------------------------------------%
% %
% Error Processing %
% %
%--------------------------------------------------------------------%
errfull=sum( (yf-yfull).^2/200);
errsp=sum( (yf-f1).^2/200);
errsvm=sum((yf-rx).^2/200);
absfull=sum(abs(yf-yfull)/200);
abssp=sum(abs(yf-f1)/200);
abssvm=sum(abs(yf-rx)/200);
fprintf('i:%d errreg: %f errspregnet:%f errsvm :%f\n ',i,errfull,errsp,errsvm);
fprintf('i:%d absreg: %f absspregnet:%f abssvm :%f\n',i,absfull,abssp,abssvm);
if errfull>0.1
fprintf('STOP\n')
pause
end;
errabs(i,:)=[absfull abssp abssvm];
errl2(i,:)=[errfull errsp errsvm];
%--------------------------------------------------------------------%
% %
% Saving Results %
% %
%--------------------------------------------------------------------%
%save compmreg-svm i errabs errl2
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -