Étude sur l’indice de masse corporelle

Ce TP a pour objectif de vous initier à l'environnement Matlab et à la théorie bayésienne à travers un problème biomédical concret : la prédiction du diabète chez des femmes amérindiennes Pimas. Vous apprendrez à manipuler des données, visualiser des distributions, et implémenter deux versions d'un classifieur bayésien.

D'après le document Étude sur l’indice de masse corporelle

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

Étude sur l’indice de masse corporelle

Statistical Analysis in Pediatrics · PDF · 2 pages · 2021

Afficher l'aperçu du document

Consulter le document original →

Ce TP a pour objectif de vous initier à l'environnement Matlab et à la théorie bayésienne à travers un problème biomédical concret : la prédiction du diabète chez des femmes amérindiennes Pimas. Vous apprendrez à manipuler des données, visualiser des distributions, et implémenter deux versions d'un classifieur bayésien. Ce travail nécessite Matlab et un fichier de données « pima.mat » contenant des mesures biomédicales.

Objectifs

  • Charger et manipuler des données biomédicales dans Matlab.
  • Visualiser des données par histogrammes et 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.
  • Comparer les fonctions de décision obtenues par les deux classifieurs.

Prérequis et installation

  • Matlab installé (version compatible avec les fonctions load, hist, plot, meshgrid, reshape, contour).
  • Fichier « pima.mat » contenant les variables : xall (709×8), y (709×1), n = 709.
  • Connaissances de base en statistiques, notamment sur la normalisation, les moyennes, variances et covariances.
  • Notions élémentaires de théorie bayésienne et classification.

Chargement et préparation des données

Dans cette étape, vous chargez les données et préparez la matrice d’apprentissage avec les variables choisies.

  • Charger le fichier « pima.mat » avec la commande Matlab :
  • load('pima.mat')
  • Extraire les variables 2 (concentration en glucose) et 6 (indice de masse corporelle) de la matrice xall :
  • xtemp = xall(:, [2 6]);
  • Cette matrice xtemp contient les données d’apprentissage sur lesquelles vous travaillerez.

Un résultat correct est une matrice 709×2 contenant les deux variables sélectionnées.

Analyse exploratoire des données

Cette étape vise à visualiser la distribution des variables selon la classe (diabétique ou non) pour mieux comprendre le problème.

  • Tracer des histogrammes pour chaque variable et chaque classe :
  • hist(xtemp(y == -1, 1)) % glucose non diabétique
    hist(xtemp(y == 1, 1))  % glucose diabétique
    hist(xtemp(y == -1, 2)) % IMC non diabétique
    hist(xtemp(y == 1, 2))  % IMC diabétique
  • Visualiser les exemples en 2D avec des couleurs différentes selon la classe :
  • plot(xtemp(y == -1, 1), xtemp(y == -1, 2), 'bo') % non diabétiques en bleu
    hold on
    plot(xtemp(y == 1, 1), xtemp(y == 1, 2), 'ro')  % diabétiques en rouge
    hold off

Un bon résultat montre des histogrammes distincts selon la classe et un nuage de points 2D où les deux classes sont visibles avec des couleurs différentes.

Implémentation du classifieur bayésien simplifié

