TP1 : Initiation Matlab et Théorie Bayesienne
Ce TP a pour objectif de vous initier à l'environnement Matlab et à la théorie bayésienne à travers un problème concret de reconnaissance de formes biomédicales. Vous travaillerez sur un jeu de données relatif au diagnostic du diabète, en utilisant deux variables clés pour visualiser et classifier les sujets. Ce TP nécessite Matlab et des connaissances de base en statistiques et programmation.
D'après le document TP1 : Initiation Matlab et Théorie Bayesienne
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.
Document source
Programming, Math, etc. · PDF · 3 pages
Afficher l'aperçu du document
Ce TP a pour objectif de vous initier à l'environnement Matlab et à la théorie bayésienne à travers un problème concret de reconnaissance de formes biomédicales. Vous travaillerez sur un jeu de données relatif au diagnostic du diabète, en utilisant deux variables clés pour visualiser et classifier les sujets. Ce TP nécessite Matlab et des connaissances de base en statistiques et programmation.
Objectifs
- Charger et manipuler des données biomédicales dans Matlab.
- Visualiser des données et des classes à l'aide d'histogrammes et de graphiques 2D.
- Implémenter un classifieur bayésien simple avec hypothèse d'indépendance et variance égale.
- Implémenter un classifieur bayésien général avec estimation de matrices de covariance.
- Visualiser les fonctions de décision et comparer les résultats des deux classifieurs.
Prérequis et installation
- Matlab installé (version non spécifiée, mais compatible avec les fonctions load, hist, plot, meshgrid, reshape, contour).
- Fichier de données « pima.mat » contenant les variables : xall (709×8), y (709×1), n = 709.
- Connaissances de base en statistiques (moyenne, variance, covariance) et en programmation Matlab.
- Compréhension des concepts de classification bayésienne et normalisation des données.
Présentation des données
Les données proviennent d'un échantillon de 709 femmes amérindiennes Pimas, sujettes à un fort taux de diabète. Chaque sujet est décrit par huit variables biomédicales :
- Nombre de grossesses
- Concentration en glucose du plasma 2 heures après un test de tolérance au glucose oral
- Pression sanguine diastolique (mm Hg)
- Epaisseur de la peau sur le triceps (mm)
- 2-heures d'insuline en sérum (µU/ml)
- Indice de masse corporelle (poids en kg / (taille en m)^2)
- Fonction de pedigree du diabète
- Âge (années)
Pour ce TP, seules les variables (2) et (6) seront utilisées afin de faciliter la visualisation et la classification.
Analyse exploratoire des données
Chargement des données
Commencez par charger le fichier « pima.mat » dans Matlab et extraire les variables (2) et (6) pour constituer une matrice d’apprentissage appelée xtemp.
load('pima.mat');
xtemp = xall(:, [2 6]);Cette étape permet d’isoler les variables d’intérêt pour la suite du TP.
Visualisation du problème
Visualisez les distributions des deux variables pour chaque classe (diabétique et non diabétique) à l’aide d’histogrammes :
hist(xtemp(y == 1, 1)); % Histogramme glucose pour diabétiques
hist(xtemp(y == -1, 1)); % Histogramme glucose pour non diabétiques
hist(xtemp(y == 1, 2)); % Histogramme IMC pour diabétiques
hist(xtemp(y == -1, 2)); % Histogramme IMC pour non diabétiques
Ensuite, tracez les exemples en 2D en utilisant des couleurs différentes selon la classe :
plot(xtemp(y == 1, 1), xtemp(y == 1, 2), 'ro'); % Diabétiques en rouge
hold on;
plot(xtemp(y == -1, 1), xtemp(y == -1, 2), 'bo'); % Non diabétiques en bleu
hold off;
Cette visualisation permet de percevoir la séparation possible entre les classes.
Classifieur bayésien avec hypothèse d’indépendance et même variance
Dans ce cas, on suppose que les variables sont indépendantes et ont la même variance pour toutes les classes.
Étapes à suivre :
- Estimer les probabilités empiriques P(ωi) d’appartenir à chaque classe :
- Extraire et normaliser les variables (2) et (6) en centrant et réduisant :
P1 = sum(y == 1) / n;
P_1 = sum(y == -1) / n;
mu_all = mean(xtemp);
sigma_all = std(xtemp);
x = (xtemp - mu_all) ./ sigma_all;
La variance σ est fixée à 1 car les données sont normalisées.
mu1 = mean(x(y == 1, :));
mu_1 = mean(x(y == -1, :));
[X1, X2] = meshgrid(linspace(min(x(:,1)), max(x(:,1)), 100), linspace(min(x(:,2)), max(x(:,2)), 100));
Xtest = [X1(:) X2(:)];
g1 = -0.5 * sum((Xtest - mu1).^2, 2) + log(P1);
g_1 = -0.5 * sum((Xtest - mu_1).^2, 2) + log(P_1);
f = g1 - g_1;
F = reshape(f, size(X1));
contour(X1, X2, F, [0 0], 'LineWidth', 2);
hold on;
plot(x(y == 1, 1), x(y == 1, 2), 'ro');
plot(x(y == -1, 1), x(y == -1, 2), 'bo');
hold off;
Cette étape permet de visualiser la frontière de décision entre les classes sous l’hypothèse simplifiée.
Classifieur bayésien dans le cas général
Cette version ne fait aucune hypothèse sur la matrice de covariance, qui est estimée pour chaque classe.
Étapes à suivre :
- Estimer les probabilités empiriques P(ωi) :
- Calculer les moyennes µi de chaque classe :
P1 = sum(y == 1) / n;
P_1 = sum(y == -1) / n;
mu1 = mean(x(y == 1, :));
mu_1 = mean(x(y == -1, :));Sigma1 = cov(x(y == 1, :));
Sigma_1 = cov(x(y == -1, :));
invSigma1 = inv(Sigma1);
invSigma_1 = inv(Sigma_1);
detSigma1 = det(Sigma1);
detSigma_1 = det(Sigma_1);
g1 = -0.5 * sum((Xtest - mu1) * invSigma1 .* (Xtest - mu1), 2) - 0.5 * log(detSigma1) + log(P1);
g_1 = -0.5 * sum((Xtest - mu_1) * invSigma_1 .* (Xtest - mu_1), 2) - 0.5 * log(detSigma_1) + log(P_1);
f = g1 - g_1;
F = reshape(f, size(X1));
contour(X1, X2, F, [0 0], 'LineWidth', 2);
hold on;
plot(x(y == 1, 1), x(y == 1, 2), 'ro');
plot(x(y == -1, 1), x(y == -1, 2), 'bo');
hold off;
Comparez cette frontière de décision avec celle obtenue précédemment. La différence réside dans la forme plus flexible de la frontière, qui prend en compte la covariance entre variables.
Résultats attendus
- Visualisation claire des histogrammes montrant des distributions différentes entre classes pour les variables glucose et IMC.
- Graphique 2D avec deux nuages de points colorés distincts correspondant aux classes diabétique et non diabétique.
- Frontière de décision linéaire dans le cas d’hypothèse d’indépendance et même variance, visible sur le contour à f(x) = 0.
- Frontière de décision plus complexe et adaptée dans le cas général avec matrices de covariance estimées.
- Fonctions de décision g1(x) et g-1(x) calculées correctement pour chaque exemple de test.
Pièges courants
- Ne pas normaliser les données avant d’estimer les moyennes et covariances, ce qui fausse les calculs.
- Confondre les indices des classes (+1 et -1) lors de la sélection des données.
- Oublier de calculer les probabilités a priori P(ωi), ce qui impacte la fonction de décision.
- Erreur dans la construction de la grille de test (meshgrid et reshape), empêchant une bonne visualisation.
- Utiliser une matrice de covariance singulière ou mal calculée, rendant impossible l’inversion.
- Ne pas tracer la frontière de décision au niveau f(x) = 0, ce qui empêche de visualiser la séparation des classes.
Commentaires
Aucun commentaire pour le moment. Posez la première question.