Théorie de l`information et du codage

publicité
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
Téléchargement