Toolbox

La toolbox BNT sera nécessaire à la réalisation du travail. Les instructions d’installation sont disponibles ici. Attention, si votre version de Matlab est R2009a ou plus récente, il est probable que vous deviez modifier la fonction “finite” en “isfinite” dans les fichiers de la librairie.

Calendrier 2011-2012

FAQ

Comment calculer un logarithme particulier dans Matlab?
Les logarithmes les plus courants sont déjà définis dans Matlab. Il existe par exemple des fonctions log2, log10. Pour des bases moins répandues, utilisez un quotient de logarithmes.
Est-il nécessaire d’utiliser le vecteur node_size dans les fonctions?
Non, il est possible de s’en passer sans difficulté. Vous pouvez toutefois recopier son code d’initialisation à l’intérieur de chacune des fonctions.
Comment vérifier la bonne marche des fonctions?
Il est important d’apprendre à tester vous-mêmes vos fonctions. Une bonne méthode consiste à fournir à la fonction des entrées dont vous pouvez calculer la réponse à la main. La difficulté réside donc dans la recherche d’entrées simples, mais permettant tout de même de détecter des erreurs. Pour vous permettre d’évaluer votre méthode de test, voici le résultat que doit renvoyer la fonction entropy(data,maladie) : 0.8969.
Pour corriger vos fonctions, il existe dans Matlab un debugger très bien fait.
Les fonctions demandées seront-elles utilisées avec d’autres matrices que “data”?
Oui! Ce sera le cas lors des tests effectuées sur ces fonctions ainsi que pour les travaux suivants.
Faut-il considérer le cas où les variables seront fournies aux fonction sous forme d’un string contenant le nom de la variable?
La variable sera toujours donnée par un nombre compris entre 1 et 17. Pour faciliter l'utilisation de la fonction dans le travail, le script codage_parti1.m initialise dans matlab des valeurs portant le nom des variables aux nombres correspondants. Cela vous permez d'appeler la fonction de manière plus lisible, par exemple entropie(data,maladie).
Où sont les fonctions “graphminspantree” et “biograph”?
Ces deux fonctions sont fournies par la toolbox bioinformatics. Elle est présente sur les ordinateurs de montefiore. Les deux packages fournissent des fonctions similaires à "graphminspanntree”, et la toolbox BNT à "biograph".
Que puis-je conclure des noeuds qui ne sont pas des parents d’un noeud Y lorsque je détecte une v-structure?
On cherche en effet à savoir quels noeuds sont les parents du noeud Y. Lorsque vous détectez des parents, les noeuds (voisins de Y) qui n'en sont pas son obligatoirement des fils (sinon, cela créerait des v-structures supplémentaires).
Comment propager “l’orientation des arcs obtenus” ?
L'algorithme est décrit aux pages 392 et 393 du Pearl. L’idée principale est le fait de ne pas créer de v-structures inexistantes. Lorsque vous avez un noeud dont on ne connait l'orientation d'aucun arc, vous ne pouvez pas orienter les arcs si vous ne détectez pas de v-structure. Par contre, si vous avez un arc dirigé vers le noeud, et que vous ne détectez pas de v-structure, vous pouvez déduire que tous les autres voisins sont des fils.
Comment vérifier que mon algorithme fonctionne correctement?
La variable “maladie” doit avoir 4 parents dans la structure orientée.
Dans la fonction "result = voisins(graphe,noeud)" de la question 3, le paramètre "graphe" est-il une matrice d'adjacence ?
Oui.
A la question 5, "candidats" est-il bien un vecteur contenant les numéros des candidats ?
Oui.
Comment implémenter la propagation des arcs?
Une manière de faire est d’utiliser une fonction récursive prenant en argument (entre autre) les deux noeuds A et B d'un arc nouvellement orienté. Vous connaissez alors le noeud sur lequel travailler (B), et un parent (A) de ce noeud.
Cette fonction serait à appeler sur tous les fils du noeud A. Pour chacun d'eux (X), vérifier la présence d'une structure en v avec A et B. S'il n'y a pas de structure en v, X est un fils de B, et il convient d'appeler la fonction récursive dessus.
Comment calculer un logarithme particulier dans Matlab?
Les logarithmes les plus courants sont déjà définis dans Matlab. Il existe par exemple des fonctions log2, log10. Pour des bases moins répandues, utilisez un quotient de logarithmes.
Est-il nécessaire d’utiliser le vecteur node_size dans les fonctions?
Non, il est possible de s’en passer sans difficulté. Vous pouvez toutefois recopier son code d’initialisation à l’intérieur de chacune des fonctions.
Comment vérifier la bonne marche des fonctions?
Il est important d’apprendre à tester vous-mêmes vos fonctions. Une bonne méthode consiste à fournir à la fonction des entrées dont vous pouvez calculer la réponse à la main. La difficulté réside donc dans la recherche d’entrées simples, mais permettant tout de même de détecter des erreurs. Pour vous permettre d’évaluer votre méthode de test, voici le résultat que doit renvoyer la fonction entropy(data,maladie) : 0.8969.
Pour corriger vos fonctions, il existe dans Matlab un debugger très bien fait.
Les fonctions demandées seront-elles utilisées avec d’autres matrices que “data”?
Oui! Ce sera le cas lors des tests effectuées sur ces fonctions ainsi que pour les travaux suivants.
Faut-il considérer le cas où les variables seront fournies aux fonction sous forme d’un string contenant le nom de la variable?
La variable sera toujours donnée par un nombre compris entre 1 et 17.
Pour faciliter l'utilisation de la fonction dans le travail, le script codage_parti1.m initialise dans matlab des valeurs portant le nom des variables aux nombres correspondants. Cela vous permez d'appeler la fonction de manière plus lisible, par exemple entropie(data,maladie).
A la question 3, la distribution marginale conjointe donnée en argument est-elle la distribution des variables qui sont utilisées pour former les symboles?
Oui. Par exemple, Par exemple, si les deux variables sont A et B alors la distribution qu'on nous donne est P(A,B).
Peut-on supposer que la fonction demandée à la question 3 ne sera utilisée que pour notre cas de 4 variables?
Oui, mais la généraliser n’est pas plus compliqué. Par exemple, la distribution marginale comprend les informations concernant le nombre et la cardinalité des variables.
Peut-on supposer que les variables n’auront jamais une cardinalité supérieure à 9?
Oui.
Que doit renvoyer l'appel à : Mcode1([11 22])?
La fonction doit renvoyer [1 2].
Comment mettre plusieurs chaines de caractères dans un vecteur (pour la question 8)?
Vous n'êtes pas obligé de renvoyer un vecteur de strings, vous pouvez renvoyer les codes sous forme de nombres. Vous pouvez créer une matrice colonne de chaines de caractères :
  • M = [code1;code2;code3]
  • ou, mieux encore : MM = strvcat(code1,code2,code3).
