55 lines
2.1 KiB
Matlab
Executable file
55 lines
2.1 KiB
Matlab
Executable file
exercice_1;
|
|
close all;
|
|
|
|
% Calcul rapide de la validation croisée Leave-one-out :
|
|
d = 16;
|
|
liste_lambda = 0.01:0.001:0.11;
|
|
tic;
|
|
x_j_T = transpose(D_app(1,:));
|
|
y_j_T = transpose(D_app(2,:));
|
|
A = [];
|
|
for i = 1:d-1
|
|
A = [A nchoosek(d,i)*x_j_T.^i.*(1-x_j_T).^(d-i)];
|
|
end
|
|
liste_VC = [];
|
|
for lambda = liste_lambda
|
|
VC = calcul_VC_ter(D_app,beta_0,beta_d,d,lambda,A);
|
|
liste_VC = [liste_VC VC];
|
|
end
|
|
toc;
|
|
|
|
% Tracé de la validation croisée Leave-one-out en fonction de lambda :
|
|
figure('Name','Estimation de lambda par validation croisee','Position',[0,0.05*H,0.4*L,0.4*H]);
|
|
plot(liste_lambda,liste_VC,'sr-','LineWidth',2);
|
|
set(gca,'FontSize',20);
|
|
xlabel('$\lambda$','Interpreter','Latex','FontSize',30);
|
|
ylabel('$VC$','Interpreter','Latex','FontSize',30);
|
|
amplitude_VC = max(liste_VC)-min(liste_VC);
|
|
axis([min(liste_lambda) max(liste_lambda) min(liste_VC)-0.1*amplitude_VC max(liste_VC)+0.1*amplitude_VC]);
|
|
|
|
% Estimation de l'hyper-paramètre lambda optimal et de l'écart-type sigma :
|
|
[lambda_optimal,sigma_estime] = estimation_lambda_sigma(liste_lambda,liste_VC);
|
|
fprintf('Estimation de l''hyper-parametre : lambda = %.3f\n',lambda_optimal);
|
|
fprintf('Estimation de l''ecart-type du bruit sur les donnees : %.3f\n',sigma_estime);
|
|
|
|
% Estimation des paramètres avec la valeur optimale de lambda :
|
|
beta_estime = moindres_carres_ecretes(D_app,beta_0,beta_d,d,lambda_optimal);
|
|
|
|
% Tracé du modèle exact (trait noir) :
|
|
figure('Name','Controle de la complexite par regularisation','Position',[0.4*L,0.05*H,0.6*L,0.7*H]);
|
|
plot(x,y,'-k','LineWidth',2);
|
|
set(gca,'FontSize',20);
|
|
xlabel('$x$','Interpreter','Latex','FontSize',30);
|
|
ylabel('$y$','Interpreter','Latex','FontSize',30);
|
|
hold on;
|
|
|
|
% Tracé des données d'apprentissage (croix bleues) :
|
|
plot(x_j,y_j,'+b','MarkerSize',10,'LineWidth',3);
|
|
|
|
% Tracé de la courbe de Bézier optimale (trait rouge) :
|
|
y_estime = bezier(beta_0,beta_estime,beta_d,x);
|
|
plot(x,y_estime,'-r','MarkerSize',10,'LineWidth',3);
|
|
lg = legend(' Modele exact',' Donnees d''apprentissage',...
|
|
[' Modele optimal pour $d=' num2str(d) '$ ($\lambda=' num2str(lambda_optimal) '$)'],'Location','SouthEast');
|
|
set(lg,'Interpreter','Latex');
|