Théorie de l’information et du codage Travail : Deuxième partie A rendre pour le 4 novembre Objectif L’objectif de cette dernière partie du travail est de vous familiariser avec le codage de source. Diverses notions théoriques seront illustrées et mises en pratique grâce à un cas concret. Leur bonne compréhension sera nécessaire à la réalisation du travail. Celui-ci portera sur différentes techniques de compression (sans perte) d’une base de données médicales contenant des informations sur des patients atteints de pathologie du foie. Informations pratiques Le script codage partie2 initialise trois variables : – node sizes : un vecteur comportant la cardinalité des 4 variables aléatoires sexe, trigly, AST et anti myth. – donnees, une base de données de 500 patients. Chaque patient est caractérisé par quatre informations : sexe, trigly, AST et anti myth. Chaque enregistrement de cette base de données est un nombre de 4 chiffres, tel quel que chaque chiffre [de gauche à droite] correspond à la valeur de la variable correspondante [dans l’ordre décrit cidessus]. – margT : une table contenant les valeurs associées à la distribution de probabilité conjointe P (sexe, trigly, AST, anti myth) ayant généré la base de données. L’ordre des variables dans l’expression précédente correspond à l’ordre des dimensions de la table (ainsi qu’à l’ordre dans la base de données) : margT (i, j, k, l) := P (sexe = i, trigly = j, AST = k, anti myth = l) . Vous pourriez trouver intéressantes les fonctions dec2bin et int2str. En effet, une manière simple de réaliser certaines étapes de ce travail consiste à manipuler des chaı̂nes de caractères. Le rapport, accompagné des fichiers .m, est à renvoyer dans un seul fichier d’archive par email à [email protected], avec comme objet ! [codage]travail - partie 2 ", pour le dimanche 4 novembre minuit. Informations théoriques Cette partie du travail demandera principalement l’application de notions vues dans le chapitre 8 du cours théorique. Il vous est conseillé de revoir en particulier la définition du problème du codage de source discrète, le premier théorème de Shanon ainsi que le code de Huffman. Questions 1. On souhaite modéliser la base de données comme un message émis par une source stationnaire sans mémoire. On considérera donc que chaque entrée (4 variables) correspondant à un patient est un symbole émis par la source. D’autres possibilités 1 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. de modéliser la base de données comme une source stationnaire sans mémoire existentelles ? Si oui, donnez un exemple, sinon, justifiez. Écrivez une fonction result = allsymb(node sizes), qui, à partir du vecteur comportant la cardinalité de chaque variable, va générer dans une matrice ligne de taille N tous les N symboles possibles selon la technique d’encodage utilisée pour la base de données fournie, ordonnés par ! ordre croissant. " Exemple : allsymb([2 3]) renvoie 11 12 13 21 22 23 . Ecrivez une fonction result = proba(symb,margT), qui, à partir de symb, un vecteur ligne de longueur N contenant des symboles émis par la source décrite au point 1 [et encodé comme donnees], et de margT , une distribution de probabilité conjointe sur les variables correspondantes, renvoie un vecteur de taille N contenant à l’emplacement i la probabilité du symbole symb[i], donnée par le réseau bayésien ayant généré margT . Note : Vous pouvez supposer que la cardinalité de chaque variable ne dépasse pas 9. On supposera que chaque symbole de la source décrite dans la question 1 est à l’origine codé dans un alphabet comportant 10 caractères : les 10 chiffres arabes. Quelle est la longueur de chaque symbole émis par la source ? Ce code vérifie-t-il l’inégalité de Kraft ? Est-il complet ? Quelle serait la longueur moyenne optimale d’un symbole ? Écrivez une fonction result = code1(donnees), qui encode la base de données en associant à chaque symbole un nombre naturel. Les naturels sont affectés aux symboles par ordre croissant, ! à partir de 1. " ! " Exemple : code1( 13 12 11 21 23 22 ) renvoie 3 2 1 4 6 5 . Calculez le taux de compression ainsi obtenu sur la base de données considérée ici, sachant que l’alphabet est identique. Quelle est l’espérance de la longueur d’un symbole émis par la source, en utilisant l’encodage de code1 ? Ce code vérifie-t-il l’inégalité de Kraft ? Est-il déchiffrable, complet, régulier, instantané, sans préfixe, absolument optimal ? Ecrivez une fonction result = Huffcode(proba), qui reçoit en entrée un vecteur de longueur N contenant les probabilités des différents symboles, et qui renvoie en sortie un vecteur contenant !le codage (de Huffman) des symboles, dans" un alphabet binaire. " ! Exemple : Huffcode( 0.25 0.5 0.25 ) renvoie 10 0 11 . Calculez l’espérance du taux de compression obtenu par un codage de Huffman binaire appliqué au modèle de base de données médicales, par rapport à chacun des deux codes précédents. Quelle est l’espérance de la longueur d’un symbole émis par la source, en utilisant un code de Huffman binaire ? Quelle est la longueur moyenne optimale d’un symbole ? Comparez cette valeur par rapport à celle trouvée à la question 4 et commentez. Ce code vérifie-t-il l’inégalité de Kraft ? Est-il déchiffrable, complet, régulier, instantané, sans préfixe, absolument optimal ? Ecrivez une fonction result = code2(donnees,old symb,new symb), qui encode la base de données en remplaçant chaque ancien symbole (dont la liste est contenue dans le vecteur old symb) par le nouveau symbole correspondant (contenu dans le vecteur new symb). Cette fonction peut-elle traiter les codes non instantanés ? Et les codes incomplets ? Encodez la base de données selon le code de Huffman obtenu. Quelle est la longueur moyenne par symbole ainsi obtenue ? Comment expliquez-vous ce résultat, par rapport à celui obtenu à la question 9 ? Quelles tailles d’alphabet peuvent être utilisées pour créer un code complet pour cette source ? 2