Vous implémentez ici un classifieur bayésien sous l’hypothèse que les variables sont indépendantes et ont la même variance (σ² = 1) pour toutes les classes.

  • Estimer les probabilités empiriques P(wi) pour chaque classe :
  • Pw1 = sum(y == 1) / n;
    Pw_1 = sum(y == -1) / n;
  • Normaliser les variables (centrer et réduire) :
  • moyenne = mean(xtemp);
    ecart_type = std(xtemp);
    x = (xtemp - moyenne) ./ ecart_type;
  • Calculer les moyennes µi de chaque classe sur les données normalisées :
  • mu1 = mean(x(y == 1, :));
    mu_1 = mean(x(y == -1, :));
  • Préparer une grille pour visualiser la fonction de décision :
  • [X1, X2] = meshgrid(linspace(min(x(:,1)), max(x(:,1)), 100), linspace(min(x(:,2)), max(x(:,2)), 100));
    Xtest = [X1(:) X2(:)];
  • Calculer les fonctions gi(x) pour chaque classe (avec σ = 1) :
  • g1 = -0.5 * sum((Xtest - mu1).^2, 2) + log(Pw1);
    g_1 = -0.5 * sum((Xtest - mu_1).^2, 2) + log(Pw_1);
  • Calculer la fonction de prédiction :
  • f = g1 - g_1;
  • Réorganiser les valeurs en grille :
  • F = reshape(f, size(X1));
  • Visualiser la fonction de prédiction avec un contour :
  • contour(X1, X2, F, [0 0], 'LineWidth', 2)
    hold on
    plot(x(y == -1, 1), x(y == -1, 2), 'bo')
    plot(x(y == 1, 1), x(y == 1, 2), 'ro')
    hold off

    Un résultat correct montre une frontière de décision lisse séparant les deux classes sur le graphique.

    Implémentation du classifieur bayésien général

    Cette étape généralise le classifieur en estimant la matrice de covariance Σi pour chaque classe, sans hypothèse de variance égale ou indépendance.

    • Estimer les probabilités empiriques P(ωi) :
    • Pw1 = sum(y == 1) / n;
      Pw_1 = sum(y == -1) / n;
    • Calculer les moyennes µi de chaque classe :
    • mu1 = mean(x(y == 1, :));
      mu_1 = mean(x(y == -1, :));
  • Estimer les matrices de covariance Σi :
  • Sigma1 = cov(x(y == 1, :));
    Sigma_1 = cov(x(y == -1, :));
  • Calculer les fonctions gi(x) pour chaque classe et chaque exemple de test :
  • invSigma1 = inv(Sigma1);
    invSigma_1 = inv(Sigma_1);
    detSigma1 = det(Sigma1);
    detSigma_1 = det(Sigma_1);
    
    diff1 = Xtest - mu1;
    diff_1 = Xtest - mu_1;
    
    g1 = -0.5 * sum((diff1 * invSigma1) .* diff1, 2) - 0.5 * log(detSigma1) + log(Pw1);
    g_1 = -0.5 * sum((diff_1 * invSigma_1) .* diff_1, 2) - 0.5 * log(detSigma_1) + log(Pw_1);
  • Calculer la fonction de prédiction :
  • f = g1 - g_1;
  • Réorganiser les valeurs en grille :
  • F = reshape(f, size(X1));
  • Visualiser la fonction de prédiction :
  • contour(X1, X2, F, [0 0], 'LineWidth', 2)
    hold on
    plot(x(y == -1, 1), x(y == -1, 2), 'bo')
    plot(x(y == 1, 1), x(y == 1, 2), 'ro')
    hold off

    La différence avec le classifieur précédent réside dans la forme plus flexible de la frontière de décision, qui peut être non linéaire et mieux adaptée aux données.

    Résultats attendus

    • Visualisation claire des distributions des deux classes sur les histogrammes.
    • Nuage de points 2D où les classes sont distinctes par couleur.
    • Frontière de décision du classifieur bayésien simplifié sous forme d’une ligne droite ou quasi-linéaire.
    • Frontière de décision du classifieur bayésien général plus complexe, pouvant être courbée, reflétant la covariance des variables.
    • Probabilités empiriques P(wi) cohérentes avec la proportion des classes dans les données.

    Pièges courants

    • Ne pas normaliser les variables 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 convertir la grille de test en matrice d’exemples avant le calcul des fonctions gi(x).
    • Ne pas vérifier que les matrices de covariance sont inversibles avant de calculer leur inverse.
    • Tracer la fonction de décision sans utiliser la fonction reshape, ce qui empêche une visualisation correcte.
    • Interpréter une frontière de décision non linéaire comme une erreur alors qu’elle est attendue dans le cas général.

    Partager

    Commentaires

    Aucun commentaire pour le moment. Posez la première question.

    Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

    ← Toutes les révisions