author: Laurent Fainsin title: TAV, TP1, LF description: Rapport de Traitement des données audio-visuelles, Travail Pratique 1, Laurent Fainsin

Fonctions auxilliaires

function y = bezier(beta_0,beta,beta_d,x) d = length(beta)+1; y = beta_0 * (1-x).^d + beta_d * x.^d; for i = 1:d-1 y = y + beta(i) * nchoosek(d,i) * x.^i .* (1-x).^(d-i); end end
function y = bezier_bruitee(beta_0,beta,beta_d,x,sigma) y = bezier(beta_0,beta,beta_d,x)+sigma*randn(size(x)); end

Exercice 1

function estimation = moindres_carres(D_app, beta_0, beta_d, d) X = D_app(1,:)'; Y = D_app(2,:)'; B = Y - beta_0*(1-X).^d - beta_d*(X.^d); A = zeros(length(X), d-1); for i=1:(d-1) A(:,i) = nchoosek(d, i) .* X.^i .* (1-X).^(d-i); end estimation = A \ B; end
donnees_apprentissage; close all; % DegrŽé de la courbe de BŽezier d = 8; % Estimation des paramètres de la courbe de BŽezier (sauf beta_0 et beta_d) : beta_estime = moindres_carres(D_app,beta_0,beta_d,d); % TracŽ de la courbe de BŽezier estimŽe, de degréŽ d (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 estime ($d=' num2str(d) '$)'],'Location','Best'); set(lg,'Interpreter','Latex');

Exercice 2

function erreur = erreur_apprentissage(D_app,beta_0,beta_d,d) X = D_app(1,:)'; Y = D_app(2,:)'; beta = moindres_carres(D_app, beta_0, beta_d, d); estimation = bezier(beta_0, beta, beta_d, X); erreur = mean((estimation - Y).^2); end
donnees_apprentissage; close all; % Calcul de l'erreur d'apprentissage en fonction de d : liste_d = 2:length(D_app); liste_erreurs_apprentissage = []; for d = liste_d erreur = erreur_apprentissage(D_app,beta_0,beta_d,d); liste_erreurs_apprentissage = [liste_erreurs_apprentissage erreur]; end % TracŽ de l'erreur d'apprentissage en fonction de d : figure('Name','Erreur d''apprentissage','Position',[0.4*L,0.05*H,0.6*L,0.7*H]); plot(liste_d,liste_erreurs_apprentissage,'sb-','LineWidth',2); set(gca,'FontSize',20); xlabel('$d$','Interpreter','Latex','FontSize',30); ylabel('Erreur','FontSize',30); legend(' Erreur d''apprentissage','Location','Best');

Données de test

Exercice 1

donnees_test; % % DegrŽ de la courbe de BŽzier utilisŽe comme modle (testez plusieurs valeurs de d entre 2 et 20) : degres = 2:5:20; for d=degres beta_estime = moindres_carres(D_test,beta_0,beta_d,d); y_estime = bezier(beta_0,beta_estime,beta_d,x); plot(x,y_estime,'MarkerSize',10,'LineWidth',3, 'DisplayName', ['d=',num2str(d)]); end

Exercice 2

donnees_test; close all; liste_d = 2:10:length(D_test); liste_erreurs_apprentissage = []; for d = liste_d erreur = erreur_apprentissage(D_test,beta_0,beta_d,d); liste_erreurs_apprentissage = [liste_erreurs_apprentissage erreur]; end % TracŽ de l'erreur d'apprentissage en fonction de d : figure('Name','Erreur d''apprentissage','Position',[0.4*L,0.05*H,0.6*L,0.7*H]); plot(liste_d,liste_erreurs_apprentissage,'sb-','LineWidth',2); set(gca,'FontSize',20); xlabel('$d$','Interpreter','Latex','FontSize',30); ylabel('Erreur','FontSize',30); legend(' Erreur d''apprentissage','Location','Best');

Exercice 3

function erreur = erreur_generalisation(D_test,D_app,beta_0,beta_d,d) X = D_test(1,:)'; Y = D_test(2,:)'; beta = moindres_carres(D_app, beta_0, beta_d, d); estimation = bezier(beta_0, beta, beta_d, X); erreur = mean((estimation - Y).^2); end
function [d_estime, sigma_estime] = estimation_d_sigma(liste_d, liste_erreurs_generalisation) [~, index] = min(liste_erreurs_generalisation); d_estime = liste_d(index); sigma_estime = std(liste_erreurs_generalisation); end
donnees_test; close all; % Calcul de l'erreur d'apprentissage (risque empirique) : liste_d = 2:20; liste_erreurs_apprentissage = []; for d = liste_d erreur = erreur_apprentissage(D_app,beta_0,beta_d,d); liste_erreurs_apprentissage = [liste_erreurs_apprentissage erreur]; end % Tracé de l'erreur d'apprentissage en fonction de d : figure('Name','Erreur d''apprentissage et erreur de generalisation','Position',[0.4*L,0.05*H,0.6*L,0.7*H]); plot(liste_d,liste_erreurs_apprentissage,'sb-','LineWidth',2); set(gca,'FontSize',20); xlabel('$d$','Interpreter','Latex','FontSize',30); ylabel('Erreur','FontSize',30); hold on; % Calcul de l'erreur de généralisation (risque espéré) : liste_erreurs_generalisation = []; for d = liste_d erreur = erreur_generalisation(D_test,D_app,beta_0,beta_d,d); liste_erreurs_generalisation = [liste_erreurs_generalisation erreur]; end % Tracé de l'erreur de généralisation en fonction de d : plot(liste_d,liste_erreurs_generalisation,'sg-','LineWidth',2); legend(' Erreur d''apprentissage',' Erreur de generalisation','Location','Best'); % Estimation du degré d et de l'écart-type sigma : [d_estime,sigma_estime] = estimation_d_sigma(liste_d,liste_erreurs_generalisation); fprintf('Estimation du degre : d = %d\n',d_estime); fprintf('Estimation de l''ecart-type du bruit sur les donnees : %.3f\n',sigma_estime);
Estimation du degre : d = 5 Estimation de l'ecart-type du bruit sur les donnees : 0.477

Exercice 4

function VC = calcul_VC(D_app, beta_0, beta_d, d) X = D_app(1,:)'; Y = D_app(2,:)'; n = length(X); VC = 0; for j=1:n D_app_loo = [D_app(:,1:j-1) , D_app(:,j+1:n)]; beta = moindres_carres(D_app_loo, beta_0, beta_d, d); estimation = bezier(beta_0, beta, beta_d, X(j)); VC = VC + (Y(j) - estimation).^2; end VC = VC/n; end
function [d_estime,sigma_estime] = estimation_d_sigma_bis(liste_d,liste_VC) [~, index] = min(liste_VC); d_estime = liste_d(index); sigma_estime = std(liste_VC); end
donnees_test; close all; % Calcul de la validation croisée Leave-one-out : liste_d = 2:20; liste_VC = []; tic; for d = liste_d VC = calcul_VC(D_app,beta_0,beta_d,d); liste_VC = [liste_VC VC]; end toc; % Tracé de la validation croisée Leave-one-out en fonction de d : figure('Name','Validation croisee','Position',[0.4*L,0.05*H,0.6*L,0.7*H]); plot(liste_d,liste_VC,'sr-','LineWidth',2); set(gca,'FontSize',20); xlabel('$d$','Interpreter','Latex','FontSize',30); ylabel('$VC$','Interpreter','Latex','FontSize',30); % Estimation du degré d et de l'écart-type sigma : [d_estime,sigma_estime] = estimation_d_sigma_bis(liste_d,liste_VC); fprintf('Estimation du degre : d = %d\n',d_estime); fprintf('Estimation de l''ecart-type du bruit sur les donnees : %.3f\n',sigma_estime);
Estimation du degre : d = 5 Estimation de l'ecart-type du bruit sur les donnees : 0.563

Exercice 5 (Optionnel)

clear; close all; % constantes beta_0 = 115; beta_d = 123; beta = [133,96,139,118]; n_app = 100; pas_app = 1/(n_app-1); x_j = 0:pas_app:1; sigma = 0.5; d = 5; n = 10000; beta_moyen = zeros(1, d-1)'; sigma_moyen = 0; for i=1:n % génération de nouveaux points d'apprentissage y_j = bezier_bruitee(beta_0,beta,beta_d,x_j,sigma); D_app = [x_j ; y_j]; beta_estime = moindres_carres(D_app,beta_0,beta_d,d); beta_moyen = beta_moyen + beta_estime/n; end [beta' , beta_moyen]
>> exercice_5 ans = 133.0000 133.0007 96.0000 96.0013 139.0000 138.9989 118.0000 118.0024