Dans ce dernier cas, la fonction deblank pourra vous être utile. Une autre méthode, plus élégante, consiste à utiliser des cellules de strings (cellstr).
Concernant la question 12, old_symb et new_symb doivent-ils être des vecteurs de nombres, ou de chaines de caractères ? La base de données fournie ('donnees') contient-elle des nombres ou des chaines de caractères ?
Donnees contient des nombres. Il y a une fonction nommée isstr(), pour cela. La fonction peut être écrite pour traiter des nombres, il est alors conseillé d’adapter l’alphabet. Vous pouvez également utiliser des tableaux de cellules.
D’autres réponses sont-elles acceptables pour huffcode([0.2 0.5 0.3])?
La fonction peut renvoyer 4 réponses différentes. Par exemple, [11 0 10] est aussi valable que [10 0 11].
Qu’entend-on par “taux de compression” à la question 6?
Il faut comprendre : “par rapport à la base de données”.
Peut-on coder la base de données (Q13) comme une cellule de chaines de caractères?
Oui.
Quel est l’alphabet utilisé par le code considéré à la question 6?
Les chiffres arabes.
A la question 6, la longueur moyenne théorique correspond-elle à la longueur moyenne du message divisé par le nombre de symbole?
Non. La longueur moyenne théorique se base sur le modèle de la source.
Faut-il prendre en compte la taille de l’alphabet pour calculer une longueur moyenne?
Non. Par contre, le taux de compression lui prend en compte la taille de l’alphabet.