244 61 7MB
French Pages 261 [260] Year 2015
i
i
i
i
Réseaux bayésiens avec R
i
i i
i
i
i
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i
i
i
Jean-Baptiste Denis et Marco Scutari
Réseaux bayésiens avec R
i
i i
i
i
i
i
i
ISBN : 978-2-7598-1198-4
c 2014, EDP Sciences, 17, avenue du Hoggar, BP 112, Parc d’activités de Courtabœuf, 91944 Les Ulis Cedex A
Imprimé en France
Tous droits de traduction, d’adaptation et de reproduction par tous procédés réservés pour tous pays. Toute reproduction ou représentation intégrale ou partielle, par quelque procédé que ce soit, des pages publiées dans le présent ouvrage, faite sans l’autorisation de l’éditeur est illicite et constitue une contrefaçon. Seules sont autorisées, d’une part, les reproductions strictement réservées à l’usage privé du copiste et non destinées à une utilisation collective, et d’autre part, les courtes citations justifiées par le caractère scientifique ou d’information de l’œuvre dans laquelle elles sont incorporées (art. L. 122-4, L. 122-5 et L. 335-2 du Code de la propriété intellectuelle). Des photocopies payantes peuvent être réalisées avec l’accord de l’éditeur. S’adresser au : Centre français d’exploitation du droit de copie, 3, rue Hautefeuille, 75006 Paris. Tél. : 01 43 26 95 35.
i
i i
i
i
i
i
i
Collection Pratique R dirigée par Pierre-André Cornillon et Eric Matzner-Løber Département MASS Université Rennes-2-Haute-Bretagne France
Comité éditorial Eva Cantoni Institut de recherche en statistique & Département d’économétrie Université de Genève Suisse
Pierre Lafaye de Micheaux Département de Mathématiques et Statistique Université de Montréal Canada
François Husson Département Sciences de l’ingénieur Agrocampus Ouest France
Sébastien Marque Directeur Département Biométrie Danone Research, Palaiseau France
Déjà paru dans la même collection : Analyse factorielle multiple avec R Jérôme Pagès, 2013 ISBN : 978-2-7598-0963-9 – EDP Sciences Psychologie statistique avec R Yvonnick Noël, 2013 ISBN : 978-2-8178-0425-5 – Springer Séries temporelles avec R Yves Aragon, 2011 : 978-2-8178-0208-4 – Springer
ISBN
Régression avec R Pierre-André Cornillon, Eric Matzner-Løber, 2011 ISBN : 978-2-8178-0184-1 – Springer Méthodes de Monte-Carlo avec R Christian P. Robert, George Casella, 2011 ISBN : 978-2-8178-0181-0 – Springer
i
i i
i
i
i
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page vii — #1
i
i
À mes enfants, leurs conjoints et mes petit-enfants. Jean-Baptiste
Pour mon amie Julie Bertrand, à l’occasion de son mariage. Marco
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page viii — #2
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page ix — #3
i
i
PRÉFACE L’établissement de liens entre les chercheurs semble procéder d’un mécanisme difficilement prédictible. Il fait fi de toute différence de statut : alors que je n’étais que tout jeune doctorant, un professeur émérite de l’université d’Arizona, croisé au hasard d’une conférence, a mis à mal pendant trois ans le budget courrier et photocopie de son département pour me faire parvenir, régulièrement et pardelà l’Atlantique, quantité de reproductions d’articles scientifiques. Cet étrange mécanisme d’association chez les chercheurs ne doit rien non plus à la langue : l’un français, l’autre italien, voilà que les auteurs de cet ouvrage se découvrent par Internet il y a trois ans, publient ensemble d’abord un premier ouvrage en langue anglaise (Scutari & Denis, 2014), puis le reprennent pour le mettre à jour, l’améliorer et produire la version française que nous tenons entre les mains. Cette alchimie ignore enfin superbement le temps et la géographie : alors que nous avions en commun une même cotutelle administrative et quoique seulement une petite dizaine de kilomètres séparent nos laboratoires, le trop prochain départ en retraite du premier auteur me fait réaliser qu’il a fallu finalement beaucoup de temps pour que mon chemin croise le sien et que nous nous attelions à la conduite de quelques chantiers partagés, pour notre plus grand bonheur. Mais grâce au fil de la passion scientifique, des affinités et du hasard, les liens se tissent et le réseau se met en place... Et c’est aussi de réseau que traite cet ouvrage. Le réseau bayésien réalise un mariage heureux entre la théorie des graphes, un remarquable outil pour communiquer simplement des cartes de relations structurées, et la théorie des probabilités, un outil non moins remarquable de mesure des incertitudes. Comment raisonner de façon quantitative en avenir incertain ? Un petit dessin valant mieux qu’un long discours, voici donc qu’aujourd’hui, un modèle statistique (paramétrique) sera avantageusement représenté par un assemblage de noeuds reliés par des flèches indiquant des relations de cause à effet. Les probabilités conditionnelles sont le ciment de ces assemblages. Une fois le réseau construit, l’inférence bayésienne précise la distribution de probabilité des paramètres (i.e. les causes) à partir de deux sources d’information : les observations (i.e. les effets) et l’expertise. Le cas échéant, sous réserve de disposer d’une base de données suffisante, l’utilisateur pourra également s’appuyer sur des algorithmes de choix de modèles pour apprendre la structure même du réseau. Associés aux techniques de Monte-Carlo, les réseaux bayésiens favorisent le dialogue interdisciplinaire et, par là , des modèles innovants et utiles. Ils interviennent aux interfaces de toutes les disciplines scientifiques où se mêlent savoir qualitatif et données quantitatives. Nul doute qu’en tant qu’intellectuel non conformiste passionné de philosophie, de théologie, de sciences naturelles, de mécanique et de mathématiques, le révérend Thomas Bayes lui-même n’aurait renié cette union. Associée aux avantages de la représentation graphique, sa célèbre formule, qui permet d’évaluer la pertinence
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page x — #4
i
i
de ce que l’on croit savoir à l’aulne de l’information apportée par une observation, montre ici toute sa puissance opérationnelle. La formule de Bayes – l’équation de l’apprentissage statistique – n’a vraiment pas fini de révolutionner la boîte à outils du chercheur : friande de méthodes de simulation, elle surfe sur les vagues des raz de marée informatiques successifs et porte la promesse d’aider efficacement à désenchevêtrer les réseaux complexes de causes qui apparaissent dans les défis scientifiques en ce début du troisième millénaire. D’ailleurs, nos neurones ne formeraient ils pas eux-mêmes des réseaux bayésiens ? Sous l’influence des recherches de Judea Pearl entreprises dans les années 1980 à UCLA, les disciplines issues des technologies de l’information (data mining, systèmes experts, intelligence artificielle, recherche opérationnelle...) ont été nettement plus promptes à percevoir le potentiel d’applications des réseaux bayésiens que la communauté statistique elle-même. Sans doute cette dernière était-elle alors moins soucieuse d’application que de la controverse philosophique qui semble parfois encore sévir quant à l’interprétation concrète de la probabilité, propriété de l’objet ou du sujet. Tant il est vrai que les réseaux bayésiens peuvent être à la fois perçus comme une contribution à l’ingénierie – ce qui nous apprend à faire –, qu’une contribution à la science – ce qui nous apprend à connaître. A la décharge des statisticiens, inquiétante engeance qui a fait du doute sa profession, l’enthousiasme des promoteurs des réseaux bayésiens et la commodité d’emploi de ceux-là ont parfois besoin du garde-fou du sceptique, à la fois sur le concept (Dawid, 2010) et sur les outils de recherche automatique de structure de réseau (Raskutti & Uhler, 2013). L’intelligence artificielle, même sous sa forme la plus subtile, le réseau bayésien, ne garantit en rien que l’on se soit affranchi de toute trace de bêtise très humaine, surtout quand les enjeux touchent au Graal du moderne : la quête de la Connaissance. Peut-être cette zone de friction irritante entre la théorie mathématique et notre besoin d’explications causales n’est-elle rien d’autre qu’un nouvel avatar des contemporains et successeurs de Bayes cherchant à s’appuyer sur son théorème pour prouver l’existence de Dieu. La plupart des étudiants redoutent les cours de statistique, notamment à cause de la difficulté des concepts probabilistes et du formalisme intimidant du langage mathématique qui les sous-tendent. Une initiation aux réseaux bayésiens, à laquelle cet ouvrage pourrait immédiatement servir de support d’enseignement très motivant, leur permettrait de s’apercevoir qu’il s’agit simplement de se doter de moyens pour prendre en compte l’incertitude dans le raisonnement ! Dans un souci de pédagogie, les auteurs ont ici balisé un chemin très accessible pour progresser dans le maniement des réseaux bayésiens et la découverte de leurs applications les plus intéressantes. Les premiers chapitres, fort didactiques, sont faciles à suivre : s’appuyant à chaque fois sur un exemple qu’ils développent sous le logiciel R, les auteurs mettent en évidence de façon très intuitive et progressive les concepts théoriques utiles, tout en rappelant les briques de base, modèles multinomiaux
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xi — #5
i
i
et normaux multivariés. Les chapitres suivants présentent des applications de cas d’études réels et de structures plus complexes construites à partir des briques élémentaires et où le caractère opérationnel des réseaux bayésiens apparaît dans toute son élégante efficacité. La lecture terminée, le praticien sera en mesure de comprendre et de se réapproprier le modèle probabiliste : le réseau bayésien lui donne la clé pour ériger, sur des bases rationnelles solides, un lien entre la connaissance du problème et les données expérimentales. En conclusion, j’adresse mes félicitations les plus vives aux deux auteurs pour cette excellente contribution à la statistique appliquée en général et au raisonnement bayésien en particulier. Gageons qu’étudiants et enseignants, ingénieurs et chercheurs, néophytes ou spécialistes s’approprieront facilement les idées-forces de ce beau livre et y trouveront inspiration et matière à progresser avec plus d’assurance sur leur chemin.
Cambridge, Grande-Bretagne mai, 2014
Eric Parent Professeur à AgroParisTech
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xii — #6
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xiii — #7
i
i
AVANT-PROPOS Les applications basées sur les réseaux bayésiens se sont multipliées ces dernières années. On les retrouve dans des champs aussi différents que la biologie des systèmes, l’économie, les sciences sociales et l’informatique médicale. Différents aspects et propriétés de cette classe de modèles mathématiques sont cruciaux dans la pratique de ces applications : la possibilité d’apprendre les effets causaux à partir de données observées en sciences sociales alors que le recueil de données expérimentales est le plus souvent impossible ; la représentation graphique simple des dépendances entre variables qui permet une compréhension intuitive et qualitative des réseaux de réactions en sciences biologiques ; la possibilité de construire des modèles hiérarchiques complexes pour les phénomènes qui mettent en jeu de très nombreuses composantes, en associant à chacune d’entre elles les distributions de probabilité appropriées... Et pourtant, toutes ces possibilités sont basées sur un ensemble très réduit de définitions et de propriétés que nous détaillons tout au long de cet ouvrage. Cependant, la manipulation de données multidimensionnelles comportant des valeurs manquantes, les détails fins concernant le raisonnement causal, l’apprentissage sous contraintes spécifiques à des champs d’application particuliers et autres sujets très avancés sont au-delà de la portée de ce livre. Le lecteur trouvera des références utiles dans les sections Lectures complémentaires, mais nous pouvons déjà citer Nagarajan et al. (2013), Pourret et al. (2008) et Pearl (2009) comme étant les principales. De la même manière, le choix du langage R est d’abord motivé par sa croissante popularité dans de très nombreuses disciplines. Le principal reproche que l’on pourrait lui adresser serait qu’il ne dispose que d’une interface en lignes commande, et semble donc d’un abord rébarbatif et d’un apprentissage ardu pour les experts dont les activités habituelles sont éloignées de la programmation. Cependant, une fois passée la phase d’initiation, R met à disposition de ses utilisateurs un environnement extrêmement polyvalent, à la fois pour l’interprétation de données et pour la mise au point d’approches statistiques originales. La disponibilité de plusieurs paquets couvrant les différents aspects des réseaux bayésiens offerts à la communauté par différents contributeurs permet au lecteur d’explorer le contenu de ce livre sans avoir à réécrire les approches standards décrites dans la littérature scientifique. Parmi ces paquets, nous mettrons en exergue les possibilités étendues de bnlearn (réalisé par le second auteur, qui en est déjà à sa version 3.5 au moment où nous écrivons ces lignes) ; il permet au lecteur de se concentrer sur l’étude des réseaux bayésiens sans avoir à entrer dans les particularités de chacun des autres paquets, grâce à des fonctions d’interfaçage. Pour le lecteur intéressé, une présentation plus approfondie des capacités des différents paquets se trouve dans Højsgaard et al. (2012) et dans les documentations qui les accompagnent, en particulier les vignettes et articles de référence. Réseaux bayésiens avec R : élaboration, manipulation et utilisation en modélisa-
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xiv — #8
i
i
tion appliquée introduit le lecteur aux réseaux bayésiens de manière pragmatique, au travers d’exemples simples mais porteurs de sens, construits et interprétés avec le logiciel de calcul statistique R. De fait, le caractère pratique est un point clef de ce livre, et les explications et exemples qui émaillent le texte s’ingénient à détailler chaque étape simplement en proposant toutes les commandes R nécessaires pour pouvoir reproduire la démarche. D’autres excellents ouvrages existent aussi, indiqués dans les sections « Lectures complémentaire » placées en fin de chaque chapitre. Cependant, nous pensons que la manière dont nous présentons les choses est différente, basée sur l’interprétation et l’intuition. Ce livre constitue d’abord une revue introductive sur les réseaux bayésiens et fournit, à celui qui veut mettre en œuvre les réseaux bayésiens, des exemples de l’utilisation de R à adapter à ses propres données, pour des classes très variées de modèles. Nous espérons aussi que ce livre sera utile à des non-statisticiens travaillant sur des domaines très différents. Évidemment, il n’est pas possible de donner des exemples pour tous les domaines où les réseaux bayésiens sont utiles. C’est pourquoi nous avons tenté d’offrir la meilleure compréhension d’approches génériques et des différentes étapes qui les composent. Pour cela, nous avons limité le nombre d’exemples pour les traiter en profondeur, certains que les experts seront capables de les transposer dans leurs applications respectives. Nous partons toujours des notions les plus simples et augmentons progressivement la complexité des concepts ; la partie théorique est ainsi concentrée dans le 4e chapitre et n’est pas nécessaire pour bien suivre les autres chapitres. Nous avons aussi pris garde de bien distinguer la définition des modèles probabilistes et leur estimation à partir de jeux de données, faute de quoi nombre de confusions s’introduisent lors des applications. Réseaux bayésiens avec R : élaboration, manipulation et utilisation en modélisation appliquée peut servir de base pour un enseignement d’un semestre (ou demisemestre), éventuellement en y ajoutant quelques livres parmi ceux que nous recommandons. Le matériel plus théorique et l’analyse détaillée de deux applications réelles que nous avons menées se trouvent en seconde partie de l’ouvrage pour compléter une bonne compréhension de ce que sont les réseaux bayésiens, d’un point de vue à la fois théorique et appliqué. Le niveau du livre se place entre master et doctorat selon les études suivies par les étudiants. Pour les disciplines comme les mathématiques, les statistiques ou l’informatique, le niveau est plutôt master 1 ; pour les sciences de la vie ou les sciences sociales, le manque de fondement en théorie des probabilités le rend plus adapté au niveau du doctorat dans une optique d’application. Dans le premier cas, c’est sans doute la seconde partie du livre qui sera la plus profitable, alors que dans le second cas, les étudiants auront intérêt à bien approfondir les trois premiers, voire les deux premiers, chapitres avant d’aborder les bases méthodologiques sous-jacentes. Ces derniers pourront aussi bénéficier des annexes dédiées à la théorie des graphes et aux probabilités. Enfin, les solutions des exercices proposés à la fin des chapitres sont données pour la commodité du lecteur qui s’y penchera. Nous avons tenté de varier les contextes
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xv — #9
i
i
d’application dans les premiers chapitres ; les exemples réels du dernier chapitre devraient motiver les étudiants en leur montrant des applications qui ne sont pas que pédagogiques. Les compétences requises pour comprendre en profondeur le contenu du livre sont pour la plupart de niveau licence. Cependant, quelques parties plus spécialisées reposent sur des concepts dont l’illustration ne pouvait être entreprise dans l’ouvrage. Les bases de la programmation R ne sont pas rappelées, mais il existe de très bons livres introductifs ; nous suggérons entre beaucoup d’autres Venables & Ripley (2002), Spector (2009), Cornillon et al. (2012) et Crawley (2013). Des rappels simples sur la théorie des graphes et les distributions de probabilité sont en annexes, comme références faciles. Des indications de la littérature que nous croyons utiles se trouvent en fin de chaque chapitre et du matériel de soutien sera mis en ligne sur le site www.bnlearn.com, en particulier les codes R utilisés. Dans ce livre, une commande à lancer sera précédée de > et sa typographie, comme celle du résultat obtenu, sera en chasse fixe : > 1 + 2 + 3 [1] 6 L’organisation du livre est la suivante. Les réseaux bayésiens discrets sont les premiers à être décrits (chapitre 1), suivis par les réseaux bayésiens gaussiens (chapitre 2) ; il s’agit des réseaux bayésiens les plus couramment utilisés. Les réseaux hybrides (qui comprennent tout type de variables aléatoires suivant tout type de distributions de probabilité, mélangeant typiquement variables discrètes et continues) sont présentés au chapitre 3. Ces trois premiers chapitres détaillent le processus complet de modélisation à l’aide des réseaux bayésiens, depuis l’apprentissage de structure jusqu’à l’estimation des paramètres. Et toutes ces étapes sont illustrées par de nombreuses lignes de code R. Un traitement concis mais rigoureux des fondements des réseaux bayésiens est donné en chapitre 4 ; il inclut une rapide introduction aux réseaux bayésiens causaux. Pour être plus complet, nous proposons dans le chapitre 5 un tour d’horizon des logiciels disponibles, tant liés à R qu’indépendants de R. Finalement, deux exemples réels sont analysés au chapitre 6. Le premier examine diverses approches de modélisation graphique pour prédire la proportion de muscles, graisse et os de différents segments corporels à partir d’une petite base de données. Le second reprend l’étude de référence du réseau causal de protéines-signal publiée dans la revue Science par Sachs et al. (2005). Pour finir, nous voudrions signaler notre reconnaissance aux collègues et aux amis qui nous ont aidés : en nous suggérant la démarche, et en nous soutenant dans la conception et l’écriture de ce livre et de sa version anglaise Bayesian Networks: with Examples in R. Plus particulièrement, nous voudrions remercier les éditeurs scientifiques d’EDP Sciences, Pierre-André Cornillon, Eric Matzner-Løber et François Husson. Initialement, c’est ce dernier qui a sollicité le premier auteur pour
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xvi — #10
i
i
rédiger un livre en français sur les réseaux bayésiens. Ne se sentant pas suffisamment assuré sur tous les aspects, celui-là a cherché (et trouvé) un bon co-auteur pour mener à bien le projet. Ce dernier ne maîtrisant pas suffisamment la langue de Molière, une version anglaise a d’abord été rédigée. Elle a finalement été proposée et acceptée en parallèle (Scutari & Denis, 2014). Il existe cependant quelques petits ajouts pour répondre aux critiques des éditeurs scientifiques de EDP Sciences, en particulier un bref chapitre de conclusion et l’indexation de la quasi-totalité des fonctions R utilisées dans les portions de code illustratives. Merci à Eric Parent qui nous a rédigé une fort intéressante préface. Cette version a aussi bénéficié de la relecture attentive de François Husson, Pierre-André Cornillon, Eric Matzner-Løber et Jeanie Denis qui ont grandement diminué le nombre de coquilles présentes dans la version initiale ; nous les en remercions.
Jouy-en-Josas, France Londres, Grande-Bretagne mai 2014
Jean-Baptiste Denis Marco Scutari
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xvii — #11
i
i
Table des matières Préface
xi
Avant-propos 1 Cas 1.1 1.2 1.3 1.4 1.5
discret : les réseaux bayésiens multinomiaux Exemple introductif . . . . . . . . . . . . . . . . . Représentation graphique . . . . . . . . . . . . . . Représentation probabiliste . . . . . . . . . . . . . Estimation des tables de probabilités . . . . . . . . Apprentissage de la structure du graphe . . . . . . 1.5.1 Tests d’indépendance conditionnelle . . . . 1.5.2 Scores de réseaux . . . . . . . . . . . . . . . 1.6 Utilisation d’un rb discret . . . . . . . . . . . . . . 1.6.1 Utilisation du dag . . . . . . . . . . . . . . 1.6.2 Utilisation des distributions de probabilités 1.7 Diagrammes . . . . . . . . . . . . . . . . . . . . . . 1.7.1 Tracer le dag d’un rb . . . . . . . . . . . . 1.7.2 Représenter des probabilités conditionnelles discrètes . . . . . . . . . . . . . . . . . . . . 1.8 Lectures complémentaires . . . . . . . . . . . . . .
2 Cas 2.1 2.2 2.3 2.4 2.5
xiii
. . . . . . . . . . . .
1 1 2 7 12 15 16 19 22 22 25 31 31
. . . . . . . . . . . . . . . . . .
33 35
. . . . . . . . . . . .
continu : les réseaux bayésiens gaussiens Exemple introductif . . . . . . . . . . . . . . . . . . Représentation graphique . . . . . . . . . . . . . . . Représentation probabiliste . . . . . . . . . . . . . . Estimation des paramètres . . . . . . . . . . . . . . . Apprentissage de la structure du dag . . . . . . . . 2.5.1 Tests d’indépendance conditionnelle . . . . . 2.5.2 Scores de réseaux . . . . . . . . . . . . . . . . 2.6 Utilisation d’un rbg . . . . . . . . . . . . . . . . . . 2.7 Diagrammes . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Tracé du dag d’un rb . . . . . . . . . . . . . 2.7.2 Représenter des distributions conditionnelles
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
37 37 39 42 46 50 50 53 54 59 59 62
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xviii — #12
i
xviii
i
Réseaux bayésiens avec R 2.8 2.9
Propriétés supplémentaires . . . . . . . . . . . . . . . . . . . . . . Lectures complémentaires . . . . . . . . . . . . . . . . . . . . . . .
3 Réseaux bayésiens hybrides 3.1 Exemple introductif . . . . . . . . . . . . . . . . . . . 3.1.1 Mélange de variables discrètes et continues . . 3.1.2 Discrétisation de variables continues . . . . . . 3.1.3 Utilisation d’autres distributions de probabilité 3.2 Exemple d’une récolte parasitée . . . . . . . . . . . . . 3.2.1 Modélisation . . . . . . . . . . . . . . . . . . . 3.2.2 Exploration . . . . . . . . . . . . . . . . . . . . 3.3 A propos des logiciels bugs . . . . . . . . . . . . . . . 3.4 Lectures complémentaires . . . . . . . . . . . . . . . .
65 66
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
67 68 69 72 74 75 77 78 84 85
4 Théorie des réseaux bayésiens et algorithmes associés 4.1 Indépendance conditionnelle et séparation graphique . . 4.2 Les réseaux bayésiens . . . . . . . . . . . . . . . . . . . 4.3 Couvertures de Markov . . . . . . . . . . . . . . . . . . 4.4 Graphes moralisés . . . . . . . . . . . . . . . . . . . . . 4.5 Apprentissage d’un réseau bayésien . . . . . . . . . . . . 4.5.1 Apprentissage de la structure . . . . . . . . . . . 4.5.2 Estimation des paramètres . . . . . . . . . . . . 4.6 Inférence par réseaux bayésiens . . . . . . . . . . . . . . 4.6.1 Raisonnement probabiliste et évidence . . . . . . 4.6.2 Mise à jour de la connaissance . . . . . . . . . . 4.7 Réseaux bayésiens causaux . . . . . . . . . . . . . . . . 4.8 Lectures complémentaires . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
87 87 89 94 97 99 103 115 116 116 118 124 128
5 Logiciels pour réseaux bayésiens 5.1 Revue des paquets R . . . . . . . . . . . . . 5.1.1 Le paquet deal . . . . . . . . . . . . 5.1.2 Le paquet catnet . . . . . . . . . . . 5.1.3 Le paquet pcalg . . . . . . . . . . . . 5.2 Les logiciels bugs . . . . . . . . . . . . . . . 5.2.1 Distributions de probabilités . . . . 5.2.2 Dépendances complexes . . . . . . . 5.2.3 Inférence par échantillonnage mcmc 5.3 Autres logiciels . . . . . . . . . . . . . . . . 5.3.1 BayesiaLab . . . . . . . . . . . . . . 5.3.2 Hugin . . . . . . . . . . . . . . . . . 5.3.3 GeNIe . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
131 131 133 135 137 139 139 140 140 142 142 142 143
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
6 Réseaux bayésiens en grandeur réelle 145 6.1 Prédiction de la Composition Corporelle . . . . . . . . . . . . . . . 145
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xix — #13
i
i
Table des matières
6.2
6.3
6.1.1 Approche par régression et utilité des rb 6.1.2 Approche prédictive . . . . . . . . . . . . 6.1.3 Recherche de rb candidats . . . . . . . . Apprentissage d’un réseau de protéines-signal . . 6.2.1 Un réseau bayésien gaussien . . . . . . . . 6.2.2 Discrétisation de l’expression des gènes . . 6.2.3 Moyennage de modèles . . . . . . . . . . . 6.2.4 Choix du seuil de significativité . . . . . . 6.2.5 Traitement de données d’intervention . . 6.2.6 Requêtes sur le réseau . . . . . . . . . . . Lectures complémentaires . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
xix . . . . . . . . . . .
Conclusion
147 148 152 159 161 164 165 171 173 177 180 181
A Théorie des graphes 187 A.1 Graphes, nœuds et arcs . . . . . . . . . . . . . . . . . . . . . . . . 187 A.2 La structure d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . 189 A.3 Lectures complémentaires . . . . . . . . . . . . . . . . . . . . . . . 190 B Distributions de probabilités B.1 Généralités . . . . . . . . . . . . . . . . . B.2 Distributions marginales et conditionnelles B.3 Distributions discrètes . . . . . . . . . . . B.3.1 Distribution binomiale . . . . . . . B.3.2 Distribution multinomiale . . . . . B.3.3 Autres distributions courantes . . B.4 Distributions continues . . . . . . . . . . . B.4.1 Distribution normale . . . . . . . . B.4.2 Distribution normale multivariable B.4.3 Autres distributions courantes . . B.5 Distributions conjuguées . . . . . . . . . . B.6 Lectures complémentaires . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
C Glossaire D Solutions D.1 Exercices D.2 Exercices D.3 Exercices D.4 Exercices D.5 Exercices
191 191 193 194 194 195 195 196 196 197 198 200 200 201
du du du du du
chapitre chapitre chapitre chapitre chapitre
1. 2. 3. 4. 5.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
207 207 212 217 221 225
Bibliographie
229
Index
236
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page xx — #14
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 1 — #15
i
i
Chapitre 1
Cas discret : les réseaux bayésiens multinomiaux Dans ce chapitre, les idées fondamentales et les principales utilisations des réseaux bayésiens (rb) sont introduites à partir d’un exemple d’école de taille réduite : une enquête sur l’emploi de différents moyens de transport. Seules des variables discrètes sont utilisées, les variables continues sont introduites au chapitre 2 et l’usage simultané de divers types de variables est abordé au chapitre 3.
1.1
Exemple introductif : une enquête sociologique
Imaginons une enquête simple dont le but est la recherche de facteurs induisant l’usage de différents moyens de transport, et plus particulièrement l’usage de la voiture et du train. De telles enquêtes sont souvent menées pour évaluer la satisfaction de clients en fonction des groupes sociologiques, ou pour apprécier l’accord avec différentes politiques publiques ou la préférence à donner à différents aménagements publics envisageables. Des exemples réels de ce type se trouvent dans Kenett et al. (2012). Pour notre enquête, nous allons supposer que chaque individu est caractérisé par les six variables suivantes : – (A) : l’âge de la personne noté en trois classes, jeune pour les individus en dessous de 30 ans, adulte pour ceux entre 30 et 60 ans et finalement vieux pour ceux qui ont dépassé les 60 ans ; – (S) : le sexe biologique de la personne, codé respectivement par F pour les femmes et M pour les hommes ; – (E) : le niveau d’études atteint par la personne codé par n1 pour ceux qui n’ont pas obtenu le bac et n2 pour les autres ; – (P) : permettra de distinguer les professions libérales (codées lib) de toutes les autres professions (codées non lib) ;
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 2 — #16
i
2
i
Réseaux bayésiens avec R – (D) : indiquera la taille de la commune où se trouve le domicile de la personne : soit petite soit grande selon une limite précisée ; – (T) : enfin le moyen de transport le plus utilisé par la personne qui peut être soit auto (pour la voiture), soit train (pour le train) soit autre (pour tous les autres cas possibles). Dans le cadre de cette enquête, les variables peuvent être regroupées en trois catégories : les indicateurs démographiques, les indicateurs socio-économiques et les variables cibles. (A) et (S) font partie de la première catégorie, leur distribution caractérise la population considérée, elles sont imposées à l’individu qui ne peut pas les modifier. Dans la catégorie des indicateurs socio-économiques se trouvent (E), (P) et (D) des personnes interrogées. Il s’agit de caractéristiques intrinsèques à l’individu qui traduisent la position qu’a prise la personne dans la société. Elles fournissent une description approchée du style de vie de l’individu, comme par exemple la manière dont il dépense son argent ou choisit ses horaires de travail. Enfin, la dernière variable (T), le moyen de transport, variable également socioéconomique, a un statut particulier puisque c’est la variable cible de l’enquête, celle dont on voudrait pouvoir expliquer les variations en fonction des précédentes.
1.2
Représentation graphique
Dans le contexte des rb, le raisonnement qualitatif sur les relations qu’entretiennent les variables se réalise graphiquement. Le type des variables retenues pour l’enquête, et plus généralement dans les trois classes dans lesquelles on peut les placer, suggèrent qu’elles ne sont pas indépendantes. C’est-à-dire que certaines associations existent entre elles. Celles-là peuvent être directes ou indirectes, dans ce dernier cas elles sont modélisées par l’enchaînement d’une série de relations directes. Ces interrelations peuvent être représentées de manière synthétique et intuitive par un graphe orienté, la première des deux entités principales des rb. Chaque nœud 1 du graphe correspond à l’une des variables de l’enquête. Et donc le graphe associé à cet exemple comprendra six nœuds auxquels seront attribués les mêmes codes que les variables, c’est-à-dire (A), (S), (E), (P), (D) et (T). Les relations directes entre les nœuds seront représentées par un arc entre les paires de variables concernées, plus précisément (A) → (E) signifiera que la variation de (E) sera définie en fonction de la valeur de (A). On notera que la relation n’est pas transcrite de manière symétrique. Le nœud d’où part l’arc est qualifié de nœud parent, tandis que celui où il arrive est dénommé nœud enfant, en référence aux relations de parenté que l’on peut trouver dans un arbre généalogique 2 . Les relations indirectes entre les nœuds ne sont pas explicitement représentées, résultats des relations directes. Par exemple, la succession de (A) → (E) et (E) → (D) 1. Nœuds et variables sont synonymes dans le contexte des rb. 2. Mais on verra que les graphes associés aux rb peuvent être beaucoup plus compliqués qu’un arbre généalogique.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 3 — #17
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
3
indique que ce dernier dépend indirectement de (A) par l’intermédiaire de (E). Une telle succession d’arcs est appelée chemin 3 . Il est important de noter que les chemins (ensemble d’arcs successifs de même orientation) ne doivent pas créer de cycles, c’est-à-dire ne peuvent pas permettre de revenir sur un nœud par lequel on est déjà passé, faute de quoi, le rb ne serait pas valable 4 ; c’est la raison pour laquelle les graphes utilisés pour la structure des rb sont des dag 5 : des graphes acycliques orientés. Il est important de remarquer dès maintenant que l’interprétation de ces relations doit être faite avec précaution. La présence des flèches que sont les arcs pourrait conduire à une interprétation de relations de causalité, et c’est d’ailleurs ainsi qu’elles sont souvent exprimées par les experts. C’est possible, mais ce n’est pas porté par le modèle mathématique : il s’agit d’une interprétation additionnelle. D’ailleurs, nous verrons que dans certaines conditions les arcs peuvent être inversés sans changer la modélisation probabiliste portée sur les variables. Si donc nous interprétons (A) → (E) comme (A) est la cause d’un effet sur (E), c’est que nous ajoutons une information. C’est exactement la situation de l’interprétation d’une corrélation. En fait, la justification du sens des flèches se trouve dans la manière dont vont être définies les distributions de probabilité. Cet aspect sera traité en §4.7. Pour créer, manipuler et afficher les diverses propriétés des dag d’un rb, nous utiliserons principalement le paquet R bnlearn (raccourci pour Bayesian network learning) : > library(bnlearn) Dans un premier temps, nous créons un dag comprenant toutes les variables de notre enquête comme nœuds et aucun arc : > dag dag Random/Generated Bayesian network model: [A][S][E][P][D][T] nodes: 3. 4. 5. 6. 7.
6
En anglais path. Les successions comme (A) → (E) → (A) sont donc interdites. En anglais Directed Acyclic Graph. En anglais empty graph. Classe particulière de bnlearn.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 4 — #18
i
4
i
Réseaux bayésiens avec R arcs: undirected arcs: directed arcs: average markov blanket size: average neighbourhood size: average branching factor:
0 0 0 0.00 0.00 0.00
generation algorithm:
Empty
Nous allons lui ajouter progressivement des arcs pour tenir compte des dépendances conditionnelles que nous supposons exister entre les variables de l’enquête. Comme nous l’avons déjà indiqué implicitement ci-dessus, nous pensons que les deux variables (A) et (S) ne sont influencées par aucune des autres variables puisque ce sont des variables de la catégorie indicateurs démographiques. Il n’y aura donc aucun arc pointant vers elles. En revanche, il semble important de notifier que (A) et (S) ont toutes les deux une influence directe sur (E). Il est reconnu, par exemple, que le nombre de personnes allant à l’université croît d’année en année ; cela a comme conséquence que la probabilité qu’un jeune possède un diplôme universitaire est plus grande que celle d’un vieux. Nous allons donc placer un arc de (A) vers (E) : > dag dag dag dag dag dag dag Random/Generated Bayesian network model: [A][S][E|A:S][P|E][D|E][T|P:D] nodes: arcs: undirected arcs: directed arcs: average markov blanket size: average neighbourhood size: average branching factor:
6 6 0 6 2.67 2.00 1.00
generation algorithm:
Empty
On peut aussi l’obtenir directement grâce à la fonction modelstring de bnlearn : > modelstring(dag) [1] "[A][S][E|A:S][P|E][D|E][T|P:D]" Dans cette formule, chaque variable possède son propre parenthésage de crochets et les variables exerçant une dépendance directe sur elle sont placées après la barre
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 6 — #20
i
6
i
Réseaux bayésiens avec R verticale (|) et séparées par deux points (:). Ainsi [E|A:S] se décode comme (E) se définit à partir de (A) et (S), impliquant la présence des deux arcs (A) → (E) et (S) → (E). Bien entendu, certaines variables, comme (A), ne dépendent d’aucune autre et se trouvent donc seules dans leurs crochets : [A] ; ce sont des nœuds racine. bnlearn propose de nombreuses fonctions pour révéler et modifier les caractéristiques des objets de classe bn. Deux exemples types sont nodes et arcs : > nodes(dag) [1] "A" "S" "E" "P" "D" "T" > arcs(dag) from to [1,] "A" "E" [2,] "S" "E" [3,] "E" "P" [4,] "E" "D" [5,] "P" "T" [6,] "D" "T" Cette dernière fonction peut aussi servir pour définir la structure du graphe en introduisant la matrice de structure similaire, c’est-à-dire ayant une ligne par arc et les deux colonnes depuis (from) et vers (to) : > dag2 arc.set arcs(dag2) all.equal(dag,dag2) [1] TRUE La création d’un objet bn réalisée d’une manière ou de l’autre empêche l’introduction malencontreuse d’un cycle dans la structure, par exemple : > set.arc(dag, from = "T", to = "E") Error in arc.operations(x = x, from = from, to = to, op = "set", check.cycles = check.cycles, ~: the resulting graph contains cycles.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 7 — #21
i
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
1.3
7
Représentation probabiliste
Dans le contexte des rb, la représentation probabiliste est celle de la représentation quantitative des connaissances. Dans la section précédente, nous avons construit un graphe orienté acyclique (dag) entre les six variables de notre modèle pour indiquer entre quelles variables (et dans quel sens) se situaient les dépendances directes. Pour compléter la spécification du rb, nous devons maintenant ajouter une distribution de probabilité à chacune des variables. On remarquera que toutes sont catégorielles, et nous ne tiendrons pas compte de l’ordre naturel qui existe entre catégories pour certaines variables. Il est donc logique d’associer ces catégories à des niveaux (levels) de facteurs de R, par exemple avec le code suivant reprenant les conventions établies en §1.1 : > > > > > >
A.lv S.lv E.lv P.lv D.lv T.lv
nodes(dag) [1] "A" "S" "E" "P" "D" "T" > nodes(dag3) [1] "A" "D" "E" "P" "S" "T" Nous pouvons combiner le dag stocké dans l’objet dag avec une liste des distributions locales (ici stockée dans un objet nommé tpc) pour obtenir un objet de classe bn.fit que nous nommerons bn :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 10 — #24
i
10
i
Réseaux bayésiens avec R
Age (A)
Sexe (S)
Etudes (E)
Profession (P)
Domicile (D)
Transport (T)
Age (A)
Sexe (S)
Age (A)
Sexe (S) Etudes (E)
Etudes (E) Domicile (D)
Profession (P)
Domicile (D)
Etudes (E) Transport (T)
Profession (P)
Fig. 1.2 – dag représentant les dépendances conditionnelles directes entre les variables observées de l’enquête : âge (A), sexe (S), niveau d’études (E), profession (P), domicile (D) et moyen de transport (T). Les tables de probabilités locales associées à chacun des nœuds sont reportées en partie inférieure.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 11 — #25
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
11
> tpc bn nparams(bn) [1] 21 Les objets de classe bn.fit de bnlearn permettent la description de rb. Ils incluent toute information nécessaire permettant de reconstituer le dag (comme les parents et les enfants de chaque nœud) ainsi que les distributions locales (au travers des paramètres associés à chaque nœud). Dans la plupart des cas utiles, on peut leur appliquer les fonctions associées aux objets de classe bn qui ne sont basées que sur le dag. Par exemple : > arcs(bn) from to [1,] "A" "E" [2,] "S" "E" [3,] "E" "P" [4,] "E" "D" [5,] "P" "T" [6,] "D" "T" D’autres possibilités communes sont les fonctions nodes, parents et children. On peut aussi facilement extraire des objets bn.fit les tables de probabilités conditionnelles. Soit on imprime directement la composante associée à une variable : > bn$D Parameters of node D (multinomial distribution) Conditional probability table: D
E
n1 n2 petite 0.25 0.20 grande 0.75 0.80
soit on extrait uniquement les probabilités par la fonction coef pour un usage ultérieur : > D.tpc bn entraîne l’impression de toutes les tables de probabilités, marginales ou conditionnelles suivant le nœud.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 12 — #26
i
12
i
Réseaux bayésiens avec R
1.4
Estimation des tables de probabilités
Dans le cadre de notre enquête hypothétique, nous avons pour l’instant supposé connaître et le dag et les probabilités associées aux distributions locales qui définissent complètement le réseau bayésien. Dans cette situation, les rb peuvent s’assimiler à des systèmes experts puisqu’ils formalisent les connaissances d’un ou plusieurs experts du domaine. Mais dans la plupart des cas, les experts sont incapables de spécifier le réseau bayésien et préfèrent s’appuyer sur des observations pour inférer au moins les valeurs des paramètres, et même parfois aussi la structure de dépendance conditionnelle. Le plus souvent, les données se trouvent stockées dans un fichier et il faut commencer par les importer dans R, par exemple avec la fonction read.table en créant un data frame, ici dénommé enquete : > enquete head(enquete) A D 1 adulte grande 2 adulte petite 3 adulte grande 4 adulte grande 5 adulte grande 6 adulte petite
E n1 n2 n2 n1 n1 n1
non non non non non non
P lib lib lib lib lib lib
S T F auto M auto F train M auto M auto F train
ou simplement regarder la taille de l’échantillon dont nous disposons : > dim(enquete) [1] 500 6 Dans le cas de cette enquête, et plus généralement celui des réseaux bayésiens à variables discrètes, les paramètres à estimer sont les probabilités, marginales ou conditionnelles, des distributions locales. Il est naturel d’utiliser les fréquences empiriques correspondantes des données, par exemple :
c c = non lib | E = n1) = Pr(P = non lib, E = n1) = #{P = non lib, E = n1} Pr(P c = n1) #{E = n1} Pr(E où #{P = non lib, E = n1} indique le nombre d’observations du jeu de données vérifiant la condition entre accolades. Elles correspondent aux estimateurs fréquentistes classiques du maximum de vraisemblance. Avec bnlearn, on peut obtenir les estimations grâce à la fonction bn.fit.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 13 — #27
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
13
C’est le complément de la fonction custom.fit utilisée dans la section précédente. Au lieu d’utiliser les probabilités spécifiées par l’usager, elles sont estimées à partir des données disponibles. L’appel en est : > bn.mle options(digits = 3) > ppt ppt E P n1 n2 lib 0.0192 0.0741 non lib 0.9808 0.9259 qui produit le même résultat que ce qu’a calculé la fonction bn.fit : > all.equal(ppt,bn.mle$P$prob) [1] TRUE La procédure d’estimation utilisée n’a rien à voir avec les réseaux bayésiens, nous pourrions utiliser aussi bien une inférence bayésienne en choisissant l’espérance de la postériore au prix de la définition d’une priore sur l’ensemble des paramètres. bnlearn offre une telle possibilité lorsque l’argument method de bn.fit vaut "bayes". Quelques idées sur l’usage des probabilités et leurs propriétés pour les rb discrets se trouvent dans les annexes (§B.3 et §B.5). Dans ce cas, la priore est implicitement définie par l’argument supplémentaire iss pour imaginary sample size = (taille imaginaire de l’échantillon) 9 : > bn.bayes bn.bayes$P Parameters of node P (multinomial distribution) Conditional probability table: P
E
n1 n2 lib 0.0257 0.0893 non lib 0.9743 0.9107
Effectivement, les deux colonnes de probabilités de la matrice ci-dessus, estimations bayésiennes, sont plus proches de 0.5, valeur centrale de la priore, que leurs équivalentes du maximum de vraisemblance. C’est une propriété intéressante pour 11. Remarquons que iss peut ne pas être entier, la seule contrainte est qu’il soit strictement positif.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 15 — #29
i
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
15
plusieurs raisons. Tout d’abord, cela garantit que les conditions de régularité, de l’estimation du modèle et des méthodes d’inférence sont bien vérifiées ; en particulier, on ne peut pas obtenir des estimations comprenant beaucoup de valeurs nulles comme avec le maximum de vraisemblance car toutes sont strictement positives. Et surtout, ce genre d’estimation est beaucoup plus robuste, conférant au rb estimé un pouvoir prédictif bien meilleur. En effet, si un événement ne s’est pas produit dans les données observées, il ne sera jamais prédit par le maximum de vraisemblance, puisque la probabilité estimée correspondante sera nulle. Pr(P | E = n1)
Pr(P = lib | E = n1) Pr(P = non lib | E = n1)
0.8
Probabilités conditionnelles
Probabilités conditionnelles
1.0
Pr(P | E = n2)
0.6 0.4 0.2
Pr(P = lib | E = n2) Pr(P = non lib | E = n2)
0.8
0.6
0.4
0.2
0.0 0
2000
4000
6000
8000
Taille imaginaire de l'échantillon
10000
0
2000
4000
6000
8000
10000
Taille imaginaire de l'échantillon
Fig. 1.3 – Les deux probabilités conditionnelles de P lorsque E est fixé, Pr(P | E = n1) et Pr(P | E = n2), tendent vers 21 lorsque la taille imaginaire de l’échantillon (iss) devient grand. Si l’on examine l’effet de la variation de iss sur une estimation bayésienne, on peut mettre facilement en évidence ce qui vient d’être écrit. Pour de grandes valeurs, c’est la priore qui domine et la distribution est quasi uniforme ; plus iss se rapproche de zéro et plus l’estimation tend vers celle du maximum de vraisemblance. C’est ce que montre la figure 1.3. Cette tendance est déjà bien visible si l’on compare le changement opéré entre iss = 10, déjà calculé, et pour iss = 20, calculée ci-dessous : > bn.fit(dag,data = enquete,method = "bayes",iss = 20)$P$prob E P n1 n2 lib 0.032 0.103 non lib 0.968 0.897
1.5
Apprentissage de la structure du graphe
Jusqu’à présent, nous avons supposé que le dag sous-jacent au rb était connu, admettant ainsi que les connaissances que l’on pouvait avoir du phénomène modé-
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 16 — #30
i
16
i
Réseaux bayésiens avec R
lisé étaient suffisantes pour préciser quels arcs devaient comporter le réseau. Mais ce n’est pas toujours le cas ; même, on peut vouloir regarder quelles relations sont suggérées par un certain jeu de données. Dans ce cas, c’est la structure même du dag que l’on veut estimer. Par exemple, il est courant en génétique et biologie des systèmes de vouloir reconstruire les enchaînements moléculaires et les réseaux de régulation qui se déroulent lors de maladies complexes ou de différents processus métaboliques. On trouvera un exemple remarquable de ce genre d’études dans Sachs et al. (2005) et nous le reprendrons dans le chapitre 6. Dans le contexte des sciences sociales, la structure des dag peut identifier quels nœuds sont directement reliés aux variables cibles de l’analyse pour aider les décisionnaires à élaborer une meilleure politique sociale. Par exemple, le dag de l’enquête que nous avons utilisé pour notre premier exemple suggère que les tarifs ferroviaires devraient être ajustés (pour maximiser le profit) sur la seule base de la profession et du type de domicile. Découvrir le dag d’un rb est une rude tâche pour au moins deux raisons ! Tout d’abord, l’espace des dag possibles est immense : il croît super-exponentiellement avec le nombre de nœuds 12 ; en conséquence, pour un temps de calcul raisonnable, l’exploration est limitée à une toute petite fraction de cet espace. Mais aussi, il ne s’agit pas d’un espace continu comme R, R2 , R3 ..., il n’a qu’un nombre fini d’éléments et il faut donc des algorithmes ad hoc pour l’explorer. Nous détaillerons ces algorithmes en §4.5. Pour le moment, nous limiterons notre attention à deux classes de critères statistiques utilisés par ces algorithmes pour apprendre les dag : les tests d’indépendance conditionnelle et les scores de réseaux.
1.5.1
Tests d’indépendance conditionnelle
Les tests d’indépendance conditionnelle permettent de décider de l’existence ou non d’arcs. Puisque chaque arc représente une dépendance probabiliste, les tests d’indépendance conditionnelle peuvent être utilisés pour savoir si les données disponibles les reconnaissent ou non. Si l’hypothèse nulle d’indépendance conditionnelle est rejetée, l’inclusion de l’arc correspondant pourrait être considérée dans la construction du dag. Par exemple, posons-nous la question d’ajouter un arc (ou non) entre le niveau d’étude et le moyen de transport (E → T) pour le dag de la figure 1.1. Dans ce cas, l’hypothèse nulle est que T est indépendant en probabilité (⊥ ⊥P ) de E conditionnellement à ses parents, c’est-à-dire : H0 : T ⊥ ⊥P E | {P, D}, et la contre-hypothèse est que : H1 : T 6⊥ ⊥P E | {P, D}. 12. Si pour cinq nœuds il y en a 29 281, le nombre dag différents de 10 nœuds est 4 175 098 976 430 598 143 et il faut 32 chiffres pour exprimer le nombre de dag différents de seulement 13 nœuds en notation décimale !
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 17 — #31
i
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
17
Cette hypothèse peut être testée en adaptant soit le rapport de la log-vraisemblance, G2 , ou le χ2 de Pearson pour tester l’indépendance conditionnelle au lieu de l’indépendance marginale. Pour G2 , la statistique de test s’écrit : G2 (T, E | P, D) =
X X X ntek ntek n++k log , n nt+k n+ek t∈T e∈E k∈P×D
si l’on note les catégories de T par t ∈ T, celles de E par e ∈ E, les combinaisons possibles de P et D par k ∈ P × D, et ntek la fréquence observée de la combinaison (t, e, k). L’utilisation de « + » comme indice signifie que l’on a fait la sommation sur l’indice remplacé, comme cela est fait dans le livre classique d’Agresti (2013) ; cela permet d’indiquer simplement les effectifs marginaux sur les autres variables : ainsi nt+k est le nombre d’observations pour t de T et k de P × D, qui s’obtient en sommant sur toutes les catégories possibles de E. Pour le χ2 de Pearson, avec la même notation, nous avons : χ2 (T, E | P, D) =
X X X (ntek − mtek )2 , mtek t∈T e∈E
où
mtek =
k∈P×D
nt+k n+ek . n++k
Les deux tests suivent une distribution asymptotique de χ2 sous l’hypothèse nulle, et dans ce cas avec : > (nlevels(enquete[, "T"]) - 1) * (nlevels(enquete[, "E"]) - 1) * + (nlevels(enquete[, "P"]) * nlevels(enquete[, "D"])) [1] 8 degrés de liberté. L’indépendance conditionnelle correspond à de petites valeurs de G2 et de χ2 ; inversement, l’hypothèse nulle est rejetée pour de grandes valeurs de la statistique de test, qui s’accroît avec la force de la dépendance conditionnelle entre les variables. La fonction ci.test de bnlearn propose le test de G2 comme celui de χ2 , ainsi que les autres tests qui sont présentés en §4.5.1. Le test de G2 , équivalent au test de la théorie de l’information mutuelle, est mis en œuvre avec l’argument test="mi" : > ci.test("T", "E", c("P", "D"), test = "mi", data = enquete) Mutual Information (disc.) data: T ~ E | P + D mi = 9.88, df = 8, p-value = 0.2733 alternative hypothesis: true value is greater than 0 celui de Pearson s’obtient pour test="x2" : > ci.test("T", "E", c("P", "D"), test = "x2", data = enquete)
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 18 — #32
i
18
i
Réseaux bayésiens avec R Pearson's X^2
data: T ~ E | P + D x2 = 5.74, df = 8, p-value = 0.6766 alternative hypothesis: true value is greater than 0 Ici, les deux tests retournent de très fortes probabilités limites 13 , indication que la relation de dépendance associée à E → T n’est pas significative étant donnée la structure actuelle du dag. De la même manière, nous pouvons tester si l’un des arcs déjà présent dans le dag devrait être supprimé parce que la relation de dépendance directe qui lui correspond ne serait pas confirmée par les données. Ainsi nous sommes conduits à éliminer l’arc P → T par le test de H0 : T ⊥ ⊥P P | D
versus
H1 : T 6⊥ ⊥P P | D
qui se calcule ainsi : > ci.test("T", "P", "D", test = "x2", data = enquete) Pearson's X^2 data: T ~ P | D x2 = 2.34, df = 4, p-value = 0.6727 alternative hypothesis: true value is greater than 0 et donc P → T n’est pas significatif. Tester successivement les arcs d’un dag pour déterminer lesquels sont significatifs se réalise automatiquement grâce à la fonction arc.strength, en lui passant le type de test que l’on souhaite utiliser : > arc.strength(dag, data = enquete, criterion = "x2") from to strength 1 A E 0.000978 2 S E 0.001254 3 E P 0.002638 4 E D 0.000560 5 P T 0.672715 6 D T 0.001678 Cette fonction renvoie la force de chaque dépendance probabiliste de chaque arc en le retirant du dag et en quantifiant le changement par un critère probabiliste. Les choix possibles sont ceux du test d’indépendance (exemple ci-dessus) ou d’un score de réseau (développé dans la section suivante). Dans le premier cas, l’argument 13. p-value en anglais ; il s’agit du niveau auquel le test qu’on pratiquerait serait juste limite pour l’hypothèse nulle sous-jacente.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 19 — #33
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
19
criterion correspond à l’argument test de la fonction ci.test, et le test se fait pour l’arc allant du nœud from au nœud to conditionnellement aux autres parents de ce dernier nœud. La force (strength) qui est retournée n’est autre que la probabilité limite associée au test. Des sorties précédentes, il apparaît que tous les arcs, à l’exception de P → T, sont au-dessous de la valeur traditionnelle de 0.05 et sont donc bien confortés par les données.
1.5.2
Scores de réseaux
Contrairement aux tests d’indépendance conditionnelle, les scores de réseau prennent en compte le dag tout entier et non pas un arc particulier. Il s’agit de statistiques mesurant la qualité de l’ajustement d’un dag à des données, du point de vue des indépendances conditionnelles. Là encore, plusieurs scores sont de pratique courante. L’un d’entre eux se dénomme critère d’information bayésienne 14 (BIC), qui dans le cas de notre rb pour l’enquête prend la forme :
BIC
c S, E, P, D, T) − d log n log Pr(A, 2 d dS A c c = log Pr(A) − log n + log Pr(S) − log n 2 2 c | A, S) − dE log n + log Pr(P c | E) − dP log n + log Pr(E 2 2 c | E) − dD log n + log Pr(T c | P, D) − dT log n (1.2) + log Pr(D 2 2
=
où n est la taille de l’échantillon, d est le nombre de paramètres libres du modèle global (c’est-à-dire 21) et dA , dS , dE , dP , dD , dT sont les nombres de paramètres libres associés à chaque distribution locale. La décomposition indiquée par l’équation (1.1) facilite le calcul du BIC à partir des distributions locales. Un autre score couramment utilisé dans la littérature est la probabilité postériore uniforme équivalente de Dirichlet bayésienne 15 , BDeu, du dag associé à une priore uniforme aussi bien sur l’espace des paramètres que sur l’espace des dag ; sa formule générale se trouve en §4.5. Elle se note très souvent simplement comme BDe. Les scores BIC et BDe donnent des valeurs plus élevées lorsque les dag s’ajustent mieux aux données. Ces deux scores se calculent avec la fonction score de bnlearn ; le score BIC est calculé pour l’argument type = "bic" et log BDe pour type = "bde" : > score(dag, data = enquete, type = "bic") [1] -2012.69 > score(dag, data = enquete, type = "bde", iss = 10) [1] -1998.28 14. En anglais Bayesian Information Criterion. 15. En anglais Bayesian Dirichlet equivalent uniform.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 20 — #34
i
20
i
Réseaux bayésiens avec R
Remarquons l’argument iss pour le calcul de BDe ; il s’agit de la même taille imaginaire d’échantillon que nous avons introduite pour le calcul des postériores des paramètres du rb en §1.4. Tout comme là, il s’interprète comme le poids assigné à la distribution priore plate en terme de taille d’échantillon. Pour de petites valeurs de iss ou de très grands jeux de données, les deux scores, log BDe et BIC, deviennent équivalents en valeur : > score(dag, data = enquete, type = "bde", iss = 1) [1] -2015.65 À l’aide de l’un ou l’autre de ces deux scores, il est possible de comparer différents dag et de savoir lequel semble le mieux s’adapter aux données. Comme exemple, nous pouvons nous demander une fois encore si le dag de la figure 1.1 ne s’ajusterait pas mieux aux données enquete en lui ajoutant l’arc E → T : > dag4 nparams(dag4, enquete) [1] 29 > score(dag4, data = enquete, type = "bic") [1] -2032.6 De nouveau, l’ajout de cet arc ne semble pas bien utile puisque l’accroissement c S, E, P, D, T) n’est pas suffisant pour compenser la plus forte pénalité de log Pr(A, entraînée par les paramètres supplémentaires. Le score obtenu par dag4 (−2032.6) est inférieur à celui de dag3 (−2012.69). Mais les scores permettent de comparer des dag complètement différents, ce que ne peuvent pas les tests d’indépendance conditionnelle. On peut même générer un dag au hasard avec la fonction random.graph et le comparer avec les dag déjà calculés sur leurs scores : > rnd modelstring(rnd) [1] "[A][S|A][E|A:S][P|S:E][D|S:E][T|S:E]" > score(rnd, data = enquete, type = "bic") [1] -2034.99 Comme on pouvait s’y attendre, rnd est bien pire que dag et même que dag4 ; c’est normal : ni les données disponibles ni le bon sens n’ont été utilisés pour le constituer ! L’apprentissage du dag à partir des données enquete produit un bien meilleur réseau. Plusieurs algorithmes recherchent un meilleur dag en tentant de maximiser l’un des scores ; certains seront précisés en §4.5.1. L’un des plus simples est dénommé hill-climbing : il part d’un dag sans aucun arc, ajoute, ôte ou inverse l’orientation d’un arc à la fois et retient le changement qui se révèle le plus bénéfique du point du vue du score. Le paquet bnlearn le propose par
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 21 — #35
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
21
la fonction hc, qui peut être appelée avec le seul data frame comme argument, utilisant alors BIC comme score par défaut : > learned modelstring(learned) [1] "[D][E|D][T|D][A|E][P|E][S|E]" > score(learned, data = enquete, type = "bic") [1] -1998.43 L’argument score permet de changer pour log BDe en précisant score = "bde" : > learned2 arc.strength(learned, data = enquete, criterion = "bic") from to strength 1 D E -3.389626 2 E S -2.726064 3 D T -1.848417 4 E A -1.719544 5 E P -0.826694 Cela n’est pas vrai pour dag, ce qui laisse à penser que toutes les dépendances qu’il indique ne se retrouvent pas dans les données enquete : > arc.strength(dag, data = enquete, criterion = "bic") from to strength 1 A E 2.488938 2 S E 1.482418 3 E P -0.826694 4 E D -3.389626 5 P T 10.045787 6 D T 2.973434 En particulier, le retrait de l’arc P → T entraîne une élévation marquée du score BIC, ce qui est cohérent avec la très forte probabilité limite que nous avons observée un peu plus haut, toujours avec la fonction arc.strength. Notons que la dénomination strength est très générique et doit s’interpréter en fonction de ce qu’elle représente ; par exemple, une valeur plus grande peut signifier que la force est plus faible.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 22 — #36
i
22
i
Réseaux bayésiens avec R
1.6
Utilisation d’un rb discret
Associées aux deux étapes successives de sa définition, dag et les lois locales associées, se trouvent des utilisations possibles des rb. Répondre à des questions en utilisant l’un de ces deux niveaux est dénommé en informatique requête 16 . Si nous utilisons un rb comme un système expert, nous pouvons imaginer lui poser des questions comme nous le ferions à un expert humain et obtenir des réponses de sa part. Les réponses peuvent être la probabilité d’un événement précisé dans un contexte particulier : il s’agit alors d’une requête de probabilité conditionnelle ; l’usage des probabilités locales est donc indispensable. Ou ce peut être la validation d’une association entre deux variables lorsque l’influence d’une (ou plusieurs) autre(s) est annulée, il s’agit alors d’une requête d’indépendance conditionnelle ; la connaissance du dag suffit pour répondre à ce genre de questions. Enfin, il peut s’agir d’identifier la catégorie la plus probable d’une ou plusieurs variables, c’est alors une recherche d’une occurrence la plus probable, ou même de manière plus fine l’obtention de nouvelles distributions de probabilité non explicitées du rb ; là encore, il faut s’appuyer sur les valeurs des probabilités.
1.6.1
Utilisation du dag
En utilisant le dag que nous avons stocké dans l’objet dag, nous pouvons investiguer l’éventuelle dépendance d’une variable avec une autre, par le lancement d’une requête d’indépendance conditionnelle. En fait, les dépendances directes et indirectes entre deux variables quelconques peuvent être retrouvées directement sur le graphe du dag simplement en remarquant s’il y a possibilité de passer de l’une à l’autre en suivant les arcs sans se préoccuper du sens de la flèche. La dépendance directe se distinguant par le fait qu’un arc relie directement les deux variables. Si ce n’est pas le cas mais qu’il existe au moins un chemin au sens large, alors la dépendance est indirecte. Lorsque la dépendance est indirecte, on peut de plus se demander si elle n’est pas brisée (autrement dit que l’indépendance est établie) lorsque l’on fixe (ou conditionne par) une troisième variable. Par exemple, on vérifiera un peu plus loin que (A) et (P) sont en dépendance indirecte, mais que si l’on fixe (E) alors elles deviennent indépendantes. Plus généralement, on dit que deux ensembles de variables X et Y sont indépendants conditionnellement à un troisième ensemble de variables Z si tout ensemble d’arcs qui les connecte est bloqué par Z. Rappelons que conditionner par Z revient à fixer les valeurs de toutes ses variables. Autrement dit, X et Y sont séparés par Z, ce que l’on note X ⊥ ⊥G Y | Z. La définition formelle de cette forme de séparation graphique se dénomme d-séparation 17 , elle sera détaillée en §4.1. Il est possible de savoir si deux nœuds d’un objet bn sont d-séparés ou non en invoquant la fonction dsep de bnlearn. Elle demande trois arguments x, y, z pour 16. En anglais query. 17. En anglais d-separation pour directed-separated.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 23 — #37
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
23
préciser X, Y et Z. Les deux premiers doivent correspondre aux noms des deux nœuds pour lesquels on souhaite répondre à la question, tandis que le dernier précise l’ensemble des nœuds pour lesquels on veut conditionner (par défaut, il est vide et la réponse s’interprète alors comme celle de l’indépendance non conditionnelle des deux nœuds X et Y). Il est clair que ces deux variables jouent des rôles parfaitement symétriques. Par exemple, si nous voulons savoir si (D) est indépendant ou pas de (S), puis de (P) : > dsep(dag, x = "S", y = "D") [1] FALSE > dsep(dag, x = "P", y = "D") [1] FALSE Cette double réponse négative était attendue puisque l’examen du dag révèle des chemins qui attestent la dépendance ((S) → (E) et (E) → (D), par exemple). bnlearn propose aussi la fonction path qui permet de savoir directement s’il existe ou non un chemin entre deux nœuds 18 , dans le cas présent : > path(dag, from = "S", to = "D") [1] TRUE En revanche, si on s’intéresse à la dépendance entre ces deux mêmes nœuds lorsque (E) est supposé connu, on peut constater que ce chemin est bloqué puisqu’ils sont déclarés indépendants : > dsep(dag, x = "S", y = "D", z = "E") [1] TRUE En effet, si nous analysons l’équation (1.1), nous pouvons effectivement voir que la distribution globale se décompose multiplicativement en une partie qui ne dépend que de (S) et une autre qui ne dépend que de (D) lorsque (E) est connu : Pr(S, D | E) = Pr(S) Pr(D | E). C’est la même chose pour (D) et (P). Les deux dépendent de (E) et deviennent indépendants si on conditionne par cette variable : > dsep(dag, x = "P", y = "D", z = "E") [1] TRUE 18. Une telle fonction peut sembler inutile pour un exemple aussi réduit, elle ne l’est plus lorsqu’on travaille avec des dag comprenant plusieurs dizaines de nœuds et des dépendances directes telles qu’il devient impossible de dessiner le dag sans que beaucoup d’arcs ne s’entrecroisent.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 24 — #38
i
24
i
Réseaux bayésiens avec R
Puisque, reprenant l’équation (1.1), on trouve que : Pr(P, D | E) = Pr(P | E) Pr(D | E). Mais le phénomène inverse peut s’observer : le conditionnement par un nœud particulier peut rendre dépendantes deux variables qui sont marginalement indépendantes. C’est le cas de (A) et (S) par rapport à (E) : > dsep(dag, x = "A", y = "S") [1] TRUE > dsep(dag, x = "A", y = "S", z = "E") [1] FALSE
A
S
A
E P
A
E D
T
S
P
S E
D
P
T
D T
Fig. 1.4 – Examen de la d-séparation des nœuds extrêmes par le nœud médian pour les trois types fondamentaux de connexion. Dans ces exemples, (E) est toujours le nœud médian conditionnant. A gauche la connexion en série, au centre la connexion divergente et à droite la connexion convergente (ici sous forme de v-structure). Les nœuds n’intervenant pas ont été grisés.
La figure 1.4 montre clairement que (E) est influencé et par (A) et par (S) ; et donc, assez intuitivement, lorsque nous connaissons la valeur d’un individu pour (E) nous pouvons penser que certaines combinaisons des niveaux de (A) et de (S) sont plus vraisemblables que d’autres, marquant une dépendance stochastique entre ces deux variables. Cela se retrouve évidemment à partir de l’équation (1.1), puisque (E) intervient dans la distribution jointe conditionnelle de (A) et (S) : Pr(A, S | E) = Pr(A) Pr(S) Pr(E | A, S). Il est impossible de décomposer multiplicativement la distribution jointe de (A) et (S) conditionnée par (E) en une expression qui ne dépend que de (A) et une autre qui ne dépend que de (S).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 25 — #39
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
25
Les trois exemples que nous venons d’examiner épuisent les configurations de dag comprenant trois nœuds et deux arcs. Ces structures simples sont décrites dans la littérature comme les connexions fondamentales ; ce sont les blocs élémentaires qui régissent les propriétés de la structure de dépendance conditionnelle des réseaux bayésiens qui est portée par le dag. Plus précisément : – les structures du type (S) → (E) → (D) (le premier cas) sont appelées connexions en série : les deux arcs sont dans la même direction et se suivent ; – les structures du type (D) ← (E) → (P) (le second cas) sont appelées connexions divergentes : les deux arcs divergent à partir d’un nœud central ; – enfin les structures du type (A) → (E) ← (S) (le troisième cas) sont appelées connexions convergentes : les deux arcs convergent vers un nœud central. Comme il n’y a pas de troisième arc, on peut noter dès maintenant que ce genre de structure s’appelle aussi v-structure ; on verra en §4.1 l’importance de ces structures en v dans l’analyse des dag.
1.6.2
Utilisation des distributions de probabilités
Dans la section précédente, nous avons vu comment on pouvait répondre à des requêtes sur les indépendances conditionnelles qu’entretenaient des couples de variables, et que cette information ne dépendait que du dag. Des requêtes quantitatives exigent bien entendu le recours aux distributions de probabilités locales dont est muni un réseau bayésien. Notons quand même que la structure du dag est toujours implicitement utilisée puisque c’est elle qui détermine la factorisation de la distribution globale, ce qui réduit, parfois considérablement, la dimension du problème d’inférence posé. Les deux types les plus communs de ce genre d’inférence sont (i) les requêtes de probabilités conditionnelles qui correspondent à la recherche de la distribution marginale (jointe) d’une (de plusieurs) variable(s) en cas de conditionnement non élémentaire et (ii) les requêtes relatives à une occurrence la plus probable qui interroge sur la réalisation la plus probable d’une ou plusieurs variables (toujours dans le cas d’un conditionnement non trivial). Dans les deux cas, les variables d’intérêt sont conditionnées sur la base d’une nouvelle évidence 19 ou découverte 20 qui oblige à la réévaluation des événements d’intérêt. Dans le cas des réseaux bayésiens multinomiaux, il y a deux manières principales pour répondre à ce genre de requête, soit par un calcul exact des probabilités nécessaires, soit par une évaluation numérique approchée. Nous décrirons les propriétés théoriques des deux approches plus en détail en §4.6. Inférence exacte L’inférence exacte, qui est programmée dans le paquet gRain (raccourci pour gRaphical model inference), est basée sur une transformation préalable du rb 19. En anglais evidence. 20. En anglais finding.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 26 — #40
i
26
i
Réseaux bayésiens avec R
en un arbre spécialement travaillé pour accélérer le calcul des probabilités conditionnelles : > library(gRain) Cet arbre se dénomme arbre de jonction 21 ; il peut s’obtenir directement à partir de l’objet bn.mle que nous avons élaboré précédemment : > jonction querygrain(jonction, nodes = "T")$T T auto autre train 0.5799 0.1697 0.2504 > jsexe querygrain(jsexe, nodes = "T")$T T auto autre train 0.5808 0.1710 0.2481 Il ne semble pas y avoir de différence marquée avant ou après avoir rentré l’évidence qu’il s’agissait de femmes en appelant setEvidence, ce qui conduit à conclure que les femmes ont les mêmes préférences que la population totale. Un autre problème intéressant est de savoir comment le fait de vivre dans une petite ville affecte l’usage du train par rapport à celui de la voiture. Les gens qui travaillent dans de grandes villes vivent souvent dans les banlieues 22 et doivent se rendre quotidiennement sur leur lieu de travail. Cela peut augmenter leur utilisation du train car souvent les autres moyens de transport (bicyclette, métro, bus, etc.) sont inexistants ou trop peu pratiques : > jdomicile querygrain(jdomicile, nodes = "T")$T T auto autre train 0.55256 0.08165 0.36579 21. En anglais junction tree. 22. Simplement du fait du coût de l’habitat.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 27 — #41
i
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
Pr(T)
Pr(T | S = F)
27
Pr(T | D = petite)
auto
train
autre
0.1
0.2
0.3
0.4
0.5
0.1
0.2
0.3
0.4
0.5
0.1
0.2
0.3
0.4
0.5
probabilités
Fig. 1.5 – Distribution de probabilité du moyen de transport (T) sans évidence (à gauche), en ajoutant l’évidence que le sexe (S) vaut F (au centre) et en ajoutant l’évidence que le domicile (D) vaut petite (à droite).
Comme le montre la figure 1.5, l’enquête ne conforte pas ce raisonnement. La probabilité associée à la catégorie train du moyen de transport principal passe de 0.250 dans la population totale à 0.366 pour ceux qui vivent dans les petites villes. Bien entendu, les requêtes de probabilité conditionnelle peuvent aussi servir à vérifier les indépendances conditionnelles, ce que nous avions déjà fait avec l’examen de la d-séparation portée par le dag en utilisant la fonction dsep. Considérons de nouveau la dépendance existant entre (S) et (T), cette fois en conditionnant par l’évidence que (E) vaut n1. La distribution jointe de probabilité de (S) et (T) sachant la valeur de (E) peut aussi être calculée en appelant la fonction setEvidence suivie d’une invocation de la fonction querygrain : > jetudes sv sv T S auto autre train F 0.2063 0.05909 0.09235 M 0.3704 0.10609 0.16582 Les deux lignes de cette table sont proportionnelles, signant l’indépendance des deux variables, ce qui est cohérent avec ce que nous obtenons avec la fonction dsep. Remarquons l’usage de l’argument type qui précise que nous souhaitons la distribution jointe des deux nœuds cibles. Son option par défaut est "marginal", seules les marginales des variables cibles sont retournées. Mais il existe aussi la possibilité type="conditional", qui entraîne le calcul de la distribution de la première variable cible conditionnellement à toutes les combinaisons des autres variables cibles et de l’évidence imposée :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 28 — #42
i
28
i
Réseaux bayésiens avec R
> querygrain(jetudes, nodes = c("S", "T"), type = "marginal") $S S F M 0.3577 0.6423 $T T
auto autre train 0.5766 0.1652 0.2582 > querygrain(jetudes, nodes = c("S", "T"), type = "conditional") T S auto autre train F 0.3577 0.3577 0.3577 M 0.6423 0.6423 0.6423 On remarquera que les probabilités somment bien l’unité par colonne, conséquence du conditionnement pour la variable T. Mais surtout, on peut constater que toutes ces probabilités conditionnelles sont identiques et égales à la marginale conditionnelle calculée juste avant. C’est la claire indication que S est indépendante de T conditionnellement à E : connaître le sexe d’une personne n’apporte pas d’information sur ses préférences de transport si nous connaissons déjà son niveau d’études. Ce que nous savions déjà au simple examen du graphe puisque S et T sont d-séparés par E : > dsep(bn, x = "S", y = "T", z = "E") [1] TRUE L’indépendance probabiliste (évaluée par le χ2 d’indépendance de Pearson) est confirmée par une statistique numériquement nulle : > chisq.test(nrow(enquete) * sv)$statistic X-squared 9.708e-30 Inférence approchée Une autre approche d’inférence, moins précise mais plus souple, peut être mise en œuvre. Elle consiste à simuler un grand nombre de données selon le modèle du rb et à les utiliser comme échantillon pour réaliser les inférences désirées. Évidemment, la réponse sera approximative et sa précision dépendra de la difficulté de la question 23 23. Il est facile d’inférer une probabilité voisine de 0.5 mais si l’on s’intéresse à une probabilité très faible , il est possible qu’aucune simulation ne produise l’événement associé. En effet, la probabilité de ne pas l’obtenir avec N simulations est (1 − )N .
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 29 — #43
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
29
et du nombre de valeurs simulées. Cette approche peut devenir très coûteuse en temps de calcul, mais elle permet des conditionnements très complexes et est mieux adaptée aux réseaux comportant un très grand nombre de nœuds. Dans le cas de rb discrets, la méthode la plus simple est de pratiquer une simulation par rejet 24 . C’est-à-dire de simuler des tirages suivant la loi globale du rb, mais en ne retenant que ceux qui satisfont le conditionnement souhaité. Par exemple, la probabilité du conditionnement peut être estimée par le rapport du nombre de simulations retenues et du nombre de simulations générées. Cet algorithme est disponible dans le paquet bnlearn au travers des fonctions cpquery et cpdist. cpquery renvoie la probabilité d’un événement spécifié event conditionné par une quelconque évidence. Par exemple, nous pouvons recalculer la valeur de la première case de la table sv (calculée page 27) de la manière suivante : > cpquery(bn, event = (S == "F") & (T == "auto"), + evidence = (E == "n1")) [1] 0.2192 On peut remarquer que les probabilités conditionnelles ainsi estimées diffèrent de la valeur exacte obtenue par querygrain qui vaut 0.2063. Le résultat dépend aussi de la séquence pseudo-aléatoire : si on recommence le calcul, on n’obtient pas exactement le même résultat. La qualité de l’approximation peut être améliorée en augmentant le nombre de simulations, par exemple en prenant 106 (alors que la valeur par défaut est de 5000 * nparams(bn)) : > cpquery(bn, event = (S == "F") & (T == "auto"), + evidence = (E == "n1"), n = 10^6) [1] 0.2168 L’estimation de la probabilité est plus proche de la vraie valeur. Cependant, améliorer la précision de cette façon présente plusieurs inconvénients : le temps de calcul devient beaucoup plus long et la précision peut rester mauvaise si la probabilité de l’évidence est très faible. Une meilleure approche est celle de la pondération par vraisemblance qui sera détaillée en §4.6.2. Elle consiste à générer des observations aléatoires de façon qu’elles vérifient toute l’évidence et à les repondérer de manière adéquate pour calculer la probabilité conditionnelle recherchée. On l’obtient avec la fonction cpdist, tout simplement avec l’argument method="lw" : > cpquery(bn, event = (S == "M") & (T == "auto"), + evidence = list(E = "n1"), method = "lw") [1] 0.3422 24. En anglais rejection sampling, aussi dénommée simulation d’acceptation-rejet.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 30 — #44
i
30
i
Réseaux bayésiens avec R
Comme nous pouvons le constater, cpquery retourne une probabilité conditionnelle proche de la vraie valeur qui est 0.3704, sans avoir à générer 106 simulations. L’échantillonnage par rejet est l’algorithme par défaut des fonctions cpdist et cpquery. Pour mettre en action l’algorithme de la pondération par vraisemblance, il faut le leur indiquer par l’argument method="lw", mais alors l’évidence ne peut plus être qu’une liste de valeurs, une pour chaque variable du conditionnement. Pour donner un exemple d’une requête plus complexe, nous pouvons calculer la probabilité qu’un homme utilise la voiture sachant qu’il s’agit d’un jeune diplômé par l’université ou qu’il s’agisse d’un adulte quel que soit son niveau d’études : Pr(S = M, T = auto | {A = jeune, E = n2} ∪ {A = adulte}), > cpquery(bn, event = (S == "M") & (T == "auto"), + evidence = ((A == "jeune") & (E == "n2")) | (A == "adulte")) [1] 0.3352 L’implémentation de l’algorithme de pondération par vraisemblance de la fonction cpquery n’est pas assez flexible pour le calcul d’une telle évidence composite ; il partage les mêmes limites que les fonctions que l’on peut trouver dans le paquet gRain. La fonction cpdist, dont la syntaxe est très similaire à celle de cpquery, retourne le data frame contenant les simulations retenues comme respectant l’évidence choisie, pour des variables précisées : > SxT head(SxT) S T 1 M auto 2 M auto 3 M auto 4 M autre 5 M auto 6 F autre Ces données peuvent être utilisées pour n’importe quelle inférence statistique rendant cette approche très flexible. Par exemple, nous pouvons créer la table de probabilité de (S) croisé par (T) pour la comparer avec sv que nous avait renvoyé querygrain en page 27 : > prop.table(table(SxT)) T S auto train autre M 0.35092 0.18332 0.10338 F 0.19691 0.10418 0.06128
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 31 — #45
i
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
31
Nous pouvons aussi utiliser ce type de requête pour obtenir l’occurrence la plus probable de (S) et (T) simplement en recherchant la combinaison de leurs valeurs qui a la plus forte probabilité. Comme déjà vu, la réponse est que parmi les gens dont (E) est n1, la configuration ((S),(T)) la plus courante est celle des hommes utilisant la voiture.
1.7
Diagrammes pour rb discrets
Un avantage fondamental des rb, comme de tous les modèles graphiques, est la possibilité de les raisonner au travers d’une représentation graphique simple. Pouvoir bien les représenter de manière aisée est donc de première importance.
1.7.1
Tracer le dag d’un rb
Le package bnlearn utilise les fonctionnalités du paquet Rgraphviz pour dessiner les dag au travers de la fonction graphviz.plot. Si elle est appelée sans autre argument que le dag à représenter, on obtient un graphe similaire, mais moins élaboré, que celui de la figure 1.1 : > graphviz.plot(dag) La fonction graphviz.plot tente de trouver une disposition des nœuds et des arcs de façon que ces derniers ne se coupent pas. Également, par défaut, les parents sont placés au-dessus de leurs enfants. Cette disposition est codée "dot". D’autres dispositions peuvent être utilisées en spécifiant l’argument layout. Deux autres possibilités sont données en figure 1.6. layout = "dot"
A
S
T D
T
S
P
E P
layout = "circo"
layout = "fdp"
A
D E
E
A
P
D
S
T
Fig. 1.6 – Quelques représentations de dag obtenues avec Rgraphviz et disponibles au travers de la fonction graphviz.plot de bnlearn : dot (par défaut, à gauche), fdp (au centre) et circo (à droite).
Le rehaussement de quelques nœuds (et/ou arcs) pour mettre en évidence des nœuds et/ou un chemin impliqués dans un raisonnement tenu dans le contexte
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 32 — #46
i
32
i
Réseaux bayésiens avec R
d’un rb s’obtient soit par l’utilisation de l’argument highlight de la fonction graphviz.plot, soit par une utilisation directe du paquet Rgraphviz. La première façon est la plus simple, la seconde est la plus puissante. Par exemple, considérons le panneau gauche de la figure 1.4. Tous les nœuds et les arcs, sauf (S) → (E) → (D), sont dessinés en gris clair pour faire ressortir la connexion en série de ces trois nœuds. Le nœud (E), qui d-sépare les deux nœuds (S) et (D), est colorié en gris pour mettre en lumière ce rôle. Pour obtenir un graphique de ce genre, il faut changer la couleur de tous les nœuds (y compris leurs étiquettes) et de tous les arcs en gris. Pour cela, nous constituons la liste surligne dont les composantes sont (i) les nœuds concernés, (ii) les arcs concernés et (iii) l’indication du gris (grey) comme couleur sur les deux composantes col et textCol : > surligne pp edgeRenderInfo(pp) nodeRenderInfo(pp) renderGraph(pp) Des graphes beaucoup plus compliqués peuvent être réalisés par des appels successifs de edgeRenderInfo et nodeRenderInfo. Ces fonctions peuvent être utilisées pour spécifier plusieurs paramètres graphiques pour les nœuds et les arcs, autorisant un contrôle extrêmement fin de l’apparence du graphe. Plusieurs groupes de nœuds, éventuellement chevauchants, et d’arcs peuvent être décorés suivant différentes combinaisons des valeurs de lwd (largeur de ligne), lty (type de ligne) et col (couleur) et même estompés ou cachés en attribuant à col et textCol une couleur éclaircie ou la valeur transparent.
1.7.2
Représenter des probabilités conditionnelles discrètes
Le tracé des probabilités conditionnelles associées à une table de probabilités conditionnelles ou à une requête est souvent utile pour aider à un diagnostic ou simplement pour une mise en évidence de faits saillants. De tels diagrammes peuvent être difficiles à lire lorsque le nombre de variables conditionnantes est grand, mais ils peuvent être très efficaces pour des présentations synthétiques, y compris de données réelles. Pour ce genre de tables de probabilités conditionnelles, le paquet bnlearn propose deux fonctions pour tracer des diagrammes en barres (bn.fit.barchart) et des nuages de points (bn.fit.dotplot) à partir d’objets de classe bn.fit.
Moyen de transport 0.0
0.2
0.4
grande lib
grande non lib
petite lib
petite non lib
0.6
train autre auto
train autre auto 0.0
0.2
0.4
0.6
probabilités conditionnelles
Fig. 1.7 – Diagramme en barres de la table de probabilités conditionnelles à (P) et (D) de la variable moyen de transport ((T)).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 34 — #48
i
34
i
Réseaux bayésiens avec R
Par exemple, la figure 1.7 a été obtenue avec le code suivant : > bn.fit.barchart(bn.mle$T, main = "Moyen de Transport", + xlab = "Probabilités conditionnelles", ylab = "") Chaque panneau du graphe correspond à une configuration de niveaux des parents de (T), c’est-à-dire (P) et (D). Par exemple, le panneau en haut à gauche est associé à la combinaison {P = lib, D = grande}. Les barres dans chaque panneau restituent les probabilités des trois catégories de la variable (T), qui sont auto, train et autre. Les mêmes arguments sont utilisés pour l’appel de la fonction bn.fit.dotplot. La fonction bn.fit.barchart de même que bn.fit.dotplot utilise les fonctionnalités disponibles dans le paquet lattice ; ce paquet propose un ensemble de fonctions puissantes et polyvalentes pour la visualisation de données multivariables. Tout comme pour le paquet Rgraphviz, on peut utiliser les fonctions du paquet lattice directement pour accéder à des diagrammes plus compliqués que ne permet l’interfaçage réalisé dans bnlearn. Par exemple, si nous nous intéressons à la comparaison de la distribution marginale de la variable (T) et des distributions conditionnelles réalisées en figure 1.5, il suffit d’appeler la fonction barchart de lattice en deux étapes. Tout d’abord, il nous faut créer un data frame comprenant les trois distributions de probabilités : > Evidence Transport distr head(distr) Evidence Transport 1 Uncond auto 2 Uncond train 3 Uncond autre 4 F auto 5 F train 6 F autre
Prob 0.5618 0.2808 0.1573 0.5620 0.2806 0.1573
Lorsque les probabilités ont été rassemblées de cette manière, le diagramme en barres de la figure 1.5 peut être obtenu par l’appel suivant :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 35 — #49
i
Chapitre 1. Cas discret : les réseaux bayésiens multinomiaux
i
35
> barchart(Transport ~ Prob | Evidence, data = distr, + layout = c(3, 1), xlab = "probabilités", + scales = list(alternating = 1, tck = c(1, 0)), + strip = strip.custom(factor.levels = + c(expression(Pr(T)), + expression(Pr({T} * " | " * {S == F})), + expression(Pr({T} * " | " * {D == petite})))), + panel = function(...) { + panel.barchart(...) + panel.grid(h = 0, v = -1) + }) Comme on peut le voir, le premier argument passé à la fonction barchar est une formule : nous demandons le tracé de Prob pour chaque niveau de Transport conditionnellement à Evidence. Pour une meilleure lisibilité, nous avons aussi substitué l’intitulé de chaque panneau par une expression décrivant la distribution de probabilité qui lui correspond. D’autre part, nous avons choisi de disposer les trois panneaux en une seule rangée (par la spécification de layout). Nous avons aussi enlevé les échelles des abscisses au-dessus du diagramme (grâce à la spécification de l’argument scales) et tracé une grille sur chaque panneau (grâce à l’argument panel).
1.8
Lectures complémentaires
Les rb discrets sont le type le plus commun des rb étudiés dans la littérature scientifique ; tous les ouvrages mentionnés dans les sections « Lectures complémentaires » de ce livre les abordent en détail. Pearl (1988) et Castillo et al. (1997) s’intéressent en profondeur à la d-séparation. On trouvera dans Koller & Friedman (2009, chapitre 17), Korb & Nicholson (2004, chapitre 6) et Neapolitan (2003, section 7.1) de très bonnes présentations de l’estimation des paramètres des rb ; pour l’apprentissage du dag, nous renvoyons principalement à Korb & Nicholson (2004, chapitre 9) et Murphy (2012, section 16.4).
Exercices Exercice 1.1 À partir de la structure du dag de l’enquête étudiée dans ce chapitre et proposée en figure 1.2 : 1. Pour chaque nœud, lister les parents et les enfants. 2. Faire la liste des connexions fondamentales que l’on trouve dans ce dag et distinguer les trois cas de figure : en série, divergence ou convergence. 3. Ajouter un arc de (A) à (P), puis un autre de (T) à (E). Le graphe obtenu est-il valable pour la construction d’un rb ? Pourquoi ?
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 36 — #50
i
36
i
Réseaux bayésiens avec R
Exercice 1.2 En reprenant les distributions de probabilité proposées pour l’enquête dans la section 1.3 : 1. Pour chaque nœud, calculer le nombre de configurations des parents. 2. Calculer le nombre de paramètres de chaque distribution locale. 3. Calculer le nombre maximal de paramètres pour la distribution globale ainsi générée. 4. Ajouter un arc partant de (E) et arrivant sur (T). Reformuler la factorisation selon les distributions locales établie en équation (1.1). Comment le nombre de paramètres de chaque distribution locale est-il affecté ? Exercice 1.3 À partir de la structure du dag de l’enquête étudiée dans ce chapitre et proposée en figure 1.2 : 1. Créer un objet de classe bn du dag correspondant. 2. Utiliser les fonctions ad hoc du paquet bnlearn et l’objet qui vient d’être créé pour extraire les nœuds et les arcs du graphe. Extraire également les parents et les enfants de chaque nœud. 3. Afficher la formule du modèle de bn. 4. Avec les données enquete.txt, estimer les paramètres de ce rb en utilisant une approche bayésienne et sauver le résultat dans un objet de classe bn.fit. 5. Retirer l’arc qui existe entre (E) et (P). 6. Ajuster de nouveau les paramètres du modèle. Quelles sont les distributions locales qui sont modifiées ? Pourquoi ? Exercice 1.4 Recréer l’objet bn.mle utilisé dans la section 1.4. 1. Pour la variable (P), comparer la distribution marginale avec celle conditionnée par (A) en utilisant une fonction du paquet querygrain. 2. Combien de simulations sont-elles nécessaires (en utilisant la fonction cpquery) pour obtenir des estimations précises à 0.01 sur les distributions concernées ? 3. Utiliser les fonctions de bnlearn pour extraire la structure du graphe. 4. Quels sont les nœuds qui d-séparent (A) et (P) ? Exercice 1.5 A partir de la description faite en §1.4, créer une nouvelle fonction R permettant de répondre à une requête simple en utilisant un algorithme d’acceptation-rejet. Exercice 1.6 En utilisant les objets dag et bn des sections 1.2 et 1.3. 1. Tracer le dag en utilisant graphviz.plot. 2. Tracer de nouveau le dag, mais cette fois-ci en surlignant d’une manière ou d’une autre les nœuds et arcs qui sont impliqués dans une ou plusieurs v-structures. 3. Tracer de nouveau le dag en surlignant le (ou les) chemin(s) joignant (A) et (P). 4. Réaliser un diagramme en barres de la table de probabilités locales de (E). 5. Comparer graphiquement les distributions de la variable (E) pour les hommes et pour les femmes.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 37 — #51
i
i
Chapitre 2
Cas continu : les réseaux bayésiens gaussiens Dans ce chapitre, nous poursuivons notre exploration des réseaux bayésiens en considérant le cas de variables aléatoires continues qui suivent une distribution normale multivariable (ou multinormale ou encore gaussienne).
2.1 Exemple introductif : analyse d’un rendement Supposons que nous nous intéressions à la production en matière sèche d’une espèce particulière de céréales que nous modélisons de manière simpliste en prenant en compte trois aspects : – la potentialité des entrées du système agronomique, – la masse végétative, – la production du grain qui s’ensuit que nous appelons récolte. Plus précisément, nous retenons deux variables synthétiques pour décrire l’état initial du système avant le cycle de production : le potentiel génétique de l’espèce considérée, que nous noterons G, et le potentiel environnemental, synthèse des conditions pédo climatiques de la parcelle où la culture est pratiquée, que nous noterons E. La variable G (respectivement E) est supposée résumer dans un simple score tous les effets génotypiques (respectivement environnementaux). Le fait que ces variables soient le résultat des effets conjugués d’une grand nombre de petites causes est une bonne justification pour les supposer continues et aussi de distribution normale. Les améliorateurs de plantes savent bien que le premier stade de l’élaboration d’une production de graines est celui de la constitution de réserves dans les organes végétatifs, principalement feuilles et tiges des plantes. Ici, nous nous contenterons d’une unique variable, également continue et notée V, pour modéliser l’ensemble des réserves végétatives. Nul doute que V est directement influencée par les valeurs
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 38 — #52
i
38
i
Réseaux bayésiens avec R
de G et de E. Plus élevées seront les deux variables d’entrée, plus élevée doit être la réserve végétative constituée. Comme il vient d’être signalé, la récolte est une fonction directe de la masse végétative dont elle est la transformation. Mais la transformation se réalise selon plusieurs étapes distinctes dans le temps et qui, selon les facteurs climatiques du moment, peuvent être plus ou moins performantes. On les appelle composantes du rendement et nous en retiendrons deux : le nombre de grains par unité de surface (noté N) et le poids moyen de mille grains (noté M). La première se réalise au moment de la floraison de la plante ; la seconde, plus tard, lors du remplissage du grain. Bien que dépendant toutes deux directement de V, elles sont influencées positivement ou négativement par des conditions climatiques locales différentes. Finalement, la récolte (notée R) dépend directement de N et M ; pour les mêmes raisons que ci-avant, il est aussi raisonnable de les considérer comme des variables continues. Suivant les raisonnements énoncés ci-dessus, le phénomène global que nous voulons modéliser se décrit par les relations directes suivantes : {G, E} → V,
V → N,
Potentiel environnemental (E)
V → M,
{N, M} → R.
(2.1)
Potentiel génétique (G)
Masse végétative (V)
Nombre de grains (N)
Poids de mille grains (M)
Rendement (R)
Fig. 2.1 – dag associé à la modélisation de la récolte R. Les autres variables sont le potentiel environnemental E, le potentiel génétique G, la masse végétative V, le nombre de grains N et le poids moyen de mille grains M.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 39 — #53
i
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
2.2
39
Représentation graphique
La figure 2.1 reprend les relations exhibées en (2.1). Chacune des six variables est représentée par un nœud et chacune des six relations directes par un arc. C’est le dag du modèle ; il est très semblable à celui déjà présenté en figure 1.2 : seuls les noms des variables diffèrent, la structure des relations est identique. En fait, nous verrons que les dag ne sont pas liés à la nature des variables (discrète ou continue), le dag ne fait que décrire la structure d’indépendance qui lie les variables aléatoires. Un même dag peut donc s’appliquer à des situations très différentes. Pour travailler sur une telle structure, il nous faut créer un objet R capable d’en encoder toutes les caractéristiques. Comme nous l’avons déjà fait en §1.7, grâce au paquet bnlearn, nous pouvons utiliser la fonction model2network et la représentation des relations au travers d’une formule qui décrit fidèlement toutes les relations directes qu’entretiennent les variables : > library(bnlearn) > dag.bnlearn dag.bnlearn Random/Generated Bayesian network model: [E][G][V|E:G][M|V][N|V][R|M:N] nodes: arcs: undirected arcs: directed arcs: average markov blanket size: average neighbourhood size: average branching factor:
6 6 0 6 2.67 2.00 1.00
generation algorithm:
Empty
La structure du graphe se définit par l’expression [G][E][V|G:E][N|V] [M|V] [R|N:M]. À chaque nœud est associée une parenthèse crochet ; le nœud se trouve en première position, séparé de ses parents par une barre verticale ; lorsqu’il y a plusieurs parents, ils sont séparés par le signe de ponctuation « : ». L’ordre dans lequel les nœuds et les parents des nœuds sont listés n’a aucune importance. Comme cela a déjà été indiqué en §1.2, des propriétés importantes du modèle peuvent déjà se déduire du simple dag. Par exemple, dans notre cas, il est supposé que R dépend de G puisqu’il y a des chemins de relations qui partent de G et vont jusqu’à R. D’un point de vue probabiliste, cela signifie que la distribution conditionnelle de R lorsque G = g est une fonction de g, c’est-à-dire que : f(R | G = g) 6= f(R)
(2.2)
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 40 — #54
i
40
i
Réseaux bayésiens avec R
où f (X) représente la fonction de densité de la variable aléatoire X. Bien que la relation entre les deux variables R et G ait été justifiée par un raisonnement de causalité, plus précisément que G est une cause et R sa conséquence, cette direction des influences est complètement perdue par la modélisation probabiliste. Et par exemple, on peut montrer que l’équation (2.2) implique la réciproque : f(G | R = r) 6= f(G),
(2.3)
à savoir que la distribution conditionnelle de G par rapport à R lorsqu’il vaut r est une fonction de r. Plus intéressant encore, R dépend de G au travers de V puisque tous les chemins qui vont de G à R passent par V. D’un point de vue probabiliste, cela est équivalent à f(R | G = g, V = v) = f(R | V = v). Autrement dit, connaître la valeur de G ne change pas la distribution de R si V est connu. Comme nous l’avons fait dans le cas de réseaux bayésiens discrets, nous pouvons rechercher les indépendances conditionnelles grâce au seul dag. Considérons, par exemple, la paire de variables N et M. Puisqu’elles ont un parent commun (V), elles ne sont pas indépendantes. C’est une propriété assez naturelle puisque toutes deux sont influencées par la variation des valeurs de V : de fortes valeurs de V vont induire de fortes valeurs pour N et M. Cependant, lorsque V est fixé à une valeur, disons v, elles deviennent indépendantes ! Cette indépendance conditionnelle peut se constater assez directement à partir de la formule du modèle induite par le dag : f(N, M | V = v) = f(N | V = v) f(M | V = v).
(2.4)
Ce type de raisonnement se généralise à des sous-ensembles de variables comme nous le verrons en §4.1. Comme déjà mentionné en §1.6.1, ce genre de propriété ne dépend pas de la nature des variables impliquées, pas plus d’ailleurs que de leurs distributions de probabilités marginales. Nous pouvons détecter les indépendances (conditionnelles ou non) de manière systématique grâce à la fonction dsep de bnlearn. Dans un premier temps, trouvons les paires de variables indépendantes : > > + + + + + E G
nano dsep(dag.bnlearn, "V", "V") [1] FALSE Maintenant, cherchons les paires conditionnellement indépendantes lorsque V est fixée, tout en évitant les couples redondants du fait de la symétrie de la relation : > for (n1 in nano[nano != "V"]) { + for (n2 in nano[nano != "V"]) { + if (n1 < n2) { + if (dsep(dag.bnlearn, n1, n2, "V")) + cat(n1, "et", n2, "sont indépendantes conditionnellement à V.\n") + }# if + }# for n2 + }# for n1 E E E G G G M
et et et et et et et
M N R M N R N
sont sont sont sont sont sont sont
indépendantes indépendantes indépendantes indépendantes indépendantes indépendantes indépendantes
conditionnellement conditionnellement conditionnellement conditionnellement conditionnellement conditionnellement conditionnellement
à à à à à à à
V. V. V. V. V. V. V.
De ces résultats, nous pouvons déduire que conditionnellement à la valeur fixée de V, E et G ne sont plus indépendantes. Mais aussi que toutes les paires telles qu’un nœud soit situé avant V dans le dag et l’autre après sont conditionnellement indépendantes. C’est une conséquence de la propriété de d-séparation de V pour E et G ; ici, tous les chemins menant d’une variable de la paire à l’autre passent par V. Enfin, nous pouvons constater que N et M sont bien d-séparées par V comme établi par l’équation (2.4). Remarquons que les boucles générées par n1 et n2 ont été construites pour qu’ils ne soient pas identiques à V. Cependant, la fonction dsep admet une telle possibilité et retournerait TRUE, en accord avec le fait que V | V est une variable aléatoire constante par définition, indépendante de toute variable aléatoire 1 : > dsep(dag.bnlearn, "E", "V", "V") [1] TRUE 1. Sa densité se réduit à une masse unité à la valeur fixée, quoi que vaillent les autres variables aléatoires.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 42 — #56
i
42
i
Réseaux bayésiens avec R
Beaucoup d’autres opérations sur les arcs et les nœuds d’un dag sont intéressantes pour comprendre ses propriétés. Un exemple est la recherche d’un chemin menant d’un nœud à un autre. Le paquet bnlearn nous permet de tester très facilement l’existence d’un chemin entre E et R : > bnlearn::path(dag.bnlearn, from = "E", to = "R") [1] TRUE Ce genre de question devient vite moins évident lorsque le nombre de nœuds augmente. Remarquons que l’on a préfixé la fonction par bnlearn:: pour identifier sans ambiguïté la fonction path du paquet bnlearn. En effet, le paquet igraph propose aussi une fonction sous ce même nom, et un appel non préfixé pourrait conduire à une invocation de igraph::path. En fait, la fonction choisie par R (celle de bnlearn ou de igraph) dépend de l’ordre dans lequel les paquets ont été chargés dans la session courante de R. Beaucoup d’autres opérations sont possibles, elles seront abordées un peu plus loin après que les éléments théoriques nécessaires aient été fournis.
2.3
Représentation probabiliste
Si nous voulons être capables d’énoncer des résultats quantitatifs sur le comportement des variables d’un réseau bayésien, il nous faut spécifier complètement leur distribution de probabilité conjointe. Cela peut se révéler redoutable ! Dans le cadre des distributions multinormales que nous considérons dans ce chapitre, si le réseau comprend p variables, cela veut dire qu’il faut que nous précisions les valeurs des p espérances, des p variances et des 21 p (p − 1) coefficients de corrélation ; sans oublier pour les corrélations qu’elles doivent constituer une matrice définie non négative. Fort heureusement, le problème est le plus souvent extrêmement simplifié si on passe par la construction d’un réseau bayésien. En effet, ce n’est pas une distribution conjointe qu’il faut proposer, mais des distributions associées à chaque nœud, soit marginales soit conditionnelles suivant la formule du modèle correspondant qui permet de décrire le dag. Et cela sans avoir à nous préoccuper de la positivité de la matrice de corrélation. Dans le cas du dag utilisé en figure 2.1, cela revient à spécifier 18 paramètres et non pas 27. Supposons que les distributions locales nous soient connues 2 et que la valeur des paramètres soient celles proposées dans le tableau 2.1 et la figure 2.2. Bien entendu, les parents implicitement proposés par les distributions conditionnelles doivent correspondre exactement au dag et n’engendrer aucun cycle. 2. La question fondamentale de l’estimation des paramètres sera traitée en §2.4.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 43 — #57
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
Potentiel environnemental (E)
i
43
Potentiel génétique (G)
Masse végétative (V)
Nombre de grains (N)
Poids de mille grains (M)
Rendement (R)
Fig. 2.2 – dag de la figure 2.1 complété par les distributions locales associées à chaque nœud.
Nous pouvons créer un objet bn associé à un réseau bayésien continu gaussien avec bnlearn de la même manière que nous avons procédé en §1.3. Tout d’abord, il faut stocker les paramètres de chaque distribution locale dans une liste, nommée ici dist.list : > > > + > > > >
disE dim(recoltes1) 3. On verra en §2.6 comment il a pu être généré à partir du rbg théorique par simulation.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 47 — #61
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens [1] 200 6 > round(head(recoltes1), 2) E G M N R 1 42.64 51.48 40.67 53.91 53.17 2 40.97 73.43 44.26 59.40 51.41 3 52.52 71.10 59.34 51.26 61.78 4 56.15 49.33 39.76 49.15 42.32 5 63.55 49.27 58.73 54.92 55.32 6 66.02 48.72 54.90 44.31 53.75
i
47
V 41.13 58.57 59.37 49.16 63.53 59.12
Exactement comme cela a été fait en §1.3 pour le cas discret, la fonction bn.fit retourne des estimations des paramètres. Du simple fait que les variables du data frame recoltes1 ne sont pas des facteurs, bnlearn en déduit que le rb est de type continu et met en œuvre les estimateurs appropriés pour obtenir toutes les estimations du rbg : > est.para est.para$R library(penalized) > est.para$R est.para$E Parameters of node E (Gaussian distribution) Conditional density: E Coefficients: (Intercept) 50.14396 Standard deviation of the residuals: 9.798923 4. C’est-à-dire sans parent.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 49 — #63
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
i
49
Les estimations peuvent être comparées aux vraies valeurs (50, 10) du tableau 2.1. Quand un nœud a un ou plusieurs parents, c’est-à-dire que sa distribution locale est conditionnelle, les coefficients de régression apparaissent aussi : > est.para$R Parameters of node R (Gaussian distribution) Conditional density: R | M + N Coefficients: (Intercept) M N 1.7526350 0.2971240 0.6752099 Standard deviation of the residuals: 6.315113 Dans le cas présent, les coefficients de régression estimés sont proches des vraies valeurs du tableau 2.1 qui sont βN = 0.3 et βM = 0.7. L’écart-type résiduel est aussi très proche de sa vraie valeur de σR = 6.25. En revanche, le terme constant qui est estimé par µ bR = 1.7526 est bien loin de sa vraie valeur qui vaut 0. Cela peut être corrigé en utilisant lm comme ci-dessus, en proposant un modèle sans terme constant : > est.para$R est.para$R Parameters of node R (Gaussian distribution) Conditional density: R | M + N Coefficients: (Intercept) M N 0.0000000 0.3151308 0.6919452 Standard deviation of the residuals: 6.287371 Et maintenant, tous les paramètres de est.para$R sont raisonnablement proches de leurs vraies valeurs. Comme c’est le cas pour les rb discrets, les estimations des paramètres de chaque nœud sont basées sur les seules observations du nœud et de ses parents, en conséquence de la factorisation observée dans l’équation (2.5) : > lmR coef(lmR) (Intercept) N M 1.7526350 0.6752099 0.2971240 Il est clair que la qualité des estimateurs dépend fortement de la taille de l’échantillon disponible : > confint(lmR)
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 50 — #64
i
50
i
Réseaux bayésiens avec R
2.5 % 97.5 % (Intercept) -5.0285482 8.5338182 N 0.5824071 0.7680127 M 0.2008141 0.3934338 Mais comme nous pouvons voir, en utilisant recoltes1, les intervalles de confiance obtenus pour les paramètres de la variable R couvrent bien les vraies valeurs indiquées dans le tableau 2.1.
2.5
Apprentissage de la structure du dag
Bien souvent, la connaissance que les experts ont sur un système n’est pas suffisante pour spécifier complètement la structure du dag. Dans de tels cas, si des données suffisantes sont disponibles, on peut espérer mettre en place une procédure statistique pour déterminer un ensemble simple de dépendances conditionnelles qui peut servir de base à la construction d’un rb parcimonieux. Dans cette section, plutôt que de reprendre tous les développements proposés au début de §1.5, nous allons nous focaliser sur les tests et les scores spécifiques aux rbg et montrer comment piloter et adapter les algorithmes de recherche utilisés en apprentissage de structure. Comme c’est le cas pour les rb discrets, les deux principales classes de critères utilisées pour l’apprentissage de structure pour les rb continus sont les tests d’indépendance conditionnelle et des scores associés à tout rb possible.
2.5.1
Tests d’indépendance conditionnelle
Les statistiques utilisées pour les tests d’indépendance conditionnelle sont issues de la modélisation multinormale. La plus courante est le test exact de la nullité de corrélations partielles. En effet, le coefficient de corrélation empirique comme : Pn 1 (xi,R − x ¯R )(xi,M − x ¯M ) q P ρR,M = COR(R, M) = q P n i=1 n n 1 1 2 ¯R ) ¯M )2 i=1 (xi,R − x i=1 (xi,M − x n n peut seulement transcrire les dépendances linéaires marginales entre les deux variables, ici entre R et M. Cependant, pour des rbg, nous sommes intéressés par les dépendances conditionnelles. Posons par exemple la question de l’indépendance de R et M lorsque N est fixé : H0 : R ⊥ ⊥P M | N
H1 : R 6⊥ ⊥P M | N
(2.6)
ce qui est équivalent à supposer que βM = 0 dans le modèle de régression établi dans la section précédente. La corrélation qu’il nous faut tester est la corrélation partielle entre R et M sachant N notée ρR,M|N , et l’hypothèse R ⊥ ⊥P M | N est équivalente à ρR,M|N = 0 5 . Malheureusement, il n’y a pas de formule explicite des coefficients 5. En effet, on peut démontrer que βM = 0 si et seulement si ρR,M|N = 0, et ceci est valable pour tous les coefficients de régression d’un modèle linéaire gaussien.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 51 — #65
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
i
51
de corrélation partielle, mais ils peuvent être calculés numériquement. Il faut commencer par calculer la matrice de corrélation des trois variables impliquées, ici R, M et N : > cormat = cor(recoltes1[, c("R", "M", "N")]) Ensuite, il faut calculer l’inverse, invcor, de cormat, par exemple avec la fonction cor2pcor du paquet corpcor (Schäfer et al., 2013), qui donne un résultat valide même si la matrice de données n’est pas de plein rang sur les trois colonnes associées aux trois variables : > > > >
library(corpcor) invcor = cor2pcor(cormat) dimnames(invcor) = dimnames(cormat) invcor R M N R 1.0000000 0.3977123 0.7148529 M 0.3977123 1.0000000 -0.3019383 N 0.7148529 -0.3019383 1.0000000 La distribution de la statistique de test sous l’hypothèse nulle est un t de Student. Nous obtenons alors, dans la case invcor["R", "M"], le coefficient de corrélation partielle ρR,M|N . De manière similaire, ρR,N|M se trouve dans invcor["R", "N"] et ρM,N|R dans invcor["M", "N"]. De manière plus générale, la case [X, Y ] de la matrice de corrélation partielle contient la corrélation partielle entre X et Y lorsque toutes les autres variables de la matrice sont fixées. Une estimation identique de ρR,M|N est fournie par ci.test et peut être utilisée pour tester l’hypothèse de l’équation (2.6) : > ci.test("R", "M", "N", test = "cor", data = recoltes1) Pearson's Correlation data: R ~ M | N cor = 0.3977, df = 197, p-value = 5.998e-09 alternative hypothesis: true value is not equal to 0 Sous l’hypothèse nulle, la distribution de la statistique de test s n−3 . t(ρR,M|N ) = ρR,M|N 1 − ρ2R,M|N
(2.7)
est une distribution de Student à n − 3 = 197 degrés de liberté. Les degrés de liberté s’obtiennent en ôtant de la taille de l’échantillon le nombre de variables qui interviennent dans le test (trois dans le cas présent). Lorsque l’on est proche de l’indépendance conditionnelle, t est proche de zéro ; de grandes valeurs sont le signe
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 52 — #66
i
52
i
Réseaux bayésiens avec R
d’une dépendance conditionnelle, le signe indiquant le sens de la dépendance. Par conséquent, dans le cas de ρR,M|N calculé ci-dessus, on peut dire que R et M sachant N sont significativement positivement corrélées ; l’hypothèse nulle est rejetée pour une probabilité limite extrêmement petite.
E
G V M
N R
Fig. 2.3 – dag stru1 ajusté à partir des données recoltes1 sans contrainte.
Les données disponibles dans le tableau recoltes1 ne sont pas très nombreuses, il est donc peu vraisemblable qu’il contienne assez d’information pour retrouver la vraie structure du dag initial. Cependant, si nous pratiquons un essai avec l’un des algorithmes présentés en §4.5.1, > stru1 stru2 all.equal(dag.bnlearn, stru2) 6. En anglais white list. 7. En anglais black list.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 53 — #67
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
i
53
[1] TRUE Une manière d’améliorer la précision 8 de l’ajustement d’un dag est d’augmenter la taille de l’échantillon utilisé. Supposons que nous disposions de 2 × 104 observations 9 dans un data frame nommé recoltes2 et que nous refassions l’apprentissage du dag avec lui : > dim(recoltes2) [1] 20000 6 > stru3 all.equal(dag.bnlearn, stru3) [1] TRUE Nous ne sommes pas surpris de constater que le dag a été parfaitement retrouvé : tous les arcs initiaux, et seulement eux, sont présents avec la bonne direction. Notons cependant qu’en général, quelle que soit la taille de l’échantillon utilisé, il n’est pas possible de trouver la direction de certains arcs car les deux directions peuvent produire des dag équivalents ; ils sont alors laissés sans direction (voir le chapitre 4 pour plus de détails). En d’autres termes, une approche non causale ne permet pas de trouver quelle direction il faut choisir. Cela est tout à fait évident lorsque le rb ne comprend que deux nœuds corrélés, les deux directions envisageables produisent la même distribution conjointe.
2.5.2
Scores de réseaux
Les scores de réseaux pour les rbg partagent beaucoup de choses avec les scores de réseaux pour les rb discrets que nous avons introduits en §1.5.2. Par exemple, le BIC prend la forme : BIC
d log bf(E, G, V, N, M, R) − log n 2 d dG E = log bf(E) − log n + log bf(G) − log n 2 2 d V log n + log bf(N | V) − + log bf(V | E, G) − 2 dM b + log f(M | V) − log n + log bf(R | N, M) − 2
=
dN log n 2 dR log n 2
(2.8)
où chaque distribution locale est normalement distribuée avec les paramètres estimés en §2.4. Par exemple : bf(R | N, M) = N (b µR + NβbN + MβbM , σ bR2 ) 8. Quantifier la précision dans l’espace discret des dag n’est pas une tâche simple ! Deux tentatives sont proposées dans bnlearn par les fonctions shd et hamming. Il ne s’agit cependant que d’heuristiques sans vrai fondement probabiliste. 9. Cela nous est facile puisqu’il s’agit de données simulées à partir du vrai modèle connu !
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 54 — #68
i
54
i
Réseaux bayésiens avec R
où µ bR = 0, βbN = 0.3221, βbM = 0.6737 et la variance résiduelle σ bR2 = 5.8983. De la même manière, le score de la densité postériore communément utilisé se construit à partir d’une distribution pseudo-uniforme sur l’espace des dag et des paramètres ; on l’appelle le score équivalent gaussien bayésien (BGe, cf. §4.5 pour les détails). Ces deux scores peuvent être calculés à l’aide de la fonction score de bnlearn ; le premier s’obtient avec type="bic-g" et le second avec type="bge" : > score(dag.bnlearn, data = recoltes2, type = "bic-g") [1] -416391.2 > score(dag.bnlearn, data = recoltes2, type = "bge") [1] -416425.8 BGe, tout comme BDe, accepte la taille d’échantillon imaginaire iss comme argument supplémentaire pour indiquer le poids relatif attribué à la priore uniforme par rapport aux données observées.
2.6
Utilisation d’un rbg
Comme cela a déjà été vu en §1.6, les rb peuvent être utilisés à deux niveaux : soit en se limitant à l’information portée par le dag, soit en incorporant les distributions locales associées. Les propriétés portées par le dag sont indépendantes des hypothèses distributionnelles faites sur le rb. Et donc, rien n’a besoin d’être ajouté à ce qui a déjà été dit en §1.6.1 puisque les deux exemples des figures 1.2 et 2.2 sont basés sur des dag de même structure. Ici, nous ne considérerons donc que les distributions locales, en admettant pour l’instant que le rbg est complètement défini par l’objet rbg.bnlearn présenté en §2.3. Comme pour le cas discret, nous sommes intéressés par la probabilité d’un événement précisé, plus généralement par la distribution d’une variable aléatoire déterminée, le plus souvent conditionnellement à des valeurs fixées pour d’autres variables du système. Là encore, nous verrons que les probabilités en cause peuvent être calculées exactement ou de manière approchée selon les cas, comme pour les rb discrets. Inférence exacte Des procédures d’inférence exacte peuvent être réalisées en utilisant le paquet rbmn. Il a été introduit en §2.3 pour calculer la distribution jointe de rbg.bnlearn. Il est construit sur trois classes équivalentes de définition d’un rb dénommées respectivement nbn, gema et mn. Un objet nbn décrit le rbg par les distributions locales de chaque nœud, ce qui est la façon la plus proche de la manière dont les rb ont été définis : > print8nbn(rbg.rbmn) =====Nodes===[parents] = Exp. (sd.dev) -----------------------------------------------
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 55 — #69
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens ---------E---[-] = ---------G---[-] = ---------V---[E,G] ---------M---[V] = ---------N---[V] = ---------R---[N,M]
50 (10) 50 (10) = -10.355 + 0.707*E + 0.5*G 15 + 0.7*V (7.141) 45 + 0.1*V (9.95) = 0.3*N + 0.7*M (6.25)
i
55
(5)
L’interprétation de cette sortie ne pose pas de difficulté ; la structure de l’objet R associé se découvre facilement en exécutant str(rbg.rbmn). Dans un objet de classe gema, le rbg est décrit par deux matrices génératrices : le vecteur des espérances et une matrice qui doit être post-multipliée par un bruit blanc 10 : > print8gema(gema.rbmn) mu E1 E2 E3 E4 E 50 10.000 0.0 0.0 0.00 G 50 0.000 10.0 0.0 0.00 V 50 7.071 5.0 5.0 0.00 M 50 4.950 3.5 3.5 7.14 N 50 0.707 0.5 0.5 0.00 R 50 3.677 2.6 2.6 5.00
E5 0.00 0.00 0.00 0.00 9.95 2.98
E6 0.00 0.00 0.00 0.00 0.00 6.25
Si nous considérons la ligne associée à la variable V dans la sortie précédente, nous pouvons lire que V = 50 + 7.071E1 + 5E2 + 5E3 (2.9) où E1, E2, . . . , E6 sont des variables i.i.d. normales centrées et réduites. Nous avons déjà vu en §2.3 la classe de type mn. Notons que pour les objets de classe gema et mn, l’ordre des nœuds doit être topologique 11 . Notons aussi qu’aucune fonction générique print n’est associée à ces classes et que les fonctions du style print8... doivent être employées. La fonction condi4joint de rbmn permet d’obtenir directement la distribution jointe conditionnelle d’un ou de plusieurs nœuds quand les valeurs des autres nœuds sont fixées. Par exemple, nous pouvons obtenir la distribution de R quand V=80 : > print8mn(condi4joint(mn.rbmn, par = "R", pour = "V", x2 = 80)) mu s.d. R 65.6 8.54 ou encore celle de V quand R=80 : > print8mn(condi4joint(mn.rbmn, par = "V", pour = "R", x2 = 80)) 10. C’est-à-dire un vecteur de variables aléatoires normales indépendantes, centrées et réduites. 11. C’est un ordre total des nœuds tel que les parents se trouvent toujours avant leurs enfants ; en général, un tel ordre n’est pas unique.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 56 — #70
i
56
i
Réseaux bayésiens avec R
mu s.d. V 65.6 8.54 Les résultats sont complètement symétriques, conséquence de la normalisation forte que nous avons imposée à la distribution jointe totale. Mais aussi, la fonction condi4joint permet d’obtenir la distribution conditionnelle de R pour toute valeur de V simplement en ne précisant pas sa valeur : > unlist(condi4joint(mn.rbmn, par = "R", pour = "V", x2 = NULL)) mu.R rho gamma 24.00 0.52 72.96 Cette sortie signifie que R | V ∼ N (24 + 0.52V, 8.5422 = 72.9625).
(2.10)
Inférence approchée Grâce à la puissance toujours croissante des calculateurs, l’investigation des propriétés d’un système, en le simulant sous différentes conditions pour en observer le comportement, est une pratique qui se généralise. Quand des distributions de probabilités sont impliquées, simuler signifie le plus souvent la génération d’un échantillon de variables aléatoires. La taille de l’échantillon à calculer, la manière de l’obtenir doivent être adaptées à l’ordre de grandeur des événements considérés 12 . Comme nous l’avons vu dans le paragraphe précédent, beaucoup de choses peuvent être dites pour des rbg sans recourir à la simulation. Néanmoins, pour certaines questions compliquées, la simulation reste la seule approche envisageable. Selon la requête, la simulation peut être soit directe soit contrainte. Dans le paquet bnlearn, la fonction rbn met en œuvre la première tandis que les fonctions cpquery et cpdist donnent accès aux deux formes. Simuler un rb, c’est obtenir un échantillon de valeurs aléatoires de la distribution jointe de l’ensemble de ses nœuds. On peut toujours l’obtenir en tirant des valeurs des nœuds tour à tour selon leurs distributions locales, dans un ordre respectant les sens des arcs du dag 13 . Par exemple, on peut simuler les nœuds suivant l’ordre de la table 2.1, utilisant les valeurs simulées pour les nœuds précédents afin de réaliser les conditionnements. Par une telle simulation, si nous conservons les valeurs générées pour un nœud particulier, nous disposons en fait d’une simulation selon sa distribution marginale. Cela est vrai, quelles que soient les natures et les distributions des nœuds du rb. Mais aussi, cette même simulation globale peut être utilisée comme une simulation d’une paire de nœuds comme (V, N), ainsi que pour tout sous-ensemble quelconque de nœuds du rb. Pour montrer comment une 12. Il est beaucoup plus facile d’apprécier un paramètre de position que les quantiles extrêmes d’une distribution ; ce point est abordé en §4.6.2. 13. Et donc en suivant un ordre topologique où les parents sont tirés avant leurs enfants.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 57 — #71
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
i
57
telle simulation peut être mise en œuvre, voici un script R qui génère nbs = 4 observations du couple de variables (V, N) selon notre rbg récolte : > > > > > > >
nbs > >
set.seed(4567) recoltes1 80. C’est exactement le principe qui est à la base des techniques dites abc 14 en statistique bayésienne. La grande limitation de cette procédure est qu’elle n’est pas possible quand la probabilité de trouver des observations qui satisfont la condition est très faible. On peut par exemple vérifier que P (R > 80) = 0.00135, ce qui signifie qu’en moyenne, on ne conserverait que 135 tirages sur 100000. Quoi qu’il en soit, les fonctions cpquery comme cpdist nous donnent la possibilité d’essayer : > head(cpdist(rbg.bnlearn, nodes=c("R","N","M"), evidence=(R > 80))) R N M 1 80.5 81.3 44.7 2 81.8 68.0 74.6 Mais très clairement, une telle approche n’est pas possible quand on conditionne pour une valeur unique d’une variable continue, comme c’est le cas pour V | G = 10, E = 90 que nous avons traité ci-dessus. En effet pour des distributions continues, une valeur ponctuelle a toujours une probabilité nulle, seuls les intervalles (ou les régions pour plusieurs variables) ont des probabilités strictement positives. Et si nous essayions, aucun tirage ne serait jamais retenu. Des procédures de simulations plus fines sont nécessaires pour traiter ce genre de cas. La plus simple d’entre elles est celle de la vraisemblance pondérante déjà abordée en §1.6.2 et qui sera détaillée en §4.6.2. On peut la mettre en œuvre par la fonction cpdist en spécifiant method="lw" : > head(cpdist(rbg.bnlearn, nodes = c("V"), + evidence = list(G = 10, E = 90), method = "lw")) 14. Pour Approximate Bayesian Computation.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 59 — #73
i
Chapitre 2. Cas continu : les réseaux bayésiens gaussiens
1 2 3 4 5 6
i
59
V 67.5 50.3 61.5 59.7 54.5 56.4
Comme on peut le remarquer dans le code ci-dessus, par l’argument evidence une liste de valeurs est transmise en entrée, une pour chacune des variables conditionnantes. De la même manière, la probabilité d’un événement (event) spécifique peut être calculée de façon identique par la fonction cpquery. Si, par exemple, nous sommes désireux de connaître la probabilité que la masse végétative dépasse le niveau de 70 sous ces mêmes conditions, nous pouvons utiliser la commande suivante : > cpquery(rbg.bnlearn, event = (V > 70), + evidence = list(G = 10, E = 90), method = "lw") [1] 0.0102 La probabilité que nous obtenons est très faible, comme on peut s’y attendre pour de très mauvais génotypes, même s’ils sont cultivés dans de très bonnes conditions pédologiques et climatiques.
2.7 2.7.1
Diagrammes Tracé du dag d’un rb
Le tracé de dag peut s’obtenir facilement à l’aide de différents paquets R, en particulier bnlearn, Rgraphviz et igraph. Dans ce chapitre, nous montrerons comment on peut se servir de igraph puisque bnlearn et Rgraphviz ont déjà été introduits au chapitre 1. Néanmoins, nous continuons de penser que la façon la plus simple pour des usagers du paquet bnlearn est la fonction graphviz.plot qui propose une interface avec le paquet Rgraphviz comme nous en avons donné l’exemple en §1.7.1. En premier lieu, nous allons montrer comme se définit un dag par l’ensemble de ses arcs pour le paquet igraph : > library(igraph) > igraph.options(print.full = TRUE) > dag0.igraph dag0.igraph IGRAPH DN-- 6 6 -+ attr: name (v/c) + edges (vertex names): [1] G->V V->N V->M E->V N->R M->R
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 60 — #74
i
60
i
Réseaux bayésiens avec R
Les arguments passés à la fonction graph.formula indiquent les nœuds qui se trouvent à la queue et à la pointe de chaque arc du graphe. Par exemple, E-+V signifie qu’il y a un arc qui va du nœud E au nœud V. Le symbole « - » signifie que le nœud E est à la queue de l’arc, tandis que le symbole « + » signifie que V se trouve à sa pointe. Et donc, E-+V et V+-E désignent le même arc qui part de E pour aller à V. Mais il est plus commode de partir des objets que nous avons déjà générés avec bnlearn et de traduire nos objets bn ou bn.fit en objets graph de igraph. Il suffit pour cela d’une seule commande R : > dag.igraph V(dag.igraph) Vertex sequence: [1] "E" "G" "M" "N" "R" "V" > E(dag.igraph) Edge sequence: [1] [2] [3] [4] [5] [6]
E G M N V V
-> -> -> -> -> ->
V V R R N M
Nous pouvons tracer notre dag de différentes façons, simplement en appliquant quelques-uns des algorithmes proposés par igraph. Voici un script R qui a permis la génération de la figure 2.4 : > > > > > + + >
igraph.options(vertex.color="lightgrey",vertex.label.color="black") par(mfrow = c(2, 2), mar = rep(3, 4), cex.main = 2) plot(dag.igraph, main = "\n1: par défaut") dag2 > > > + + + +
i
61
plot(dag2,layout = ly, main = "\n3: noeuds placés") colo ci.test("N", "V", "R", test = "cor", data = recoltes1) Pearson's Correlation data: N ~ V | R cor = -0.1936, df = 197, p-value = 0.006153 alternative hypothesis: true value is not equal to 0 Maintenant que nous avons compris pourquoi l’arc V → N était manquant, nous pouvons l’inclure à l’aide de la liste blanche (argument whitelist) et finalement obtenir le dag correct (stru2 de §2.5) : > dag.cor all.equal(dag.cor, dag.bnlearn) [1] TRUE Algorithmes par maximisation de score Les algorithmes d’apprentissage par maximisation de score ne sont que l’application des techniques d’optimisation heuristique au problème de l’apprentissage de
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 110 — #124
i
110
i
Réseaux bayésiens avec R
structure de rb. A chaque rb candidat est assigné un score de réseau traduisant sa bonne adéquation avec les données disponibles, score que l’algorithme essaie d’optimiser. Quelques exemples de cette classe d’algorithmes sont : – les algorithmes greedy search 16 tels que hill-climbing 17 avec des random restarts 18 ou tabu search 19 (Bouckaert, 1995). Ces algorithmes explorent l’espace de recherche à partir d’une structure de réseau initiale (le plus souvent un graphe vide) et ajoute, retire ou retourne un arc à la fois jusqu’à ce que le score associé ne puisse plus être amélioré (voir la description de l’algorithme 4.2) ; – les algorithmes génétiques, qui miment l’évolution naturelle au travers de sélections successives de modèles les mieux ajustés 20 et l’hybridation de leurs caractéristiques (Larrañaga et al., 1997). Dans ce cas, l’espace de recherche est exploré à l’aide de crossovers (qui combinent la structure de deux réseaux) et de mutations (qui introduisent des altérations aléatoires des caractéristiques) mis en place comme opérateurs stochastiques ; – les algorithmes de recuit simulé 21 (Bouckaert, 1995) qui réalisent une recherche stochastique locale en acceptant les changements qui améliorent le score du réseau, mais permettent simultanément des changements qui le font diminuer avec une probabilité de plus en plus petite au fur et à mesure de la décroissance du score. Algorithme 4.2 Algorithme hill-climbing. 1. Retenir une structure initiale G sur V, le plus souvent (mais pas nécessairement) vide. 2. Calculer le score de G, noté ScoreG = Score(G). 3. Mettre maxscore = ScoreG . 4. Répéter les étapes suivantes aussi longtemps que maxscore continue de croître : (a) pour tout ajout, retrait ou inversion d’un arc qui ne produit pas un cycle dans le réseau : i. calculer le score du réseau modifié G∗ , ScoreG∗ = Score(G∗ ) ii. si ScoreG∗ > ScoreG , mettre G = G∗ et ScoreG = ScoreG∗ (b) mettre à jour maxscore avec la nouvelle valeur de ScoreG . 5. Retourner G comme dag résultant. 16. 17. 18. 19. 20. 21.
En En En En En En
français recherche gloutonne. français escalade de la colline. français nouveaux départs aléatoires. français recherche tabou. anglais fittest. anglais simulated annealing.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 111 — #125
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
111
On trouvera une revue complète de ces heuristiques et d’autres approches, voisines du domaine de l’intelligence artificielle, dans Russell & Norvig (2009). Dans le cadre des scores de réseaux, il n’y a que deux options en usage courant qui ont été introduites en §4.5 : les probabilités postériores à partir de priores uniformes comme le BDe (pour les rb discrets) et comme le BGe (pour les rbg), et le score BIC. Dans le paquet bnlearn, elles sont codées respectivement "bde", "bic" (pour les rb discrets) et "bge", "bic-g" (pour les rbg), pour l’argument score. Ce petit nombre de possibilités, comparé au nombre de tests d’indépendance conditionnelle que nous avons énumérés plus haut, est la conséquence de la difficulté de spécifier une vraisemblance ou une distribution postériore abordable pour des dag. Comme exemple de l’apprentissage par maximisation de score, reprenons l’exemple d’apprentissage de structure de §1.5. Après avoir tenté additions et retraits d’arcs à la main, nous pouvons lancer l’algorithme hill-climbing de bnlearn et obtenir un dag avec un meilleur score BIC : > appris modelstring(appris) [1] "[D][E|D][T|D][A|E][P|E][S|E]" > score(appris, data = enquete, type = "bic") [1] -1998.432 La fonction tabu, qui met en œuvre une recherche tabou, retourne le même dag. Les fonctions hc et tabu ont des ensembles d’arguments similaires à ceux des fonctions présentées dans la section précédente ; la principale différence est la présence d’un argument score qui remplace les arguments test, alpha et B. Par exemple, nous pouvons examiner le fonctionnement de hc en mettant l’argument debug à TRUE, tout comme nous l’avions fait pour gs dans la section précédente : > appris E . * current network is : [...] ---------------------------------------------------------------* best operation was: adding E -> S . [...] ---------------------------------------------------------------* best operation was: adding D -> T . [...] ---------------------------------------------------------------* best operation was: adding E -> A . [...] ---------------------------------------------------------------* best operation was: adding E -> P . [...]
La recherche du réseau qui optimise le score BIC démarre, par défaut, du dag vide. Le changement qui accroît le plus le score BIC est l’addition à chaque étape d’un des arcs qui sera présent, éventuellement inversé, dans le dag final (cf. la figure 4.4). Ni hc ni tabu ne sont capables de trouver le vrai dag. Il y a de nombreuses raisons pour un tel comportement. Par exemple, il est possible que l’algorithme se trouve bloqué sur un maximum local en conséquence d’un choix défavorable du point de départ. Cela ne semble pas être le cas pour ces données enquete, puisque même quand on part du vrai dag, c’est-à-dire de enquete.dag, le dag que l’on obtient n’est pas le bon :
> enquete.dag depuis.lebon modelstring(depuis.lebon) [1] "[S][E|S][A|E][D|E][P|E][T|D]" > all.equal(cpdag(appris), cpdag(depuis.lebon)) [1] TRUE
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 113 — #127
i
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés Score BIC initial : -2008.943
A
S
Score BIC de l'étape: -2005.553
A
E D
S E
P
D
P
T
T
Score BIC de l'étape: -2002.827
Score BIC de l'étape: -2000.979
A
S
A
E D
S E
P
D
P
T
T
Score BIC de l'étape: -1999.259
Score BIC de l'étape: -1998.432
A
S
A
E D
S E
P
D
P
T
T
score BIC final : -1998.432
Le vrai DAG
A
S
A
E D
S E
P T
113
D
P T
Fig. 4.4 – Différentes étapes suivies par l’algorithme hill-climbing lors de l’apprentissage d’un dag avec le score BIC à partir des données enquete, ordonnées par lignes. Le dag tout en bas à droite est le vrai dag issu du chapitre 1.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 114 — #128
i
114
i
Réseaux bayésiens avec R
Une alternative est de partir d’un dag généré aléatoirement : > hc(enquete, score = "bic", start = random.graph(names(enquete))) Tout de même, il est intéressant de noter que les réseaux qui sont retournés pour différents dag initiaux appartiennent à la même classe d’équivalence 22 . Cela suggère fortement que les dépendances qui ont servi à spécifier enquete.dag ne se retrouvent pas complètement dans les données enquete ; les algorithmes hc et tabu ne semblent pas affectés par un problème de convergence ni souffrir d’une difficulté numérique. Algorithmes hybrides Principe : les algorithmes d’apprentissage hybride combinent les algorithmes basés sur des contraintes et ceux maximisant un score pour compenser leurs faiblesses respectives et proposer des structures de réseau fiables dans une grande variété de situations. Les deux membres les plus connus de cette famille sont l’algorithme Sparse Candidate (SC) de Friedman et al. (1999) et l’algorithme Max-Min Hill-Climbing (MMHC) de Tsamardinos et al. (2006). A titre d’illustration, le premier est décrit dans l’algorithme 4.3. Algorithme 4.3 Algorithme Sparse Candidate (SC). 1. Proposer une structure initiale G sur V, le plus souvent (mais pas nécessairement) vide. 2. Répéter les étapes suivantes jusqu’à la convergence : (a) restriction : sélectionner un ensemble Ci de parents candidats pour chaque nœud Xi ∈ V, supposé inclure les parents de Xi dans G ; (b) maximisation : trouver la structure de réseau G∗ qui maximise Score(G∗ ) parmi les réseaux dans lesquels les parents de chaque nœud Xi sont inclus dans l’ensemble Ci ; (c) mettre G = G∗ . 3. Retourner le dag G. Deux étapes principales : les algorithmes hybride sont basés sur deux étapes dénommées restriction et maximisation. La première correspond à une phase de contrainte, l’ensemble des candidats pour les parents de chaque nœud Xi est réduit de l’ensemble complet des nœuds V à un plus petit ensemble Ci ⊂ V de nœuds qui sont proches d’une manière ou d’une autre à Xi . On obtient ainsi un espace de recherche plus petit et plus régulier. La seconde étape correspond à une phase de 22. Rappelons que le sens des arcs n’est pas forcément significatif du moment que la classe d’équivalence est la même.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 115 — #129
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
115
maximisation d’un score, elle consiste à utiliser une heuristique pour mettre à jour un réseau maximisant le score retenu tout en respectant les contraintes définies par les ensembles Ci . Dans l’algorithme Sparse Candidate (décrit par l’algorithme 4.3), les deux étapes sont appliquées itérativement jusqu’à ce que le réseau soit stabilisé ou que le score utilisé ne progresse plus. Une implémentation précise n’est définie que lorsque les heuristiques utilisées pour les deux étapes de restriction et maximisation ont été choisies. L’algorithme MMHC en est un cas particulier où les deux étapes ne sont pas itérées, où l’heuristique Max-Min Parents and Children (MMPC) découvre les ensembles de candidats Ci et où une recherche gloutonne hill-climbing propose un réseau optimal. Il s’appelle très simplement avec la fonction mmhc de bnlearn avec le tableau de données comme seul argument : > mmhc(enquete) Mais plus de possibilités sont accessibles grâce à la fonction rsmax2 du paquet bnlearn qui implémente la variante d’une itération unique de l’algorithme SC en permettant de spécifier les heuristiques à utiliser pour chacune des deux étapes de restriction (arguments restrict et test) et de maximisation (arguments maximize, score et éventuellement maximize.args). Par exemple, nous pouvons mettre en œuvre l’algorithme Hiton-PC avec le test du khi-2 de Pearson pour l’étape de restriction et une recherche tabou avec le score BDe et une taille imaginaire de 5 pour l’étape de maximisation. En effet, ils se trouvent parmi les meilleurs algorithmes dans leurs groupes respectifs. Cela se fait très simplement : > rsmax2(enquete, restrict = "si.hiton.pc", test = "x2", + maximize="tabu", score="bde", maximize.args=list(iss = 5)) On peut bien entendu retrouver l’équivalent de la fonction mmhc très simplement : > rsmax2(enquete, restrict = "mmpc", maximize = "hc") Cependant, même si toute combinaison d’un algorithme par contrainte (pour l’étape de restriction), d’un algorithme de maximisation de score (pour l’étape de maximisation), de tests d’indépendance conditionnelle et de score de réseau fonctionnera, quelques-unes ont plus de sens que d’autres.
4.5.2
Estimation des paramètres
Une fois que la structure du rb a été mise à jour à partir des données, la tâche d’estimer et de mettre à jour les paramètres de la distribution globale est grandement facilitée par la décomposition en distributions locales. On rencontre deux approches principales dans la littérature : l’estimation par maximum de vraisemblance et l’estimation bayésienne. Des exemples de l’une et de l’autre ont été
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 116 — #130
i
116
i
Réseaux bayésiens avec R
présentés en §1.4 (pour les rb discrets) et en §2.4 (pour les rbg). D’autres choix comme les estimateurs rétrécis proposés par Hausser & Strimmer (2009) et Shäfer & Strimmer (2005) sont aussi possibles. Il est important de remarquer que les approches utilisées pour découvrir la structure du rb ne détermine pas nécessairement l’approche à utiliser pour l’estimation des paramètres. Par exemple, se servir des densités postériores à la fois pour l’apprentissage de la structure et l’estimation des paramètres produit une interprétation du rb obtenu et permet une inférence assez directe. Cependant, utiliser une permutation de Monte-Carlo (voir page 106) pour l’apprentissage de la structure et des estimations basées sur la distribution postériore est une pratique assez courante ; de même que d’utiliser des approches de rétrécissement et des estimations du maximum de vraisemblance. Bien qu’en pratique les distributions locales ne mettent en jeu qu’un petit nombre de variables qui n’a rien à voir avec le nombre de nœuds du rb, l’estimation des paramètres peut rester problématique dans quelques cas. Par exemple, il est de plus en plus courant d’avoir des tailles d’échantillons beaucoup plus petites que le nombre de variables incluses dans le modèle. C’est la situation typique des données biologiques à haut débit, comme celles fournies par les microarrays qui pour quelques dizaines, au mieux une centaine, d’observations caractérisent des milliers de gènes. Dans ce cadre appelé « petit n, grand p », les estimations restent peu précises à moins qu’un soin particulier ne soit apporté aux deux niveaux d’apprentissage de la structure et de l’estimation des paramètres.
4.6
Inférence par réseaux bayésiens
L’apprentissage d’un rb fournit des informations précieuses sur les données. En particulier, il met en évidence la structure de dépendance des variables et, sous certaines conditions, la structure de causalité. De plus, les paramètres associés à la distribution locale de chacun des nœuds décrit de manière concise les comportements en fonction des parents. Cependant, on peut répondre à beaucoup d’autres questions soit en restreignant le cadre du fonctionnement par l’incorporation de ce qu’il est convenu d’appeler de nouvelles évidences, soit encore en recherchant la probabilité d’événements complexes. Plusieurs exemples de ce type de fonctions ont déjà été présentés en §1.6 (pour les rb discrets) et en §2.6 (pour les rbg).
4.6.1
Raisonnement probabiliste et évidence
Les rb, tout comme les autres modèles statistiques, permettent de répondre à des questions sur la nature des données qui vont bien au-delà d’une simple description de l’échantillon observé. Les techniques que l’on met en œuvre se qualifient en général d’inférence. Pour les rb, on parle aussi de raisonnement probabiliste ou encore de mise à jour des croyances 23 ; les questions posées se dénomment 23. En anglais belief updating.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 117 — #131
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
117
elles-mêmes requêtes 24 . Ces termes ont été introduits par Pearl (1988) et sont empruntés à la théorie des systèmes experts (vous pourriez soumettre une requête à un expert pour recueillir un avis, ou mettre à jour votre connaissance selon le cas) ; ils ont complètement remplacé la terminologie traditionnelle statistique dans certains textes récents comme Koller & Friedman (2009). En pratique, le raisonnement probabiliste par les rb fonctionne dans le cadre de la statistique bayésienne et se concentre sur les probabilités et les densités postériores. Par exemple, imaginons que nous ayons appris un rb B de structure G et de paramètres Θ, sous l’un des postulats distributionnels que nous avons exploré dans les chapitres 1, 2 ou 3. Si nous voulons maintenant nous servir de B pour investiguer les effets d’une nouvelle information disponible (évidence), E, en profitant de la connaissance encodée dans B, la réponse naturelle est donnée par la distribution postériore Pr(X | E, B) = Pr(X | E, G, Θ). Les approches utilisées pour ce genre d’analyse dépendent de la nature de E et aussi de la nature de l’information que nous recherchons. Les deux types d’évidence les plus fréquents sont : – évidence certaine 25 , la connaissance précise de la valeur 26 d’une ou plusieurs variables du réseau. De manière formelle, E = {Xi1 = e1 , Xi2 = e2 , . . . , Xik = ek } ,
i1 6= . . . 6= ik ∈ {1, . . . n},
qui peut aller de la connaissance de la valeur d’une seule variable Xi à la spécification complète de X. Le plus souvent, une telle instanciation provient d’une nouvelle observation (partielle ou complète) enregistrée après que B a été appris ; – évidence incertaine 27 , une nouvelle distribution de probabilité pour une ou plusieurs variables du réseau. Puisque et la structure et les distributions locales sont fixées, une évidence incertaine se spécifie le plus souvent par un nouvel ensemble de paramètres, n o E = Xi1 ∼ (ΘXi1 ), Xi2 ∼ (ΘXi2 ), . . . , Xik ∼ (ΘXik ) . Cette nouvelle distribution peut être, par exemple, la distribution nulle dans un problème de test d’hypothèse : utilisation d’une probabilité conditionnelle spécifique pour un rb discret, ou une valeur nulle pour un coefficient de régression précisé pour un rbg. Pour ce genre de requêtes, nous nous limiterons aux probabilités conditionnelles 28 , CPQ, et au maximum a posteriori (MAP) également connu comme MPE 29 . Les deux s’appliquent principalement aux évidences certaines, bien qu’elles puissent être aussi combinées à des évidences incertaines. 24. 25. 26. 27. 28. 29.
En En En En En En
anglais anglais anglais anglais anglais anglais
queries. hard evidence. instantiation. soft evidence. conditional probability query. most probable explanation.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 118 — #132
i
118
i
Réseaux bayésiens avec R
Les requêtes de probabilité conditionnelle ne sont rien d’autres que la recherche de la distribution d’un sous-ensemble de variables, Q = {Xj1 , . . . , Xjl }, conditionnellement à l’évidence certaine E sur un autre sous-ensemble {Xi1 , . . . , Xik } de variables de X. Les deux sous-ensembles de variables peuvent être supposés disjoints. La distribution qui nous intéresse est : CPQ(Q | E, B) = Pr(Q | E, G, Θ) = Pr(Xj1 , . . . , Xjl | E, G, Θ), qui n’est autre que la distribution postériore marginale de Q, soit : Z Pr(Q | E, G, Θ) = Pr(X | E, G, Θ) d(X \ Q).
(4.7)
Cette classe de requêtes a beaucoup d’applications très utiles du fait de leur flexibilité. Par exemple, elle donne accès à l’interaction entre deux facteurs expérimentaux pour une caractéristique d’intérêt ; les niveaux retenus des deux facteurs seraient l’évidence (E), la probabilité de l’interaction visée serait Q. Un autre exemple est la cote d’une occurrence défavorable Q que l’on voudrait apprécier pour différentes possibilités, qui seraient les évidences certaines E1 , E2 , . . . , Em . Les requêtes de maximum a posteriori se traduisent par la recherche de la configuration q∗ des variables de Q qui ont la probabilité postérieure la plus grande (pour les rb discrets) ou la densité postériore maximale (pour les rbg et les rb hybrides), MAP(Q | E, B) = q∗ = argmax Pr(Q = q | E, G, Θ). q
Les applications de ce genre de requêtes peuvent être rangées en deux catégories : l’imputation de valeurs manquantes pour des observations partielles (les variables à prédire sont les Q, les valeurs des observées est E), ou encore les variables prédites par q∗ sont comparées avec des valeurs qui avaient été en fait observées. Les deux types de requêtes (probabilité conditionnelle et maximum a posteriori ) peuvent aussi être pratiquées avec une évidence incertaine, mais avec une interprétation différente. D’un côté, lorsque E encode une évidence certaine, il n’est pas stochastique, il équivaut à une valeur observée ; dans ce cas, Pr(Q = q | E, G, Θ) n’est pas stochastique. De l’autre côté, lorsque E encode une évidence incertaine, c’est une variable aléatoire et en conséquence Pr(Q = q | E, G, Θ) est stochastique. C’est pourquoi les réponses aux deux types de requêtes doivent être manipulées et évaluées selon la nature de l’évidence sur laquelle elles sont basées. Il faut bien voir que toutes les techniques présentées dans cette section ne sont que l’application d’une démarche unique : la modification de la probabilité jointe des nœuds pour tenir compte d’une nouvelle information. Dans le cas d’évidence certaine, c’est simplement un conditionnement ; dans le cas d’évidence incertaine, certaines distributions locales sont modifiées.
4.6.2
Mise à jour de la connaissance
L’estimation des probabilités et des densités postériores décrites dans la section précédente est un problème fondamental pour le traitement des requêtes. Celles qui
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 119 — #133
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
119
mettent en jeu des événements de très petites probabilités et/ou qui sont posées dans le cadre de rb de grande dimension sont particulièrement problématiques, même avec les meilleurs algorithmes proposés dans la littérature : elles posent des défis à la fois numériques et probabilistes. Les algorithmes pour la mise à jour des connaissances peuvent être exacts ou approchés ; ils sont basés sur les propriétés fondamentales des rb introduites en §4.2. Des calculs locaux sont réalisés en se servant des distributions locales, pour éviter la malédiction de la dimensionnalité. Ainsi l’équation (4.7) peut être récrite : Z Pr(Q | E, G, Θ) =
Pr(X | E, G, Θ) d(X \ Q) # Z "Y p Pr(Xi | E, ΠXi , ΘXi ) d(X \ Q) = i=1
=
Y Z
Pr(Xi | E, ΠXi , ΘXi ) dXi .
i:Xi ∈Q
La correspondance entre la d-séparation et l’indépendance conditionnelle peut aussi servir pour encore mieux réduire la dimension du problème. A partir de la définition 4.2, les variables qui sont d-séparées de Q par E ne peuvent pas influencer le résultat de la requête ; on peut donc complètement les exclure du calcul des probabilités postériores. Les algorithmes d’inférence exacte combinent l’application répétée du théorème de Bayes avec des calculs locaux pour obtenir des valeurs exactes de Pr(Q | E, G, Θ). De ce fait, ils ne sont applicables que pour des rb petits et simples, comme les arbres ou les poly arbres. Dans le pire des cas, leur complexité calculatoire croît exponentiellement avec le nombre de variables. Les deux algorithmes d’inférence exacte les plus connus sont ceux d’élimination des variables et de mise à jour de connaissance basés sur les arbres de jonction. Tous les deux ont d’abord été proposés pour les rb discrets puis étendus aux rbg et aux rb hybrides. L’élimination de variables utilise directement la structure du rb, en spécifiant la séquence optimale sur les distributions locales et quels résultats intermédiaires doivent être stockés pour minimiser les calculs à faire. D’un autre côté, la mise à jour de connaissance peut aussi se réaliser par la transformation préalable du rb en arbre de jonction. Comme cela est exposé dans l’algorithme 4.4, un arbre de jonction est la transformation du graphe moralisé B dans lequel les nœuds originaux sont regroupés pour réduire la structure du réseau à un arbre ; voir aussi l’exercice 4.4. Cela permet par la suite, de réaliser la mise à jour de connaissance plus efficacement en utilisant l’algorithme de passage de message de Kim et Pearl. L’exposition détaillée des étapes principales de cet algorithme va audelà de l’ambition de ce livre ; pour une explication complète et des exemples pas à pas, nous renvoyons le lecteur à Korb & Nicholson (2004) et Koller & Friedman (2009).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 120 — #134
i
120
i
Réseaux bayésiens avec R
Algorithme 4.4 Algorithme de classification par arbre de jonction. 1. Moralisation : créer le graphe moral du rb B comme exposé en §4.4. 2. Triangulation : casser chaque cycle comprenant 4 nœuds ou plus en souscycles de 3 nœuds exactement en ajoutant des arcs au graphe moralisé ; ce qui entraîne la production d’un graphe triangulé. 3. Cliques : identifier les cliques C1 , . . . , Ck du graphe triangulé, c’est-à-dire les sous-ensembles maximaux de nœuds dans lesquels chaque nœud est adjacent à tous les autres. 4. Arbre de jonction : créer un arbre dans lequel chaque clique est un nœud et les cliques adjacentes sont liées par des arcs. L’arbre doit satisfaire la propriété d’intersection courante : si un nœud appartient à deux cliques, disons Ci et Cj , il doit aussi être inclus dans toutes les cliques de l’unique chemin qui connecte Ci et Cj . 5. Paramètres : utiliser les paramètres des distributions locales de B pour calculer les ensembles de paramètres des nœuds composés de l’arbre de jonction.
Les algorithmes d’inférence approchée sont basés sur des simulations pseudoaléatoires dans la distribution globale d’échantillons de X et, à partir d’eux, est estimée Pr(Q | E, G, Θ). Plus précisément, ils génèrent un très grand échantillon de B et estiment les probabilités conditionnelles appropriées en rapportant, d’une manière ou d’une autre, les échantillons qui incluent à la fois E et Q = q à ceux qui n’incluent que E. En informatique, ces échantillons pseudo-aléatoires sont souvent dénommés particules et les algorithmes qui les utilisent filtres de particules ou encore approches particulaires. Algorithme 4.5 Algorithme d’échantillonnage logique. 1. Ranger les variables de X suivant un des ordres topologiques de G, disons X(1) ≺ X(2) ≺ . . . ≺ X(p) . Définir à zéro deux compteurs dénommés nE et nE,q . 2. Pour un nombre suffisamment grand d’échantillons x = (x1 , . . . , xp ) : (a) générer x(i) , i = 1, . . . , p à partir de X(i) | ΠX(i) profitant du fait que, grâce à l’ordre topologique, au moment où nous tirons Xi nous avons déjà généré les valeurs de ses parents ΠX(i) ; (b) si x vérifie E, incrémenter nE de 1 ; (c) si x vérifie à la fois Q = q et E, incrémenter nE,q de 1. 3. Estimer Pr(Q | E, G, Θ) par nE,q /nE .
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 121 — #135
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
121
Les approches mises en œuvre à la fois pour échantillonner et rapporter les échantillons obtenus sont très diverses ; leurs combinaisons ont donné lieu à la publication de plusieurs algorithmes approchés. Le tirage d’échantillons aléatoires va de la génération d’échantillons indépendants à l’utilisation des schémas mcmc les plus complexes, comme ceux que nous avons vus dans le chapitre 3. Des choix courants sont soit l’échantillonnage par rejet soit l’échantillonnage par importance. La manière d’utiliser ces échantillons par des pondérations va de la fonction uniforme à la fonction de vraisemblance jusqu’à différents estimateurs de la distribution postériore. La combinaison la plus simple de ces deux classes d’approches est l’échantillonnage direct ou logique. Il est décrit dans son intégralité par Korb & Nicholson (2004) ou Koller & Friedman (2009) et nous allons proposer ici une description synthétique. L’échantillonnage logique 30 combine l’échantillonnage par rejet avec des pondérations uniformes. Ces dernières sont calculées comme le rapport du nombre d’échantillons générés qui vérifient à la fois E et Q = q sur le nombre d’échantillons générés qui vérifient E. Reprenons comme exemple une des deux requêtes utilisées en §1.6.2 : trouver la probabilité qu’un homme conduise une automobile sachant qu’il a suivi des études supérieures. La première étape de l’algorithme 4.5 est celle de la génération des particules. Dans bnlearn, la production d’observations pseudo-aléatoires à partir d’un rb se réalise par la fonction rbn, dont les arguments sont un objet de classe bn.fit et le nombre d’échantillons à générer : > particules head(particules, n = 5) A D E P S T 1 adulte grande n1 non lib F train 2 jeune grande n1 non lib M auto 3 adulte grande n2 non lib M auto 4 vieux grande n2 non lib F autre 5 vieux grande n1 non lib M train L’appel de rbn correspond aux étapes 1 et 2(a). L’étape 2(b) est le comptage des particules qui vérifient l’évidence E == "n1" pour l’obtention de nE : > partE nE partEq nEq nEq/nE [1] 0.3432038 C’est exactement ce que réalise la fonction cpquery : > cpquery(rb, event = (S == "M") & (T == "auto"), + evidence = (E == "n1"), n = 10^6) [1] 0.3427267 La différence observée sur les chiffres est la conséquence du calcul stochastique. Il est évident qu’un tel algorithme peut être très peu efficace si Pr(E) est petite, puisque la grande majorité des particules générées seront éliminées 31 et ne contribueront pas à l’estimation de Pr(Q | E, G, Θ). Cependant, sa simplicité le rend très facile à implémenter et permet aussi de traiter des requêtes très difficiles. En effet, il permet des spécifications très complexes de E comme de Q, aussi bien pour MAP(Q | E, B) que CPQ(Q | E, B). Algorithme 4.6 Algorithme de pondération par la vraisemblance. 1. Ranger les variables de X selon l’un des ordres topologiques de G, notons-le X(1) ≺ X(2) ≺ . . . ≺ X(p) . Définir à zéro deux poids dénommés wE et wE,q . 2. Générer un échantillon de taille suffisante de x = (x1 , . . . , xp ) : (a) en utilisant les valeurs e1 , . . . , ek spécifiées par l’évidence certaine E pour les Xi1 , . . . , Xik , générer x(i) , i = 1, . . . , p pour X(i) | ΠX(i) ; Q (b) calculer les poids wx = Pr(Xi∗ = e∗ | ΠXi∗ ) ; (c) mettre wE = wE + wx ; (d) si x vérifie Q = q, mettre wE,q = wE,q + wx . 3. Estimer Pr(Q | E, G, Θ) par wE,q /wE . Une amélioration par rapport à l’échantillonnage logique, conçue pour dépasser cette difficulté, consiste à appliquer l’échantillonnage par importance : c’est l’algorithme des pondérations par vraisemblance dont les principales étapes sont données dans l’algorithme 4.6. Contrairement à l’échantillonnage logique, toutes les particules sont générées en incluant dès le départ l’évidence E. Cependant, cela signifie que nous ne simulons pas à partir du rb initial mais à partir d’un autre rb dans lequel tous les nœuds Xi1 , . . . , Xik de E sont fixés. On appelle ce réseau le réseau mutilé. Toutefois, cela veut dire que nous sommes capables de le construire, la plupart du temps parce que la condition E est une évidence certaine : 31. Car ne satisfaisant pas la condition E.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 123 — #137
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
123
> rbmut rbmut$E Parameters of node E (multinomial distribution) Conditional probability table: n1 n2 1 0 Mais de ce fait, échantillonner simplement depuis rbmut n’est pas une approche adéquate. Si nous le faisions, la probabilité que nous obtiendrions serait Pr(Q, E | G, Θ), alors que nous voulons la probabilité conditionnelle Pr(Q | E, G, Θ) : > particules partQ nrow(partQ)/nrow(particules) [1] 0.337293 Le rôle de la pondération est justement d’ajuster le fait que nous tirons depuis rbmut et non pas depuis rb. Comme nous pouvons le voir à l’étape 2(b), il ne s’agit que de la composante de vraisemblance associée aux nœuds de rb que nous conditionnons (par E dans ce cas) pour les particules : > w wEq wE wEq/wE [1] 0.3425294 La fonction exponentielle, exp, doit être utilisée puisque w représente le logarithme de la vraisemblance. Cette valeur de wEq/wE se trouve être la même que la probabilité conditionnelle exacte que nous avions obtenue en utilisant le paquet gRain en §1.6.2. C’est parce que ce calcul est beaucoup plus précis que celui fait à l’aide de l’échantillonnage logique un peu plus haut pour le même nombre de particules. Plus commodément, nous pouvons réaliser cette pondération par la vraisemblance directement par la fonction cpquery en précisant l’argument method = "lw" et en spécifiant l’évidence par une liste nommée, chaque élément ayant le nom du nœud et la valeur correspondante du conditionnement :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 124 — #138
i
124
i
Réseaux bayésiens avec R
> cpquery(rb, event = (S == "M") & (T == "auto"), + evidence = list(E = "n1"), method = "lw") [1] 0.3506699 L’estimation obtenue reste très précise bien que nous n’ayons pas augmenté le nombre de particules 32 à 106 comme nous l’avons fait pour l’échantillonnage logique. A l’autre bout du spectre, la littérature scientifique propose des algorithmes approchés beaucoup plus complexes qui permettent d’estimer de très petites probabilités avec une excellente précision. Deux exemples en sont le schéma d’échantillonnage par importance adaptatif 33 , AIS-BN, de Cheng & Druzdzel (2000) et celui dit d’échantillonnage par importance de pré propagation de l’évidence 34 , EPIS-BN, de Yuan & Druzdzel (2003). L’un comme l’autre permettent d’estimer des probabilités conditionnelles aussi faibles que 10−41 ; ils sont aussi plus performants sur de grands réseaux. Cependant, les postulats sur lesquels ils se basent les restreignent souvent aux rb discrets et leur mise en œuvre peut dépendre d’une difficile calibration de paramètres additionnels.
4.7
Réseaux bayésiens causaux
Tout au long de ce livre, nous avons défini les rb en termes d’indépendance conditionnelle et de propriétés probabilistes, sans nous servir du fait que les arcs pouvaient représenter ou non des relations de cause à effet entre les nœuds. Au contraire, l’existence de classes d’équivalence comprenant des rb ayant des arcs de sens opposés et qui sont indistinguables d’un point de vue probabiliste démontre que les arcs ne sont pas une indication de causalité en eux-mêmes. Cependant, d’un point de vue intuitif, on peut soutenir qu’un « bon » rb devrait représenter aussi la structure causale du phénomène qu’il est censé décrire. De tels rb sont le plus souvent assez peu denses, leur interprétation fait sens et par conséquent est claire, ce qu’explique Pearl (2009) dans son livre sur la causalité : « Il semblerait que si les assertions sur les indépendances conditionnelles proviennent de relations causales admises, alors enregistrer et représenter ces relations directement serait une façon plus naturelle et plus fiable d’exprimer ce que nous savons ou imaginons à propos du monde. C’est la philosophie qui se trouve derrière les rb causaux. » C’est la raison pour laquelle la construction d’un rb à partir de la connaissance d’experts repose sur les relations connues et attendues d’un phénomène donné. L’apprentissage de telles relations causales, en particulier à partir de données observées, représente un défi significatif ; en particulier, il faut assumer trois postulats supplémentaires : 32. Equivalent au nombre de données dans ce cas. 33. En anglais Adaptative Importance Sampling. 34. En anglais Evidence Pre-propagation Importance Sampling.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 125 — #139
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
125
– chaque variable Xi ∈ X est conditionnellement indépendante de ses non-effets, directs comme indirects, lorsque l’on connaît les causes directes. Ce postulat s’appelle le postulat markovien causal ; il représente l’interprétation causale de la propriété de Markov locale introduite en définition 4.4 ; – il doit exister un dag qui est fidèle à la distribution de probabilité P de X, et donc ses seules dépendances sont celles qui proviennent de la d-séparation du dag ; – il ne doit pas y avoir de variables latentes (variables non observées qui influencent les variables du réseau en agissant comme des facteurs de confusion. De telles variables peuvent induire de fausses corrélations entre les variables observées, et donc un biais dans le réseau causal. Bien que souvent listé comme un postulat séparé, celui-là n’est qu’un corollaire des deux premiers postulats : en effet, la présence de variables non observées viole le postulat de fidélité (puisque le réseau ne les inclut pas) et éventuellement la propriété de Markov causale (si un arc est ajouté de manière erronée entre les variables observées du fait de l’influence simultanée d’une variable latente). Ces postulats sont difficiles à vérifier dans la réalité car l’ensemble des facteurs de confusion potentiels n’est le plus souvent pas connu. Au mieux, cette question peut être résolue, tout comme celle du biais de sélection, par l’utilisation d’un plan d’expérience soigneusement construit. En outre, même lorsque l’on travaille avec des données d’intervention récoltées à partir d’une expérimentation scientifique (où quelques variables sont contrôlées et que le résultat entraîné par la modification de leurs valeurs est observé), il y a la plupart du temps plusieurs rb équivalents qui représentent des modèles causaux raisonnables. Beaucoup d’arcs peuvent avoir une direction indéterminée, avec pour conséquence des dag très différents. Quand la taille de l’échantillon est réduite, il peut aussi y avoir plusieurs rb n’appartenant pas à la même classe d’équivalence mais qui ajustent quand même les données de manière comparable. On n’est donc pas, en général, capable d’identifier un seul « meilleur » rb causal mais plutôt un petit ensemble de rb causaux vraisemblables qui s’adaptent à notre connaissance des données. Un exemple de biais introduit par la présence d’une variable latente a été illustré par Edwards (2000, p. 113) dans l’analyse des données marks. Ces données qui sont incluses dans le paquet bnlearn, sont les résultats obtenus aux examens de 88 étudiants pour 5 matières différentes, plus précisément la mécanique (MECH), l’algèbre vectorielle (VECT), l’algèbre générale (ALG), l’analyse (ANL) et les statistiques (STAT). Les notes sont comprises entre 0 et 100. Ce jeu de données a été utilisé pour la première fois par Mardia et al. (1979) et est devenu par la suite classique dans les livres de référence sur les modèles graphiques tels que celui de Whittaker (1990) : > data(marks) > head(marks)
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 126 — #140
i
126
1 2 3 4 5 6
i
Réseaux bayésiens avec R MECH VECT ALG ANL STAT 77 82 67 67 81 63 78 80 70 81 75 73 71 66 81 55 72 63 70 68 63 63 65 70 63 53 61 72 64 73
Edwards s’est aperçu qu’apparemment, les étudiants appartenaient à deux groupes (que nous noterons A et B) de profils académiques très différents. Il a alors assigné chacun des étudiants à l’un des deux groupes en utilisant l’algorithme EM pour créer une variable binaire nouvelle (LAT), donc latente pour les données disponibles, d’appartenance à ces groupes. L’algorithme EM a placé les 52 premiers étudiants (sauf le numéro 45) dans le groupe A, et tous les autres dans le groupe B : > latent modelstring(hc(marks[latent == "A", ])) [1] "[MECH][ALG|MECH][VECT|ALG][ANL|ALG][STAT|ALG:ANL]" > modelstring(hc(marks[latent == "B", ])) [1] "[MECH][ALG][ANL][STAT][VECT|MECH]" > modelstring(hc(marks)) [1] "[MECH][VECT|MECH][ALG|MECH:VECT][ANL|ALG][STAT|ALG:ANL]" Comme nous pouvons voir sur la figure 4.5 (en haut à gauche et en haut à droite) et aussi par l’appel à la fonction modelstring juste ci-dessus, les deux rb appris pour le groupe A et le groupe B sont complètement différents. De plus, ils diffèrent aussi totalement du rb appris sur l’ensemble des données (figure 4.5, en bas à gauche). Si nous voulons apprendre un seul rb en prenant en compte la nouvelle variable LAT, nous pouvons le faire en discrétisant les notes initialement continues des données marks pour leur ajouter la variable latente et apprendre la structure d’un rb discret dans le cadre de distributions multinomiales. Et une fois de plus nous obtenons un rb dont le dag est complètement différent des trois précédents (figure 4.5, en bas à droite) : > dmarks modelstring(hc(cbind(dmarks, LAT = latent))) [1] "[MECH][ANL][LAT|MECH:ANL][VECT|LAT][ALG|LAT][STAT|LAT]" L’interprétation que nous pouvons donner des relations principales entre variables, à partir de ce dernier dag, est très simple : le niveau d’un étudiant en mécanique et en analyse suffit à déterminer son appartenance à l’un des deux groupes et celle-là est suffisante pour expliquer les notes dans les trois autres matières.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 127 — #141
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés Groupe A
ANL
127
Groupe B
STAT
STAT
ANL
ALG MECH
ALG MECH
VECT
RB sans les groupes latents
ANL
i
VECT
RB avec les groupes latents
ANL
STAT
VECT ALG
LAT
MECH
MECH VECT
ALG
STAT
Fig. 4.5 – rb appris à partir du jeu de données marks en ne retenant que le groupe A (en haut à gauche), que le groupe B (en haut à droite), à partir des deux groupes (en bas à gauche) et sur des données discrétisées en incluant la variable latente LAT (en bas à droite).
En témoigne ce simple calcul des moyennes selon les deux classes : > moy dimnames(moy)[[1]] print(round(moy,1)) MECH VECT ALG ANL STAT tous 39.0 50.6 50.6 46.7 42.3 A 45.6 57.3 56.9 56.3 50.6 B 29.7 41.4 42.0 33.4 30.8 Il est bien clair que toute relation de type causal que nous aurions pu inférer sur
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 128 — #142
i
128
i
Réseaux bayésiens avec R
un dag appris sans tenir compte de la variable LAT n’aurait pu être qu’erronée. De fait, nous aurions même pu nous demander si les données venaient vraiment d’un tirage simple dans une population. N’auraient-elles pas été arrangées d’une façon ou d’une autre ?
4.8
Lectures complémentaires
Les principales définitions et propriétés des rb sont détaillées dans de nombreux livres, chacun avec sa perspective propre ; mais peut-être les plus clairs et les plus concis restent les travaux pionniers de Pearl (1988, 2009). Nous voudrions aussi suggérer Castillo et al. (1997) pour une introduction formelle à la théorie des modèles graphiques ; ainsi que le livre très complet mais un peu long de Koller & Friedman (2009). D’autres aspects sont aussi proposés dans Murphy (2012). Plusieurs approches inférentielles sont couvertes dans différents livres : depuis l’élimination de variables dans Koller & Friedman (2009, chapitre 9) et Russell & Norvig (2009, section 14.4), aux arbres de jonction dans Koller & Friedman (2009, chapitre 10), Korb & Nicholson (2004, chapitre 3), Castillo et al. (1997, chapitre 8) et Koski & Noble (2009, chapitre 10), à l’échantillonnage logique et à la pondération par vraisemblance dans Koller & Friedman (2009, chapitre 12), Korb & Nicholson (2004, chapitre 3) et Castillo et al. (1997, chapitre 9). Pearl (1988, chapitres 4 et 5) constitue aussi une intéressante lecture à propos de l’inférence exacte. Finalement, on peut mentionner Koller & Friedman (2009, chapitre 13) qui décrit des algorithmes d’inférence spécifiques aux requêtes MAP. L’apprentissage et particulièrement l’apprentissage de structure comporte moins de références que l’inférence. L’apprentissage de paramètres pour les rb discrets se trouve dans la plupart des livres, en particulier dans Koller & Friedman (2009, chapitre 17) et Neapolitan (2003, section 7.1) ; pour les rbg, il est abordé par Neapolitan (2003, section 7.2) et Koller & Friedman (2009, section 17.2.4). L’apprentissage de structures contraintes est introduit dans Korb & Nicholson (2004, chapitre 8) et Neapolitan (2003, chapitre 10) ; Edwards (2000, chapitre 5) fournit une liste quasi exhaustive des tests d’indépendance conditionnelle à utiliser dans ce contexte. L’apprentissage de structure basé sur les scores est introduit dans Korb & Nicholson (2004, chapitre 9) et Castillo et al. (1997, chapitre 11), et une vision plus générale des algorithmes qui peuvent être utilisés dans ce but se trouve dans Russell & Norvig (2009, chapitre 4). L’apprentissage de structures pour les rb hybrides est mentionné dans Koski & Noble (2009, section 6.3). Finalement, au lecteur intéressé, nous suggérons Spirtes et al. (2000) comme référence très complète pour les rb causaux et l’usage des algorithmes par contraintes tels que l’algorithme PC.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 129 — #143
i
Chapitre 4. Théorie des réseaux bayésiens et algorithmes associés
i
129
Exercices Exercice 4.1 À partir du jeu de données enquete du chapitre 1. 1. Apprenez un rb en utilisant l’algorithme IAMB et le test asymptotique de l’information mutuelle. 2. Réalisez le même apprentissage de rb mais en n’utilisant que les 100 premières observations du jeu de données. Cela entraîne-t-il une perte d’information significative ? 3. Recommencez l’apprentissage de structure avec les 100 premières observations mais en changeant le test par celui de Monte-Carlo (puis Monte-Carlo séquentiel) d’information mutuelle. Les résultats s’en trouvent-ils améliorés ? Trouvez-vous le surplus de temps d’exécution mérité ?
Exercice 4.2 Toujours à partir du jeu de données enquete utilisé dans le chapitre 1. 1. Apprenez un rb par approche bayésienne, aussi bien pour la structure que pour les valeurs des paramètres, en utilisant une taille d’échantillon imaginaire de iss = 5. 2. Répétez l’apprentissage de structure avec l’algorithme hc en pratiquant 3 redémarrages aléatoires avec tabu. Les rb obtenus diffèrent-ils ? Peut-on imaginer qu’il y ait une difficulté liée au calcul numérique, ou encore un manque de convergence ? 3. Utilisez des sous-ensembles de taille croissante du jeu de données enquete pour vérifier empiriquement que BIC et BDe sont asymptotiquement équivalents.
Exercice 4.3 À partir du jeu de données marks présenté en §4.7. 1. Créez un objet bn associé au graphe en bas à droite de la figure 4.5 en le nommant mdag. 2. Trouvez le squelette, le cpdag et le graphe moralisé de cet objet mdag. 3. Discrétisez les variables des données marks avec l’option "interval" en prenant successivement deux, trois et quatre intervalles. 4. Réalisez l’apprentissage de structure avec l’algorithme hc sur chacun des ensembles de données discrétisées ; en quoi les différents dag obtenus diffèrent-ils ?
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 130 — #144
i
130
i
Réseaux bayésiens avec R
A
B
C
G
D
E
H
F
Fig. 4.6 – dag de départ pour l’exercice 4.4. Exercice 4.4 À partir du dag présenté en figure 4.6. 1. Donnez la version moralisée. 2. Puis triangulez-le. 3. Enfin, dessinez l’arbre de jonction correspondant (en vous aidant des indications trouvées dans l’algorithme 4.4).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 131 — #145
i
i
Chapitre 5
Logiciels pour réseaux bayésiens La difficulté de réalisation d’un logiciel polyvalent pour des classes très générales de modèles graphiques d’une part, et adapté aux différents points de vue sous lesquels ils sont considérés suivant le domaine d’autre part, limite singulièrement l’application des rb par rapport à l’état de l’art déjà développé dans la littérature scientifique. Néanmoins, le nombre de paquets R dédiés aux rb progresse régulièrement depuis ces dernières années. Dans ce chapitre, nous donnerons un aperçu des principaux logiciels disponibles, sans vouloir prétendre à l’exhaustivité. Nous nous concentrerons principalement sur les paquets les plus classiques de R qui traitent de l’apprentissage de structure, de l’estimation des paramètres de rb et des inférences que l’on peut réaliser.
5.1
Revue des paquets R
Plusieurs paquets R déposés sur le CRAN sont consacrés aux rb ; les versions utilisées dans ce livre sont portées entre parenthèses. On peut regrouper ces paquets en deux grandes catégories : ceux qui permettent l’apprentissage de structure et ceux qui ne le permettent pas ; quasiment tous donnant accès à l’estimation et à l’inférence. Les paquets bnlearn (version 3.6 ; Scutari, 2010), deal (version 1.2-37 ; Bøttcher & Dethlefsen, 2003), pcalg (version 1.1-6 ; Kalisch et al., 2012) et catnet (version 1.14.2 ; Balov & Salzman, 2013) se retrouvent tous dans la première catégorie. Le paquet bnlearn propose une très large variété d’apprentissages de structure (comprenant les trois classes couvertes dans cet ouvrage pour plusieurs tests d’hypothèse et plusieurs scores, également plusieurs estimateurs de paramètres (maximum de vraisemblance pour les données discrètes et continues, approche bayésienne pour les données discrètes) et plusieurs techniques d’inférence (validation
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 132 — #146
i
132
i
Réseaux bayésiens avec R
croisée, bootstrap, requêtes de probabilité conditionnelle et prédiction). C’est aussi le seul paquet qui conserve bien clairement une séparation entre la définition du dag et celles des probabilités locales de chaque nœud : deux classes différentes d’objets de R leur sont associées. Le paquet deal permet l’apprentissage de structure aussi bien que l’estimation des paramètres par une approche bayésienne. C’est l’un des rares paquets R qui manipule des rb combinant des nœuds discrets et continus par des distributions gaussiennes conditionnelles. Cependant, les variances des nœuds continus dépendent de leurs parents discrets et il n’est pas permis que les nœuds continus soient des parents de nœuds discrets. L’apprentissage de structure se réalise par une recherche gloutonne de type hill-climbing qui a été décrite dans l’algorithme 4.2, utilisant la densité postériore du réseau comme score et mettant en place des redémarrages aléatoires pour éviter le piège des maxima locaux. Le paquet pcalg fournit une implémentation libre de l’algorithme PC ; il est plus particulièrement conçu pour estimer et mesurer les effets causaux. Il accepte aussi bien des variables discrètes que des variables continues et peut inclure les effets de variables latentes dans le rb. Cela est obtenu par l’utilisation d’un algorithme PC modifié connu sous le nom de inférence causale rapide 1 , FCI, qui a été proposé pour la première fois par Spirtes et al. (2000). Le paquet catnet modélise des rb discrets à l’aide de techniques fréquentistes. L’apprentissage de structure se réalise en deux étapes. D’abord, l’ordre de nœuds du dag est appris des données par recuit simulé ; ou encore, c’est l’usager lui-même qui propose un ordre qui lui convient. Une recherche exhaustive est ensuite réalisée sur toutes les structures qui respectent cet ordre et la solution du maximum de vraisemblance est obtenue. L’estimation des paramètres et la prédiction sont aussi implémentées. En outre, une extension de cette approche pour des données mixtes (sous la supposition d’un mélange de distributions gaussiennes) est disponible sur le CRAN dans le paquet mugnet (version 1.01.3 ; Balov, 2013). Les paquets gRbase (version 1.6-12 ; Højsgaard et al., 2013) et gRain (version 1.22 ; Højsgaard, 2013) appartiennent à la seconde catégorie. Leur fonction est la manipulation des paramètres du réseau, la prédiction et l’inférence sous l’hypothèse que toutes les variables sont discrètes. Ni l’un ni l’autre ne réalise d’apprentissage de la structure et le rb doit donc d’abord être complètement spécifié. Le paquet rbmn (version 0.9-2 ; Denis, 2013) est uniquement consacré aux rbg linéaires, et plus particulièrement à la dérivation de formes analytiques pour la distribution jointe de l’ensemble des nœuds et les distributions conditionnelles de sous-ensembles de nœuds. Des fonctions de conversion depuis et pour les objets de bnlearn sont disponibles. Ce paquet ne propose aucun apprentissage de structure. Le tableau 5.1 récapitule les différences que nous venons d’évoquer.
1. En anglais Fast Causal Inference.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 133 — #147
i
Chapitre 5. Logiciels pour réseaux bayésiens
Variables discrètes Variables continues Var. discrètes et continues Appr. par contrainte Appr. par max. de score Appr. hybride Manipulation de structure Estimation de paramètres Prédiction Inférence approchée
i
133
bnlearn catnet deal pcalg gRbase gRain rbmn + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
Tableau 5.1 – Principales caractéristiques des paquets R présentés en §5.1.
Quelques indications plus précises vont maintenant être proposées sur chacun des paquets, sauf pour bnlearn et rbmn qui sont largement utilisés dans la suite de ce livre.
5.1.1
Le paquet deal
Le paquet deal réalise un apprentissage de structure en suivant pas à pas une approche bayésienne classique que nous allons illustrer à l’aide du jeu de données marks de §4.7. Tout d’abord, nous récupérons les données avec bnlearn et nous ajoutons la variable latente des deux groupes. Les données comprennent donc un mélange de variables discrètes et continues : > > > >
library(bnlearn) data(marks) latent net net ## 6 ( 1 discrete+ 5 ) nodes;score= 1 MECH continuous() 2 VECT continuous() 3 ALG continuous() 4 ANL continuous() 5 STAT continuous() 6 LAT discrete(2)
;relscore=
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 134 — #148
i
134
i
Réseaux bayésiens avec R
Ensuite, nous définissons une distribution priore peu informative sur net à l’aide de la fonction jointprior, dotée d’une taille d’échantillon imaginaire de 5. Le choix de cette taille influe sur les résultats trouvés : l’exercice 5.3 traite cette question : > prior net best mstring mstring [1] "[MECH|VECT:ALG][VECT|LAT][ALG|VECT:LAT][ANL|ALG:LAT] [STAT|ALG:ANL][LAT]" Comme nous pouvons remarquer dans la sortie ci-dessus, LAT est un nœud racine puisqu’il est le seul nœud discret et que donc les autres nœuds ne peuvent pas être ses parents. Dans la même veine, on peut aussi souligner que les deux paquets deal et bnlearn possèdent beaucoup de fonctions qui portent le même nom, il faut donc utiliser la notation :: pour expliciter le paquet duquel on veut utiliser la fonction. La fonction compare nous permet de vérifier que le dag qui vient d’être appris est très différent de celui trouvé en §4.7, que nous plaçons ici dans l’objet dag.bnlearn : > dag.bnlearn dag.deal unlist(bnlearn::compare(cpdag(dag.deal), cpdag(dag.bnlearn)))
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 135 — #149
i
Chapitre 5. Logiciels pour réseaux bayésiens
i
135
tp fp fn 2 3 7 où tp 2 est le nombre d’arcs communs, fp 3 est le nombre d’arcs présents dans le second dag mais pas dans le premier et fn 4 est le nombre d’arcs absents dans le second mais présents dans le premier, en prenant l’ordre des deux premiers arguments de la fonction compare du paquet bnlearn.
LAT
ANL
VECT
MECH
ALG
LAT
ANL
MECH
ALG
STAT
VECT
STAT
Fig. 5.1 – dag appris à partir du jeu de données marks avec deal (à gauche) et bnlearn (à droite) lorsque la variable latente du groupe a été ajoutée.
Les deux dag, dessinés en figure 5.1, ont même des cpdag sans aucun arc commun ! En fait, dag.deal est très semblable au rbg en bas à gauche de la figure 4.5, appris avant l’introduction de la variable latente LAT. Nous avons là un exemple supplémentaire du fait que des suppositions paramétriques différentes et des transformations de données peuvent affecter profondément les résultats de l’apprentissage de rb.
5.1.2
Le paquet catnet
Le paquet catnet divise aussi l’apprentissage de structure en quelques étapes, mais en suivant une perspective fréquentiste : il réalise l’apprentissage d’un dag qui 2. True positive. 3. False positive. 4. False negative.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 136 — #150
i
136
i
Réseaux bayésiens avec R
maximise le BIC et non pas la probabilité postériore. Suivant Friedman & Koller (2003), catnet repose sur l’idée que trouver le dag optimal est beaucoup plus facile une fois qu’un ordre topologique est accepté que de le rechercher sans cette contrainte. En conséquence, les étapes suivantes sont réalisées : 1. apprendre l’ordre topologique à partir des données, ou laisser l’usager le spécifier d’une manière ou d’une autre ; 2. apprendre la structure optimale du dag conditionnellement à cet ordre topologique. La première étape est réalisée par la fonction cnSearchSA par recuit simulé, ce que nous appliquons ci-dessous au jeu de données marks discrétisé de bnlearn. Cet apprentissage peut être adapté par plusieurs arguments optionnels comme le maximum de parents admissibles pour un nœud (maxParentSet et parentSizes), la complexité maximale du réseau (maxComplexity) et la probabilité priore d’inclusion de chaque arc (edgeProb) : > library(catnet) > dmarks ord ord Number of nodes = 6, Sample size = 88, Number of networks = 14 Processing time = 0.126 ord est un objet de classe catNetworkEvaluate, qui contient un ensemble de réseaux partageant l’ordre topologique appris et aussi d’autres quantités utiles. Nous pouvons y accéder de la manière suivante et explorer leurs propriétés à l’aide de diverses fonctions que fournit le paquet catnet : > nets nets[[1]] A catNetwork object with 6 nodes, 0 parents, Likelihood = -3.889193 , Complexity = 6 .
2
categories,
La seconde étape est réalisée par la fonction cnFindBIC, qui trouve le réseau ayant le meilleur score BIC parmi tous ceux stockés dans l’objet ord : > best best A catNetwork object with 6 nodes, 1 Likelihood = -2.97267 , Complexity =
parents, 11 .
2
categories,
Contrairement à deal, catnet fournit des fonctions pour investiguer à la fois le processus d’apprentissage mais aussi les réseaux estimés. Par exemple, il est possible
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 137 — #151
i
Chapitre 5. Logiciels pour réseaux bayésiens
i
137
de générer des échantillons aléatoires à partir de best, ce qui est bien commode pour réaliser une inférence approchée : > set.seed(1234) > cnSamples(best, 4) MECH VECT ALG ANL 1 [-0.077,38.5] (45.5,82.1] [14.9,47.5] [8.94,39.5] 2 (38.5,77.1] [8.93,45.5] (47.5,80.1] [8.94,39.5] 3 (38.5,77.1] (45.5,82.1] (47.5,80.1] (39.5,70.1] 4 (38.5,77.1] (45.5,82.1] (47.5,80.1] (39.5,70.1]
STAT LAT [8.93,45] B (45,81.1] B [8.93,45] A [8.93,45] A
Les noms de catégories un peu déroutants de ces observations sont l’héritage de la discrétisation opérée par la fonction discretize au moment de la création de dmarks. Une autre possibilité est l’extraction de l’ensemble des arcs de best grâce à la fonction cnMatEdges, ce qui permet d’importer le dag dans bnlearn : > em arcs(em) library(pcalg) > marks suffStat pc.fit pc.fit@graph A graphNEL graph with directed edges Number of Nodes = 5 Number of Edges = 7 Par conséquent, il est facile d’importer le dag dans bnlearn grâce à la fonction as.bn, ou de le manipuler et l’explorer directement par les fonctions des paquets graph et Rgraphviz.
MECH
VECT
MECH
VECT
ALG
ALG
●
ANL
ANL ●
● ●
STAT
STAT
Fig. 5.2 – Les graphes appris grâce à pcalg sur le jeu de données marks avec l’algorithme PC (à gauche) et FCI (à droite) quand la variable latente définissant les deux groupes n’est pas incluse. Cependant, l’algorithme FCI est préférable pour les données marks du fait de l’importance de la variable latente LAT. La syntaxe pour appeler la fonction fci est la même que celle de la fonction pc, ne différant que par quelques arguments optionnels qui ne sont pas utilisés ici :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 139 — #153
i
Chapitre 5. Logiciels pour réseaux bayésiens
i
139
> fci.fit data(boco) > round(head(boco), 1)
1 2 3 4 5 6
A 83 68 28 41 85 29
H W C TF LF AF TL LL AL TB LB AB 181.7 92.6 117 17.1 8.9 3.0 31.2 18.5 6.6 0.6 1.1 0.5 168.8 74.7 93 8.3 5.4 2.0 28.0 16.2 7.5 0.7 1.0 0.5 182.3 112.2 112 17.7 11.3 3.1 36.7 24.5 10.1 0.8 1.1 0.5 171.1 82.6 96 10.6 6.5 1.8 29.2 19.6 7.8 0.8 1.1 0.5 169.4 71.1 102 10.9 4.7 1.9 26.2 14.5 5.8 0.6 1.1 0.4 176.0 88.4 96 11.2 7.5 2.7 31.4 19.8 8.3 0.7 1.0 0.4
> boco$B print(dim(boco)) [1] 100
14
> n vr co set.seed(1234) > str dtr dva + > > > > + > > + > >
satua bn2 > > > + + + + >
library(rbmn) mn2 dsachs boot boot[(boot$strength > 0.85) & (boot$direction >= 0.5), ] from to strength direction 1 Raf Mek 1.000 0.5200000 23 Plcg PIP2 1.000 0.5170000 24 Plcg PIP3 1.000 0.5310000 34 PIP2 PIP3 1.000 0.5110000 56 Erk Akt 1.000 0.5680000 57 Erk PKA 0.994 0.5885312 67 Akt PKA 1.000 0.5860000 89 PKC P38 1.000 0.5120000 90 PKC Jnk 1.000 0.5110000 100 P38 Jnk 0.958 0.5062630 Un arc est considéré comme significatif s’il apparaît au moins dans 85% des réseaux, et ce dans la direction où il apparaît le plus souvent. Puisque toutes les valeurs de la colonne direction sont très proches de 0.5, nous en déduisons que les directions des arcs ne sont pas très bien établies. On peut vérifier que si l’on baisse le seuil de 85% à 50%, cela ne change en rien les résultats ; dans notre cas la détermination d’un seuil précis n’a pas trop d’importance. Maintenant que nous disposons de la significativité de tous les arcs, nous pouvons rechercher le réseau moyenné grâce à la fonction averaged.network, par exemple au seuil de 85% : > avg.boot avg.boot > + > + +
nodes = 0.5), ] > avg.start print(nrow(vstructs(avg.start))); [1] 0 > print(nrow(vstructs(avg.boot))); [1] 0 > avg.start all.equal(avg.boot, avg.start) [1] TRUE Mais aussi, il faut remarquer que les réseaux moyennés, tout comme les réseaux à partir desquels ils sont calculés, ne sont pas toujours complètement orientés. Et dans ce cas, il n’est pas possible de calculer complètement leurs scores. Cependant, nous pouvons identifier la classe d’équivalence à laquelle le réseau moyenné appartient (avec cpdag) et retenir l’un des dag qui y appartient (avec cextend) : > score(cextend(cpdag(avg.start)), dsachs, type = "bde", iss = 10) [1] -8498.877 Puisque tous les réseaux de la même classe d’équivalence ont le même score (s’il s’agit bien d’une fonction score équivalente), la valeur retournée par la fonction score est un résultat correct pour le reseau initial, partiellement orienté.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 169 — #183
i
Chapitre 6. Réseaux bayésiens en grandeur réelle
i
169
Nous pouvons aussi calculer les structures moyennées de réseau à partir des échantillons bootstrap en utilisant les algorithmes disponibles dans les paquets catnet, deal et pcalg. Pour cela, et pour faciliter l’interopérabilité, nous pouvons de nouveau utiliser la fonction custom.strength. En plus d’une liste d’objets bn, custom.strength accepte aussi une liste d’ensembles d’arcs, qui peuvent être créés avec des fonctions d’autres paquets, tout en retournant un data frame ayant les mêmes colonnes que ceux retournés par la fonction boot.strength. Par exemple, nous pouvons remplacer la recherche hill-climbing déjà utilisée par une recherche de recuit simulé implémenté dans catnet de la manière suivante : > > > > > + + + + + >
library(catnet) netlist all.equal(averaged.network(boot, threshold = 0.50), + averaged.network(boot, threshold = 0.70)) [1] TRUE C’est la même chose pour avg.catnet et avg.start. Cependant, ce n’est pas toujours le cas et c’est pourquoi il est important d’utiliser un niveau ayant une détermination statistique plutôt que d’utiliser une valeur sans justification. Une solution à cette détermination a été proposée par Scutari & Nagarajan (2011) ; elle est implémentée dans le paquet bnlearn comme valeur par défaut de l’argument threshold de la fonction averaged.network. Elle est donc utilisée ci-dessous puisque cet argument n’y est pas renseigné : > averaged.network(boot) Random/Generated Bayesian network model: [Raf][Plcg][Erk][PKC][Mek|Raf][PIP2|Plcg][Akt|Erk] [P38|PKC][Jnk|PKC][PIP3|Plcg:PIP2][PKA|Erk:Akt] nodes: 11 arcs: 9 undirected arcs: 0 directed arcs: 9 average markov blanket size: 1.64 average neighbourhood size: 1.64 average branching factor: 0.82 generation algorithm: significance threshold:
Model Averaging 0.958
La valeur du seuil se calcule alors comme suit. Si nous notons les forces des arcs stockées dans boot par p ˆ = {ˆ pi , i = 1, . . . , k} et que p ˆ (·) est p ˆ (·) = {0 6 pˆ(1) 6 pˆ(2) 6 . . . 6 pˆ(k) 6 1}, alors nous définissons la force de l’arc correspondant dans le réseau moyenné (inconnu) G = (V, A0 ) par ( 1 si a(i) ∈ A0 p˜(i) = 0 sinon, 8. En anglais significance threshold.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 172 — #186
i
172
i
Réseaux bayésiens avec R
c’est-à-dire l’ensemble des forces qui caractérisent tout arc comme étant significatif ou non significatif sans aucune incertitude. Exprimé autrement,
1.0
Seuil de Sachs
Seuil estimé
0.8 0.6 0.4 0.2
Arcs significatifs
0.0
Fonction de distributionn cumulée
p ˜ (·) = {0, . . . , 0, 1, . . . , 1}.
0.0
0.2
0.4
0.6
0.8
1.0
Force des arcs
Fig. 6.10 – Fonction de distribution des forces des arcs calculées par échantillonnage bootstrap sur les données dsachs. Les deux lignes verticales pointillées correspondent aux seuils de significativité estimé (en noir) et utilisé par Sachs (en gris).
Le nombre t d’éléments de p ˜ (·) qui sont égaux à 1 déterminent le nombre d’arcs dans le réseau moyenné ; c’est une fonction du seuil de significativité que nous voulons estimer. Une manière de faire est de trouver la valeur, tˆ, qui maximise la norme L1 Z (6.4) L1 t ; p ˆ (·) = Fpˆ (x) − Fp˜ (x ; t) dx (·)
(·)
entre la fonction de distribution de p ˜ (·) et p ˆ (·) ; on inclut alors tout arc tel que a(i) ∈ A0 ⇐⇒ pˆ(i) > Fpˆ−1 (tˆ) (·) dans le réseau moyenné. Cela revient à trouver le réseau moyenné dont l’ensemble des arcs est « le plus près » des forces des arcs calculées à partir des données, avec Fpˆ−1 (tˆ) servant de seuil de signification. (·) Pour le jeu de données dsachs, la valeur ainsi estimée est de 0.958 ; et donc, tout arc dont la valeur de la force est plus grande est considéré comme significatif. Le
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 173 — #187
i
Chapitre 6. Réseaux bayésiens en grandeur réelle
i
173
réseau moyenné résultant est similaire à celui que l’on a obtenu avec le seuil de 85% employé par Sachs et al. (2005). Comparé à avg.boot, seul l’arc P38 → Jnk manque, ce qui est une amélioration puisqu’il s’agissait d’un faux positif, non présent dans le dag validé, exhibé en figure 6.6. > unlist(compare(cpdag(dag.sachs), cpdag(avg.boot))) tp fp fn 9 1 8 > unlist(compare(cpdag(dag.sachs), cpdag(averaged.network(boot)))) tp fp fn 9 0 8 L’explication de l’insensibilité du réseau moyenné trouvé à la valeur du seuil apparaît dans le graphe de Fpˆ(·) reproduit en figure 6.10 : les arcs qui sont bien supportés par les données sont clairement séparés de ceux qui ne le sont pas, à l’exception de P38 → Jnk (qui présente une force de 0.958 comme seuil estimé). L’arc à la force la plus grande après P38 → Jnk est Plcg → Akt avec 0.328 ; en conséquence, tout seuil entre 0.958 et 0.328 produit le même réseau moyenné.
6.2.5
Traitement de données d’intervention
Le plus souvent, toutes les observations d’un échantillon sont obtenues suivant le même protocole. C’est en particulier vrai pour les données d’observation pour lesquelles l’attribution des traitements échappent au contrôle du chercheur ; c’est aussi vrai pour les données d’intervention ou données expérimentales, qui sont recueillies lors d’essais pilotés et randomisés. La conséquence est que toutes les données suivent la même distribution de probabilité et peuvent donc être modélisées par un rb unique. Mais ce n’est pas le cas lorsque plusieurs jeux de données proviennent de protocoles différents et que l’on veut les analyser en même temps. Il faut alors se placer dans le contexte d’une méta-analyse statistique (voir Kulinskaya et al., 2008, pour une introduction facile). Tout d’abord, les conditions expérimentales et autres facteurs exogènes peuvent être différents d’un jeu de données à l’autre. Mais aussi, les expériences peuvent être différentes en elles-mêmes ; par exemple, différents régimes de traitement et/ou différentes populations cibles. C’est exactement le cas des données de protéines-signal analysées par Sachs et al. (2005). En plus du jeu de données que nous venons d’analyser et qui n’est sujet qu’à une stimulation générale pour activer les voies de régulation, il y a aussi 9 autres jeux de données correspondant à des simulations et inhibitions spécifiques mises en place pour élucider les causalités du réseau. On les désigne souvent comme données d’intervention, puisque les valeurs de certaines variables ont été fixées par l’intervention externe du chercheur. En tout, les 10 jeux de données totalisent 5400 observations ; s’ajoute ainsi aux 11 niveaux de signal déjà répertoriés, la protéine d’intérêt qui est activée ou inhibée (INT), enregistrée pour chaque échantillon :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 174 — #188
i
174
i
Réseaux bayésiens avec R
> isachs wh dag.wh tiers bl dag.tiers INT nodes names(INT) + > + + + >
start fitted library(gRain) > jtree jlow querygrain(jtree, nodes = "Akt")$Akt Akt LOW AVG HIGH 0.6089 0.3104 0.0807 > querygrain(jlow, nodes = "Akt")$Akt Akt LOW AVG HIGH 0.6652 0.3333 0.0015 La légère inhibition de Akt en conséquence de l’inhibition de Erk est cohérente avec les deux directions de l’arc liant les deux nœuds et les expériences complémentaires réalisées par Sachs et al. (2005). En termes de causalité, le fait qu’un changement de Erk affecte Akt conforte l’existence d’un lien causal du premier vers le dernier. P(Akt)
sans intervention avec intervention
HIGH
PKA
HIGH
Akt
P(PKA)
AVG
LOW
sans intervention avec intervention
AVG
LOW
0.0
0.2
0.4
probabilité
0.6
0.2
0.4
0.6
probabilité
Fig. 6.12 – Distributions de probabilité de Akt et PKA avant et après l’inhibition de Erk, dans un contexte non causal. En ce qui concerne le nœud PKA, le réseau validé tout comme l’expérience supplémentaire conforte l’existence d’une relation causale de PKA à l’endroit de Erk. Donc des interventions sur Erk ne peuvent pas affecter PKA. D’un point de vue causal, toutes les interventions sur Erk bloqueraient toutes les influences biologiques des autres protéines parentes de Erk dans le dag :
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 179 — #193
i
Chapitre 6. Réseaux bayésiens en grandeur réelle > > > > >
i
179
causal.sachs names(which.max(querygrain(jlow, nodes = c("PKA"))$PKA)) [1] "LOW" Il est clair qu’une approche aussi simple n’est possible qu’à cause de la nature de l’évidence et du petit nombre de nœuds concernés. Quand de très nombreux
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 180 — #194
i
180
i
Réseaux bayésiens avec R
nœuds sont explorés simultanément, l’inférence sur leur distribution conditionnelle conjointe devient très rapidement difficile et coûteuse en calculs. Pour ces problèmes de grandes dimensions, les algorithmes spécialement conçus pour les requêtes MAP ou d’autres approches ad hoc sont préférables.
6.3
Lectures complémentaires
Il y a peu de livres dans la littérature décrivant des applications grandeur nature avec des rb, comme nous l’avons fait dans ce chapitre. Le lecteur intéressé pourra consulter Pourret et al. (2008) et Nagarajan et al. (2013), ainsi que les chapitres 5 et 11 de Korb & Nicholson (2004) et les chapitres 6, 7 et 8 d’Holmes & Jaim (2008). Les données qui y sont analysées couvrent différents champs d’application ; parmi eux le diagnostic médical, la génétique, l’enseignement, l’expertise médico-légale, la finance et les processus industriels.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 181 — #195
i
i
Pour conclure Réseaux bayésiens et statistique bayésienne Les différences et similarités entre réseaux bayésiens et statistique bayésienne ne sont souvent pas bien appréciées, et la confusion entraînée par le qualificatif commun persiste. C’est pourquoi nous avons jugé utile d’y consacrer un petit développement. La distinction première se trouve dans le terme statistique. Une procédure statistique permet de tirer de l’information, en le résumant, en réalisant des inférences, d’un jeu de données, dans le cadre d’un modèle probabiliste, explicite ou implicite. Un rb n’est rien d’autre qu’une façon efficace et puissante, car modulaire, de proposer un modèle probabiliste sur un ensemble de variables, mais sans obligatoirement impliquer de données. Cela bien posé, il est utile de cerner un peu plus en détail les origines de la confusion entre les deux approches. – Il est très commode de présenter la statistique bayésienne sous la forme d’un rb du type : (Paramètres)7→(Données). La distribution marginale du nœud vectoriel (Paramètres) est la distribution priore ; la distribution conditionnelle du nœud vectoriel (Données) est la vraisemblance ; et la distribution postériore n’est autre que la distribution de (Paramètres) conditionnellement à (Données). Une approche de statistique bayésienne se décrit donc naturellement par un réseau bayésien ; – Résoudre une requête pour un rb comme cela a été fait en §4.6.1, en fixant les valeurs de quelques nœuds, puis en mettant à jour les distributions de probabilité locales engendrées par ce nouveau contexte, n’est finalement rien d’autre que ce qui se fait en statistique bayésienne. Pour le voir, il suffit de considérer les données comme des nœuds que l’on fixe. C’est la réciproque de la proposition précédente ; – Mais aussi, le modèle probabiliste, en particulier la vraisemblance, utilisée pour réaliser un calcul statistique (qu’il soit bayésien ou non) peut être décrit comme un rb. C’est exactement ce que pratiquent des logiciels comme Jags que nous avons utilisés au chapitre 3 et présentés en §5.2 ; – Le rb n’est pas toujours connu au départ et peut être approché par un al-
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 182 — #196
i
182
i
Réseaux bayésiens avec R
gorithme d’apprentissage, en d’autres termes par une estimation statistique à partir de données. Nous l’avons détaillé en divers endroits de ce livre (§1.5, §2.5 et §4.5). Mais il est important d’être clair sur le fait que les modèles probabilistes utilisés lors d’approches statistiques peuvent être (et sont le plus souvent) définis sans le recours aux rb ; et aussi que l’apprentissage d’un rb à partir de données peut se pratiquer dans un contexte bayésien ou non ! Le lecteur intéressé par la statistique bayésienne trouvera facilement de nombreux ouvrages à consulter ; en langue française nous recommandons, entre autres, Robert (2006) et Parent & Bernier (2007).
Réseaux bayésiens : construction De tout ce qui précède, la construction d’un nouveau rb se décline assez naturellement en quelques étapes clef successives, même si comme tout processus de modélisation un certain nombre d’allers et retours se révéleront nécessaires. Réflexion préalable : bien que cette étape soit très souvent négligée car considérée implicite, c’est certainement la plus importante. Dans l’environnement qui est le sien, quel contexte voulons-nous retenir pour le phénomène modélisé ? Quelles restrictions simplificatrices sont-elles apportées ? Quels sont les facteurs dont on veut étudier les effets ? Quelles sont les différentes variabilités que l’on veut conserver ou négliger ? Quel spectre de conclusions possibles acceptons-nous ? En une phrase : de quelle information disposet-on et quelle utilisation projette-t-on pour que la construction du rb soit possible et pertinente ? Choix des variables, c’est-à-dire quels sont les nœuds dont sera muni le rb ? Là aussi, bien que souvent assez implicite, cette étape fait partie des fondements initiaux de la démarche. Oublier une variable intermédiaire clef peut obliger à une construction inutilement compliquée et sans doute peu efficace (cf. l’exemple des notes traité en §4.7). Peut-être faut-il aussi inclure des covariables dans l’espoir de simplifier la construction sur les variables d’intérêt, comme dans l’exemple de prédiction introduit en §6.1 ? Attention, retenir une variable, ce n’est pas simplement mentionner un nom, c’est attribuer une définition précise, comportant en particulier les unités physiques, et toute information nécessaire pour qu’une autre personne en fasse des observations adéquates : son univers aléatoire doit être compris dans la définition. Choix d’une structure, autrement dit, la construction du dag sur l’ensemble des variables retenues. Comme nous l’avons montré, deux grands extrêmes existent : (i) la construction par expertise, la connaissance disponible est suffisante pour déterminer les liens de parenté directs entre les nœuds, ou (ii) aucune connaissance a priori n’est envisageable et on doit se reposer
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 183 — #197
i
Conclusion
i
183
sur l’information extractible d’un jeu de données 9 . Bien sûr, les situations intermédiaires sont les plus fréquentes et il convient de conjuguer expertise préalable et données disponibles. La posture la plus logique serait une approche de statistique bayésienne, mais celle-là est extremement complexe pour les espaces discrets finis dans lesquels se meuvent les dag, et le plus opérationnel reste l’emploi d’heuristiques, en particulier l’usage de blacklists et de whitelists. Choix de distributions de probabilité : en fonction des choix précédents, être capable d’associer une distribution de probabilité locale à chaque nœud du réseau. Si l’on se restreint aux cas maîtrisés multinomial ou multinormal, il n’y a pas vraiment de choix 10 , sinon il y a beaucoup de choix... Et selon l’information disponible expertise et/ou données, il faut estimer les paramètres. Validation : malgré tout le soin apporté aux étapes précédentes, une construction de ce genre, basée sur l’assemblage de briques élémentaires, doit être validée. Le plus simple est sans doute la simulation de jeux de données dans différentes situations, dont certaines extrêmes, pour vérifier la tenue de route du modèle global. Il faut avouer que, tout comme la première, cette étape est souvent négligée, nous-mêmes ne l’avons pas bien mise en évidence.
Réseaux bayésiens : autres perspectives Dans cet ouvrage, nous avons délibérément opté pour la construction d’une modélisation probabiliste. La raison est que celle-là nous semble la seule à fournir toutes les clefs des mécanismes et de la compréhension des rb. En particulier, elle met bien en lumière la cohérence mathématique du cadre utilisé et le caractère probabiliste de l’approche. Mais d’autres partis pris auraient pu être proposés, d’ailleurs ce ne sont pas les travaux en probabilité ni en statistique qui ont été à l’origine du développement des réseaux bayésiens. Ce sont en fait des spécialistes en intelligence artificielle voulant mimer le raisonnement intelligent qui les ont mis en lumière. Cela explique l’usage de termes, peu orthodoxes pour un statisticien, comme apprentissage des paramètres, requête, instanciation d’une évidence. . . Cette démarche est bien cohérente avec la réalité des échanges humains ; tout traducteur sait bien qu’un mot peut rarement être bien compris sans le contexte dans lequel il est employé, approche de conditionnement donc. Les systèmes experts facilitant les diagnostics 11 sont aussi des applications idéales pour l’utilisation de probabilités conditionnelles successives. Les flores et les faunes basées sur des clefs de détermination ne sont rien 9. Sans oublier le casse-tête supplémentaire des dag équivalents. 10. Encore qu’il ne faille jamais négliger la possibilité de discrétisations ou encore de transformations monotones des variables continues ! 11. Principalement médicaux (Lauritzen & Spiegelhalter, 1988) mais pas seulement.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 184 — #198
i
184
i
Réseaux bayésiens avec R
d’autre que la description et l’utilisation de séquences particulières de conditionnements. Egalement le contrôle de qualité, en particulier industriel, est candidat naturel à une mise à jour continuelle où le passé récent doit pouvoir jouer un rôle déterminant. Moins avancées mais très prometteuses sont les applications en psychologie, sciences sociales et même juridiques 12 . Tels que nous les avons envisagés, les nœuds des réseaux bayésiens se définissent par une distribution de probabilité conditionnelle aux valeurs de leurs parents. Mais il n’y a pas de vraie difficulté à les étendre par des nœuds déterministes ; c’est même parfois très commode pour visualiser des résultats intermédiaires ou pratiquer un encodage plus explicite. Les logiciels bugs (cf. Lunn et al. (2012)) l’admettent très bien, à la seule condition qu’un nœud déterministe ne soit pas déclaré observé. Une autre généralisation que nous n’avons fait qu’aborder est celle des rb causaux. Dans ces réseaux, le sens du conditionnement n’est pas simplement utilisé pour définir une probabilité conjointe, il est associé à un mécanisme irréversible de cause à effet. La pluie induit la croissance de mon gazon, la croissance de mon gazon n’a aucun effet sur la pluviométrie bien que les deux soient corrélés. Nous conseillons fortement à nos lecteurs de bien réfléchir aux conclusions qu’ils peuvent tirer de leurs réseaux bayésiens, c’est-à-dire de bien analyser le fondement aléatoire sur lequel ils sont basés. . . faute de quoi, ils risqueraient de cuisantes déconvenues. L’analyse des données à la française des années 1960 et 1970 avait mis en exergue l’interprétation de tableaux rectangulaires où les individus (unités statistiques) étaient associés aux lignes et les variables (caractéristiques des individus) étaient associées aux colonnes. Les analyses brutes proposées ont été progressivement affinées en tenant compte de structures sur l’ensemble des individus : régressions à partir de covariables continues, analyses discriminantes à partir d’une covariable discrète, plus généralement les modèles linéaires généralisés multivariables. L’un des intérêts majeurs des réseaux bayésiens nous semble d’offrir le pendant sur les colonnes du tableau de données ; c’est l’optique utilisée dans l’exemple traité en §6.1. Tant que le nombre de variables restait faible, l’intérêt ne se faisait pas vraiment sentir, mais maintenant que de nombreux tableaux de données comportent bien plus de variables que d’individus (cf. §6.2), cela devient une nécessité. En sciences physiques classiques, les phénomènes sont très reproductibles car en conditions contrôlées, on peut ne faire varier, et donc mettre en évidence, que l’effet direct d’une ou de quelques causes. Les approches déterministes s’appliquent bien. En sciences biologiques et humaines, les choses ne sont pas si simples : trop de facteurs interviennent simultanément pour que l’on puisse les identifier. Le recours à des approches permettant l’incorporation d’un certain flou et laissant la 12. Anderson et al. (2005).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 185 — #199
i
Chapitre 6. Réseaux bayésiens en grandeur réelle
i
185
place à l’incertitude s’imposent. Les probabilités deviennent alors l’une des clefs du succès, et pour des raisons de simplification évidente, les réseaux bayésiens se révèlent efficaces. C’est ce que nous avons tenté de montrer. Il existe déjà d’autres ouvrages intéressants consacrés aux réseaux bayésiens rédigés en français, nous suggérons en particulier la lecture de Naïm et al. (2007). Il nous semble néanmoins que notre livre comble un manque en proposant au lecteur intéressé principalement par les applications une introduction progressive didactique du sujet. Ne lire et n’assimiler que les trois premiers, voire les deux premiers, chapitres peut s’avérer très fructueux. De la lecture de ce livre, il ressort clairement que si une panoplie de méthodes quasi complète a été développée pour les rb discrets multinomiaux numériques et les rbg linéaires, tout reste à faire en ce qui concerne les rb dits hybrides pour l’apprentissage de structure. Les notions théoriques proposées dans le chapitre 4 pour les cas connus suffisent à montrer que la tâche est loin d’être simple ! Les réseaux bayésiens représentent un outil formidable pour le modélisateur confronté à l’incertitude, qu’elle soit de nature aléatoire ou épistémique. Cependant, ils présentent certaines limites qui ne leur permettent pas d’accéder à tout type de situations. En particulier, ils supposent qu’un dag fixe sous-jacent existe. On peut très bien vouloir imaginer donner aussi aux arcs un statut aléatoire ! Plus encore dans le cas de processus temporels et/ou spatiaux, le nombre de nœuds n’est pas fixe, ni même borné : tout point du temps et de l’espace est une variable aléatoire potentielle. Bien entendu, si les problèmes théoriques soulevés sont très difficiles, les mises en œuvre pour des applications le seront encore plus. Mais nous sommes dans une ère où les volumes de données recueillies n’ont plus rien à voir avec celles qui étaient disponibles au moment des premières applications des rb et nous sommes bien persuadés que ces défis seront progressivement relevés. Nous pensons donc que des développements continueront d’émerger et que les réseaux bayésiens ou leurs successeurs ont de beaux jours devant eux.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 186 — #200
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 187 — #201
i
i
Annexe A
Théorie des graphes A.1
Graphes, nœuds et arcs
Un graphe G = (V, A) se compose d’un ensemble non vide V de nœuds (en anglais nodes ou vertices) et d’un ensemble fini (éventuellement vide) A de paires de nœuds dénommées arcs ou liens (en anglais arcs, links ou edges). Chaque arc a = (u, v) peut être défini soit comme une paire ordonnée ou non ordonnée de nœuds, qui sont dits connectés par et incidents de l’arc, ou encore adjacents l’un à l’autre. Ici, nous nous restreindrons aux graphes ayant au plus une connexion pour chaque paire de nœuds. Si deux nœuds sont adjacents, on les dit aussi voisins. Si (u, v) est une paire ordonnée, u est la queue (en anglais tail ) de l’arc et v sa pointe (en anglais head ) ; dans ce cas, on dit que l’arc est orienté (en anglais directed ) de u vers v et il est habituellement représenté par une flèche dont la pointe donne sur v (u → v). On dit aussi que l’arc sort de u et qu’il entre dans v. Si l’arc (u, v) n’est pas ordonné, on dit simplement que u et v sont incidents par cet arc, sans précision supplémentaire. Dans ce cas, on parle d’arc non orienté ou d’arête (en anglais undirected arc ou edge), noté e ∈ E et représenté par un simple segment (u − v). La caractérisation des arcs, orientés ou non, induit la caractérisation équivalente sur les graphes qui sont qualifiés de graphes orientés (en anglais directed graphs) (notés G = (V, A) si tous les arcs sont orientés) de graphes non orientés (en anglais undirected graphs) (noté G = (V, E)) si tous les arcs ne sont pas orientés, enfin de partiellement orientés ou graphes mixtes (en anglais partially directed ou mixed graphs) (notés G = (V, A, E)) si des arcs orientés et non orientés sont simultanément présents.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 188 — #202
i
188
i
Réseaux bayésiens avec R
D
A
C
C
A
C
D
B
A
E
E
D B
B
E
Fig. A.1 – Un graphe non orienté (à gauche), un graphe orienté (au centre) et un graphe partiellement orienté (à droite).
La figure A.1 montre un exemple de chacune de ces classes de graphe. Le premier graphe à gauche est un graphe non orienté dans lequel : – l’ensemble des nœuds est V = {A, B, C, D, E} et l’ensemble des arêtes est E = { (A − B), (A − C), (A − D), (B − D), (C − E), (D − E) } ; – les arcs non orientés, comme par exemple A − B ou B − A, sont équivalents et identifient la même arête ; – et aussi, A est connecté à B, B est connecté à A, et A et B sont adjacents. Le deuxième graphe au centre est un graphe orienté, contrairement au graphe précédent : – ce graphe orienté est caractérisé par l’ensemble des arcs A = {(A → B), (C → A), (D → B), (C → D), (C → E)} à la place d’un ensemble d’arêtes E, bien que l’ensemble des nœuds V soit bien le même que précédemment ; – les arcs sont orientés, en conséquence A → B et B → A désignent des arcs différents ; A → B ∈ A tandis que B → A 6∈ A. De plus, il n’est pas possible que ces deux arcs appartiennent en même temps au graphe puisqu’il ne peut pas y avoir plus d’un arc entre deux nœuds ; – mais en revanche, A et B sont adjacents, puisqu’il y a un arc (A → B) qui va de A vers B. A → B est un arc sortant de A (la queue), un arc entrant de B (la pointe) et un arc incident pour A comme pour B. Le troisième graphe à droite est un graphe mixte ; il se caractérise par la combinaison d’un ensemble d’arêtes E = {(A − C), (A − D), (C − D)} et d’un ensemble d’arcs A = {(D → E), (D → B), (E → B)}. Un graphe non orienté peut toujours être construit à partir d’un graphe orienté ou partiellement orienté en substituant tous les arcs par des arêtes ; un tel graphe est appelé squelette (en anglais skeleton) ou encore graphe non orienté sous-jacent du graphe originel.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 189 — #203
i
Annexe A. Théorie des graphes
A.2
i
189
La structure d’un graphe
La disposition de l’ensemble des arcs dans un graphe se dénomme soit la structure du graphe, soit la configuration des arcs. Dans le contexte de ce livre, on suppose que les nœuds des arcs sont distincts, c’est-à-dire que l’on ne peut pas avoir (u → u) (de tels arcs s’appellent des boucles (en anglais loops) et aussi qu’il y a au plus un arc entre deux nœuds (et donc la paire (u, v) ne peut identifier qu’un seul arc). La structure la plus simple est celle du graphe vide (en anglais empty graph), il n’y a aucun arc dans le graphe ; à l’autre extrême se trouvent les graphes saturés (en anglais saturated graphs), dans lesquels chaque nœud est connecté à chacun des autres nœuds. Les graphes intermédiaires sont dits creux (en anglais sparse) s’ils ne comprennent que très peu d’arcs par rapport au nombre de nœuds, ou encore denses (en anglais dense) si c’est l’inverse ; bien que la distinction entre ces deux classes soit plutôt imprécise, on considère communément qu’un graphe est creux si O(|E| + |A|) = O(|V|). La structure d’un graphe détermine ses propriétés. Parmi les plus importantes, figurent celles qui traitent des chemins (en anglais paths), séquences d’arcs ou d’arêtes connectant deux nœuds dénommés nœuds extrêmes. Les chemins sont orientés pour les graphes orientés et non orientés pour les graphes non orientés ; ils sont décrits par la séquence des nœuds incidents (v1 , v2 , . . . , vn ) du chemin. Les arcs du chemin sont supposés n’être utilisés qu’une seule fois, ce qui n’est une contrainte que pour les graphes non orientés ou les graphes cycliques. Pour les graphes orientés, on suppose également que tous les arcs d’un chemin sont orientés de la même manière le long du chemin ; on dit alors que le chemin va de v1 (la queue du premier arc) à vn (la pointe du dernier arc). Pour les autres types de graphes (ou lorsque l’on ne s’intéresse qu’au squelette), les arcs du chemin peuvent avoir n’importe quelle orientation ou ne pas être orientés. Les chemins tels que v1 = vn sont des cycles. Le graphe d’un réseau bayésien ne doit pas contenir de cycle.
G
Parents Ancêtres
E
C
L
Enfants
A F
B
Voisins
D
K
Descendants
H
Fig. A.2 – Parents, enfants, ancêtres, descendants et voisins du nœud A dans un graphe orienté.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 190 — #204
i
190
i
Réseaux bayésiens avec R
La structure d’un graphe orienté définit un ordre partiel sur les nœuds si le graphe est acyclique, c’est-à-dire s’il ne contient aucun cycle ou aucune boucle. Dans ce cas, le graphe est un graphe orienté acyclique (en anglais, directed acyclic graph = dag). Cet ordre est appelé acyclique ou topologique et est induit par l’orientation des arcs. La relation d’ordre se définit par : {∃ un chemin de vi vers vj } ⇒ {vi ≺ vj }
(A.1)
donc quand un nœud vi précède vj , il ne peut pas y avoir un chemin qui part de vj et aboutit à vi . Selon cette définition, les premiers nœuds sont les nœuds racines, qui n’ont pas d’arc rentrant, et les derniers sont les nœuds feuilles, qui ont un arc entrant mais pas d’arc sortant. Mais aussi, s’il y a un chemin allant de vi à vj , vi précède vj dans la séquence des nœuds ordonnés. Enfin vi est appelé ancêtre de vj et vj est appelé descendant de vi . Si le chemin est composé d’un seul arc, par analogie, vi est un parent de vj qui est son enfant. Considérons, par exemple, le nœud A dans le dag de la figure A.2. Ses voisins sont l’union de ses parents et de ses enfants ; les nœuds adjacents tombent forcément dans l’une de ces deux catégories. Ses parents sont aussi des ancêtres puisqu’ils précèdent le nœud A dans l’ordre topologique. De manière similaire, les enfants sont aussi des descendants. Deux exemples d’ordre topologique induit par cette structure du graphe sont ({F, G, H}, {C, B}, {A}, {D, E}, {L, K}) et ({F}, {B}, {G}, {C}, {A, H}, {E}, {L}, {D}, {K}) . Effectivement, les nœuds ne sont que partiellement ordonnés ; par exemple, aucun ordre ne peut être établi entre les nœuds racines ou entre les nœuds feuilles. Dans les deux ordres proposés ci-dessus, les nœuds entre accolades peuvent être permutés de toutes les manières possibles, et la proposition (A.1) sera toujours vérifiée pour le dag de la figure A.2. Finalement, en pratique, un ordre topologique issu d’un dag se définit sur un ensemble d’ensembles non ordonnés de nœuds, notés Vi = {vi1 , . . . , vik }, qui définissent une partition de V. Pour la plupart des dag, il existe plusieurs ordres topologiques.
A.3
Lectures complémentaires
Pour une présentation complète des propriétés des graphes orientés et mixtes, nous renvoyons le lecteur à la monographie de Bang-Jensen & Gutin (2009) qui, pour l’instant, est la référence la plus complète sur le sujet. Pour les graphes non orientés, nous renvoyons au livre classique de Diestel (2005).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 191 — #205
i
i
Annexe B
Distributions de probabilités B.1
Généralités
Une distribution de probabilité est une fonction qui assigne une probabilité à tout sous-ensemble mesurable d’un ensemble d’événements. Une distribution de probabilité discrète est basée sur un ensemble de dimension finie ou infinie dénombrable de valeurs U, tel que {A, B, C, D} ou {[0, 5], (5, 7], (8, 10]} ou n ∈ N, et se caractérise par une fonction de probabilité Pr(·) qui respecte les propriétés suivantes X Pr(X = u) = 1 et Pr(X = u) ∈ [0, 1] pour tout u. u∈U
Une distribution de probabilité continue est associée à un nombre infini non dénombrable de valeurs U, le plus souvent R ou un intervalle R, et se caractérise par une fonction de densité f(·) telle que Z f(X = u)du = 1 et f(X = u) > 0 pour tout u. U
Pr(u) et f(u) sont souvent utilisées comme notation générique quand il n’y a pas d’ambiguïté sur la variable aléatoire concernée ; sinon on emploie les notations plus explicites PrX (u) et f X (u). Mais parfois, la distinction entre distributions discrète et continue n’a pas d’importance et nous utiliserons simplement Pr(·) au lieu de f(·). Notons que Pr(u) 6 1, mais f(u) n’a pas ce genre de contrainte et peut prendre une valeur positive sans limite supérieure. Notons aussi que les points ont une mesure nulle et ont donc une probabilité d’occurrence nulle ; dans le cas des distributions continues, il faut au moins un intervalle pour obtenir une probabilité
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 192 — #206
i
192
i
Réseaux bayésiens avec R
positive. On dit que X suit ou est distribué comme une certaine distribution de probabilité, ce qui se note par X ∼. La sommation de Pr(·) sur U ou sur l’un de ses sous-ensembles produit beaucoup de valeurs qui sont extrêmement utiles pour interpréter la distribution quand U est ordonnée. C’est, par exemple, le cas pour les variables aléatoires définies sur N et bien sûr pour les variables continues sur R. Quelques exemples sont : – la fonction de distribution cumulée, F (u∗ ) =
X
Pr(u) ou F (u∗ ) =
u∗
Z
Pr(u)du, −∞
u6u∗
qui n’est rien d’autre que la probabilité d’obtenir une valeur inférieure ou égale à u∗ . C’est simplement la fonction inverse de la fonction quantile Q(p) = u ⇐⇒ F (u) = p. F (·) est le plus souvent estimée à partir d’un échantillon observé x1 , . . . , xn par la fonction de distribution cumulée empirique n
1X 1(xi 2. De fait, il s’agit d’un vecteur aléatoire qui est caractérisé par la distribution conjointe ou jointe de ses composantes qui sont aléatoires, X = [X1 X2 · · · Xk ], sur chacune de ses dimensions. Dans ce cas, les intégrales et les sommations que nous avons utilisées sont toujours valables mais elles doivent être définies sur les k dimensions. Par exemple, l’espérance de X est un vecteur de dimension k, E(X) = [E(X1 ) E(X2 ) · · · E(Xk )], et sa variance est remplacée par une matrice de variance-covariance de dimension k×k VAR(X1 ) COV(X1 , X2 ) · · · COV(X1 , Xk ) COV(X2 , X1 ) VAR(X2 ) · · · COV(X2 , Xk ) COV(X) = .. .. .. .. . . . . COV(Xk , X1 ) COV(Xk , X2 ) · · · VAR(Xk ) où COV(Xi , Xj ) = E(Xi Xj ) − E(Xi ) E(Xj ) n’est autre que la covariance entre Xi et Xj ; bien sûr, COV(Xi , Xi ) = VAR(Xi )P et COV(Xi , Xj ) = COV(Xj , Xi ). n L’estimateur empirique de COV(Xi , Xj ) est n1 l=1 (xli − xi )(xlj − xj ), où xli est la le observation de Xi et xlj est la le observation de Xj . Une quantité apparentée, plus facile à interpréter, est la corrélation qui se définit par COV(Xi , Xj ) p COR(Xi , Xj ) = p VAR(Xi ) VAR(Xj ) et s’estime grâce aux estimations empiriques des variances et covariances. La transformation affine univariable de l’équation (B.1) se généralise en utilisant un vecteur b de dimension h × 1 et une matrice A de dimension h × k E(AX + b) = A E(X) + b et
COV(AX + b) = A COV(X)AT .
(B.2)
La distribution de chacune des composantes Xi de X peut être étudiée en ellemême sans tenir compte de ses relations avec les autres composantes ; il s’agit alors de la distribution marginale de Xi . Elle s’obtient à partir de la distribution de X en sommant ou en intégrant sur toutes les valeurs possibles des autres composantes,
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 194 — #208
i
194
i
Réseaux bayésiens avec R
Uj , j 6= i de Xj , j 6= i : Pr(Xi ) =
X
···
X
Z
Z
U1
··· Ui−1
X
Pr(X),
uk ∈Uk
Z
···
Pr(Xi ) =
···
ui−1 ∈Ui−1 ui+1 ∈Ui+1
u1 ∈U1
Z
X
Ui+1
Pr(X)dX. Uk
On peut étendre sans peine cette définition pour obtenir la distribution à plus d’une des composantes ; la sommation est réalisée de la même manière, mais seulement sur les composantes de X que l’on ne veut pas considérer. Un autre type de distributions d’intérêt pour une composante Xi est la distribution conditionnelle, c’est-à-dire une distribution de Xi quand les valeurs d’autres composantes Xj1 , . . . , Xjm de X sont fixées à des valeurs spécifiques. On l’obtient de la manière suivante : Pr(Xi = ui | Xj1 = uj1 ,. . . ,Xjm = ujm ) =
Pr(Xi = ui , Xj1 = uj1 , . . . , Xjm = ujm ) . Pr(Xj1 = uj1 , . . . , Xjm = ujm )
Là encore, l’extension de cette définition à plus d’une composante ne demande que l’ajout des variables associées dans l’expression du numérateur.
B.3
Distributions discrètes
Les distributions discrètes le plus souvent utilisées dans les rb sont les distributions binomiales et multinomiales, et nous leur donnerons la place principale. Cependant, comme cela a été montré dans le chapitre 3, toute distribution peut être utilisée dans le cas général et nous mentionnerons aussi d’autres distributions qui peuvent être importantes dans la pratique.
B.3.1
Distribution binomiale
La distribution binomiale modélise le nombre de succès dans une suite de n expériences indépendantes limitées à deux possibilités ; chaque expérience peut produire un résultat positif (souvent associé au succès) avec la même probabilité p. Elle est souvent notée Bi (n, p) et sa fonction de probabilité est : n x Pr(X = x) = p (1 − p)(n−x) , n ∈ N, x ∈ {0, . . . n}, p ∈ [0, 1]. (B.3) x Quand p = 0 (ou p = 1), la distribution est dégénérée dans le sens où X ne peut prendre que la valeur 0 (ou n). L’espérance et la variance se calculent facilement : E(X) = np et
VAR(X) = np(1 − p).
(B.4)
Et donc, lorsque n est fixé, la variance est maximum pour p = 12 , alors qu’elle tend vers 0 quand p tend vers 0 ou vers 1.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 195 — #209
i
Annexe B. Distributions de probabilités
i
195
L’estimateur du maximum de vraisemblance de p est simplement pˆ = nr , la proportion des succès sur les essais. Un tel estimateur pose des problèmes lorsque r = 0 (ou r = n), comme cela a été discuté en §1.4.
B.3.2
Distribution multinomiale
La distribution multinomiale est l’extension multivariable de la binomiale. Elle se présente lorsqu’à chaque expérience individuelle correspondent trois ou plus possibilités différentes, et non plus deux comme dans le cas d’une binomiale. D’ailleurs, on peut voir la distribution binomiale comme une distribution multivariable de deux composantes que sont le nombre de succès et le nombre d’échecs ; mais comme la fréquence de l’un est équivalente à la fréquence de l’autre lorsque n, le nombre d’expériences, est connu, il est inutile puisque redondant de l’introduire comme une distribution multivariable. Tout comme pour la binomiale, il s’agit d’une distribution catégorielle si les différentes possibilités ne sont pas naturellement ordonnées. Soit une séquence de n essais indépendants, chacun ayant les probabilités identiques p = (p1 , . . . , pk ) pour les k possibilités, le vecteur des fréquences associées X = (X1 , . . . , Xk ) suit une distribution multinomiale, ce que l’on note Mu(n, p). La fonction de probabilité est : Pr(X = x) =
n! px1 px2 · · · pxkk , x1 !x2 ! · · · xk ! 1 2
n ∈ N,
X i
xi = n,
X
pi = 1.
(B.5)
i
Il est important de remarquer que même si chacun des Xi est une variable aléatoire qui suit une Bi (n, pi ), X1 , . . . , Xk ne sont pas indépendants par le seul fait que leur somme est n. Ils sont donc négativement corrélés (COR(X i , Xj ) < 0) et la matrice P de covariance n’est pas de plein rang puisque VAR( i Xi ) = 0. Plus précisément, E(X) = np et VAR(X) = n diag(p) − ppT , (B.6) où diag(p) est la matrice diagonale qui a le vecteur p sur sa diagonale.
B.3.3
Autres distributions courantes
Distribution de Bernoulli La distribution de Bernoulli, Ber (p), est le cas particulier de la binomiale Bi (n, p) lorsque n = 1. Distribution de Poisson La distribution de Poisson peut se dériver à partir de la distribution binomiale. Considérons une espèce animale rare vivant dans une région particulière. Si nous supposons que ses représentants se répartissent au hasard dans cette région et que nous la divisons en N zones, lorsque N est assez grand, la probabilité que plus d’un animal se trouve dans l’une des zones est négligeable. Chaque zone ne comporte
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 196 — #210
i
196
i
Réseaux bayésiens avec R
donc qu’un animal (succès) ou zéro animal (échec), le nombre total d’animaux peut alors (du fait de l’hypothèse de répartition au hasard ) se modéliser par une Bi (N, p) où la probabilité p dépend du nombre de zones. Il est donc naturel de λ penser qu’il est de la forme p = N . Il se passe que, quand N → ∞, λ Bi N, → Pois(λ), N où Pois(λ) est la distribution de Poisson et λ s’interprète comme la densité des animaux dans la région. La fonction de probabilité de Pois(λ) est : Pr(X = x) =
λx e−λ , x!
x ∈ N, λ > 0,
et son espérance comme sa variance sont égales à λ : E(X) = λ et
B.4
VAR(X) = λ.
Distributions continues
La distribution gaussienne ou normale joue un rôle central parmi les distributions continues. Tout comme la distribution binomiale, elle se généralise commodément en distribution multivariable. Quelques indications sur l’estimation de ses paramètres sont proposées en §B.2. Nous introduirons aussi la distribution bêta (et son extension multivariable) à cause de sa parenté étroite avec la distribution binomiale (et multinomiale).
B.4.1
Distribution normale
La densité d’une distribution normale ou gaussienne s’écrit : 1 1 2 2 √ x, µ ∈ R, σ 2 > 0. Pr(x; µ, σ ) = exp − 2 (x − µ) , 2 2σ 2πσ Elle se note N (µ, σ 2 ). Des calculs simples montrent que les deux paramètres µ et σ 2 s’interprètent directement puisque E(X) = µ et
VAR(X) = σ 2 .
Quand µ = 0 et σ 2 = 1, la variable aléatoire associée suit une distribution normale ∼ N (0, 1). Il faut aussi remarquer standardisée, et il assez facile de voir que X−µ σ que si X est défini sur R tout entier, et donc peut prendre théoriquement n’importe quelle valeur entre −∞ et +∞, puisque sa fonction de densité y est strictement positive, seule une partie de la densité est concernée puisque Pr (X 6∈ [µ − 4σ, µ + 4σ]) < 5.10−5 .
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 197 — #211
i
Annexe B. Distributions de probabilités
B.4.2
i
197
Distribution normale multivariable
La généralisation multivariable de la distribution normale s’appelle normale multivariable, multinormale ou encore distribution gaussienne multivariable. La fonction de densité qui lui est associée s’écrit : 1 1 T −1 exp − (x − µ) Σ (x − µ) , x, µ ∈ Rk , (B.7) Pr(x; µ, Σ) = p 2 2π det(Σ) où µ est le vecteur de dimension k × 1 de l’espérance et Σ est une matrice de dimension k × k positive semi-définie des variances-covariances. La distribution se note Nk (µ, Σ). Un vecteur aléatoire multinormal vérifie un certain nombre de propriétés intéressantes, en particulier celles listées ci-dessous : 1. Toute transformation affine du vecteur est encore un vecteur multinormal. Plus précisément, soit b un vecteur de dimension h et A une matrice de dimension h × k : X ∼ Nk (µ, Σ) =⇒AX + b ∼ Nh b + Aµ, AΣAT . La sélection d’un sous-ensemble de composantes peut s’exprimer comme une transformation affine particulière ; en l’appliquant, on trouve que tout sousensemble de composantes de X suit une distribution multinormale d’espérance et de variance obtenues à partir de l’espérance et de la variance globales, simplement en éliminant les composantes non considérées. 2. La distribution d’un sous-ensemble A de composantes de X conditionnellement à un autre sous-ensemble B de composantes distinctes de X est aussi une distribution multivariable normale caractérisée par l’espérance et la matrice de variance-covariance suivantes : µA|B = µA + ΣAB Σ−1 BB (xB − µB ) ΣA|B = ΣAA − ΣAB Σ−1 BB ΣBA
(B.8)
où
µA µ= µB
ΣAA et Σ = ΣBA
ΣAB . ΣBB
Remarquons que l’équation (B.8) suppose implicitement que ΣBB est de plein rang, c’est-à-dire qu’il n’y a aucune redondance entre les variables conditionnantes : elles sont linéairement indépendantes. Théoriquement, ce n’est pas un point insurmontable puisque des variables redondantes peuvent être éliminées sans changer la nature du problème. Cependant, d’un point de vue pratique, il est souvent très difficile de connaître numériquement le rang d’une matrice (même si l’on sait qu’elle ne peut pas être négative).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 198 — #212
i
198
B.4.3
i
Réseaux bayésiens avec R
Autres distributions courantes
Deux distributions usuelles sont reliées à la distribution normale univariable : la distribution du t de Student et la distribution du χ2 (khi-deux ). Les distributions bêta et de Dirichlet sont aussi présentées car ce sont des distributions conjuguées (cf. §B.5) des distributions binomiale et multinomiale. Distribution du khi-deux La distribution du χ2 peut être présentée comme la somme des carrés de ν variables aléatoires standardisées indépendantes. ν est le seul paramètre de cette distribution et on l’appelle nombre de degrés de liberté ; la distribution est notée χ2ν . On en déduit immédiatement que la somme de deux variables aléatoires indépendantes, chacune suivant une distribution de χ2 , respectivement de ν1 et ν2 degrés de liberté, suit également une distribution de χ2 comprenant ν1 + ν2 degrés de liberté. Si X ∼ χ2ν , son espérance et sa variance sont : E(X) = ν
et
VAR(X) = 2ν.
(B.9)
Cette distribution peut se généraliser par l’introduction d’un paramètre de noncentralité induit par des variables aléatoires normales non centrées, mais toujours de variance unité. Plus précisément, soit : X=
ν X
Ui2 où les Ui sont indépendantes N (µi , 1),
i=1
alors X ∼ ncχ2ν (λ) avec λ =
Pν
i=1
µ2i . Les équations (B.9) se généralisent par : E(X) = ν + λ,
VAR(X) = 2(ν + 2λ), E [X − E(X)]3 = 8(ν + 3λ). On peut aussi montrer que la distribution de χ2 est un cas particulier de la distribution gamma, ce qui généralise la distribution dans le sens où le paramètre ν peut alors prendre des valeurs non entières, mais toujours strictement positives. Distribution du t de Student Le besoin de la distribution de Student apparaît lorsque l’on standardise une variable aléatoire à l’aide d’une estimation indépendante de sa variance. On peut l’introduire comme le rapport d’une variable aléatoire normale standardisée et de la racine carrée d’une variable aléatoire indépendante qui suit une distribution de χ2ν . Le seul paramètre de cette nouvelle distribution est le nombre de degrés de liberté du χ2 , ν ∈ N+ . Sa fonction de densité est symétrique autour de zéro et en forme de cloche comme celle d’une normale, la principale différence réside
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 199 — #213
i
i
Annexe B. Distributions de probabilités
199
dans l’épaisseur des queues de distribution, d’autant moins différentes que ν est grand. En effet, pour de grandes valeurs de ν, une variable aléatoire de Student est très bien approchée par une N (0, 1). Quand ν > 2, l’espérance et la variance sont respectivement : E(X) = 0 et
VAR(X) =
ν . ν−2
Tout comme pour la distribution de χ2 , un second paramètre de non-centralité s’introduit pour généraliser la distribution. Distribution bêta La distribution bêta, que l’on note Beta(a, b), est un choix courant pour une variable aléatoire limitée à l’intervalle [0, 1]. Sa fonction de densité est : Pr(x; a, b) =
Γ(a + b) a−1 x (1 − x)b−1 , Γ(a)Γ(b)
a, b > 0, x ∈ [0, 1],
similaire à la densité de la binomiale lorsque a, b ∈ N+ puisque Γ(n) = (n − 1)! lorsque n ∈ N. Dans ce cas, a joue le rôle de x, b joue le rôle de n − x et x celui de p dans l’équation (B.3). Cela est dû au fait qu’il s’agit de la distribution conjuguée (voir §B.5) dans le cadre du modèle bêta-binomial en statistique bayésienne. L’espérance et la variance sont : E(X) =
a a+b
et
VAR(X) =
ab . (a + b)2 (a + b + 1)
Cette distribution est très flexible quand les deux paramètres, a et b, varient. Elle se transpose très facilement à n’importe quel intervalle fini de R non ponctuel, [u, v], par la transformation affine : u + (v − u)X où u < v ∈ R. Distribution de Dirichlet La distribution de Dirichlet est une généralisation multivariable de la distribution bêta, tout comme la multinomiale est la généralisation de la distribution binomiale. Par exemple, une Dirichlet de deux composantes n’est rien d’autre qu’une distribution bêta, les deux composantes sommant à 1 ; la dernière n’est pas indiquée. Souvent, cette distribution se note Dir(a), a = (a1 ,P a2 , . . . , ak ), et sa fonction de densité est, pour tout 0 ≤ xi ≤ 1, 1 ≤ i ≤ k tels que i xi = 1 : Pr(X
= x) =
P Γ( i ai ) xa1 xa2 · · · xakk , Γ(a1 )Γ(a2 ) · · · Γ(ak ) 1 2
a1 , . . . , ak
> 0.
Comme nous l’avons vu pour la bêta et la binomiale, il existe une forte similarité entre la Dirichlet et la multinomiale : xi joue le rôle de pi et ai joue le rôle de xi
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 200 — #214
i
200
i
Réseaux bayésiens avec R
P dans l’équation (B.5). En notant la somme des paramètres A = i ai , l’espérance et la variance sont : 1 1 1 T E(X) = a et VAR(X) = diag(a − aa ) . A A(1 + A) A Dans le cadre de la statistique bayésienne, la Dirichlet est la conjuguée (voir §B.5) du paramètre vectoriel p de la distribution multinomiale. D’autres propriétés sur cette distribution pourront être trouvées dans Albert & Denis (2012).
B.5
Distributions conjuguées
Dans les développements précédents, a été mentionnée plusieurs fois la conjugaison de deux distributions. Dans cette section, nous voudrions expliciter très brièvement cette notion qui a son origine dans la recherche d’une distribution postériore à partir d’une distribution priore et de la vraisemblance utilisée pour des données en statistique bayésienne. Soient deux variables aléatoires, A et B, dont la distribution conjointe est définie par les distributions marginale et conditionnelle : Pr(A, B) = Pr(A) Pr(B | A). Quand la distribution conditionnelle Pr(A | B) appartient à la même famille que Pr(A), alors on dit que Pr(A) est la conjuguée de Pr(B | A). L’un des exemples les plus simples est celui du couple bêta-binomial : – si p ∼ Beta(a, b) et (r | p) ∼ Bi (n, p), – alors (p | r) ∼ Beta(a + r, b + n − r). Il se généralise immédiatement au couple Dirichlet-multinomial : – si p ∼ Dir (a) et (r | p) ∼ Mu(n, p), – alors (p | r) ∼ Dir (a + r), où p, a et r sont des vecteurs de même dimension. Le gros avantage de la conjugaison est de disposer d’une forme analytique des distributions conditionnelles.
B.6
Lectures complémentaires
La littérature scientifique comporte de très nombreux livres sur la théorie des probabilités à différents niveaux de complexité. Pour un livre introductif, récapitulant les principales distributions, nous pouvons citer Ross (2007, 2012), Saporta (2006) et Barbe & Ledoux (2007). Parmi les livres offrant une perspective plus théorique se trouvent DeGroot & Scherivsh (2012), Ash (2000), Feller (1968). Loève (1977) propose une dérivation complète de la théorie des probabilités à partir de celle de la mesure. Enfin, comme excellente référence et source de nombreux résultats, il convient de citer la série des livres initiés par Johnson et Kotz : Kotz et al. (2000), Johnson et al. (1994, 1995, 1997, 2005).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 201 — #215
i
i
Annexe C
Glossaire Dans ce glossaire, nous avons rassemblé quelques termes techniques qui reviennent assez souvent dans les différents chapitres. Pour les termes concernant les graphes, le lecteur pourra aussi consulter l’annexe A, courte introduction à la théorie des graphes. Ancêtre : un ancêtre d’un nœud est un nœud qui le précède dans un chemin orienté, et donc suivant l’ordre topologique du graphe. Arbre : un arbre est un graphe non orienté dans lequel chaque paire de nœuds est connectée par un seul chemin. Un graphe non orienté connexe sans cycle est un arbre. Arc : un arc est un lien orienté entre deux nœuds, normalement supposés distincts. Les nœuds reliés par un arc entretiennent une relation parent-enfant : le nœud au départ de l’arc est le nœud parent, le nœud à la pointe de l’arc est le nœud enfant. Parfois, l’expression « arc non orienté » est utilisée en place d’arête pour désigner un lien non orienté entre deux nœuds. Arête : une arête est un lien non orienté entre deux nœuds. Quelquefois, on trouve le terme « arête orientée » pour désigner un arc. Arête orientée : synonyme d’arc. Bayes, Thomas : Bayes était un ministre presbytérien anglais (1701–1761). Il est l’auteur de quelques notes sur la déduction des causes à partir des effets qui ont été publiées après sa mort par l’un de ses amis sous le titre « An Essay towards Solving a Problem in the Doctrine of Chances ». Elles contiennent la formulation originelle du théorème des probabilités conditionnelles, plus connue sous le nom de théorème de Bayes. Ce résultat important a été publié indépendamment sous une forme mathématique plus élaborée par Pierre Simon Laplace. BIC : acronyme pour Bayesian Information Criterion ; l’un des scores de réseaux. BDe : acronyme pour Bayesian Dirichlet equivalent ; l’un des scores de réseaux.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 202 — #216
i
202
i
Réseaux bayésiens avec R
BGe : acronyme pour Bayesian Gaussian equivalent ; l’un des scores de réseaux. Chemin : un chemin est un ensemble de liens successifs ; il se décrit habituellement par la séquence des nœuds liés. Quand le chemin comprend des arcs, ceux-là doivent suivre la même orientation dans le chemin ; il s’agit alors d’un chemin orienté. Clique : dans le cadre d’un graphe non orienté, une clique est un sous-ensemble de nœuds tels que tout couple de nœuds soit deux nœuds adjacents. Une clique est dite maximale si tout nœud supplémentaire ajouté lui fait perdre sa qualité de clique. Configuration : la configuration du graphe est synonyme de structure du graphe. Connectés : on dit que deux nœuds sont connectés lorsqu’il existe au moins un chemin qui les relie ; quand le chemin est de longueur 1 (un seul arc ou une seule arête), alors ils sont aussi adjacents. Connexion convergente : l’une des trois connexions fondamentales entre trois nœuds illustrées en figure 1.4 (page 24). Deux nœuds sont les parents du troisième : A → B ← C. Connexion divergente : une connexion divergente est l’une des trois connexions fondamentales illustrées en figure 1.4 (page 24). Un nœud est le parent des deux autres : A ← B → C. Connexion en série : une connexion en série est l’une des trois connexions fondamentales entre trois nœuds illustrées en figure 1.4 (page 24). Grand-parent, parent et enfant : A → B → C. cpdag : acronyme pour Completed Partially Directed Acyclic Graph (en français graphe acyclique complété partiellement orienté). Le cpdag d’un graphe (partiellement) orienté acyclique est le graphe partiellement orienté construit sur le même ensemble de nœuds, qui conserve les mêmes v-structures et le même squelette. Deux dag qui ont le même cpdag sont équivalents dans le sens où ils supportent les mêmes distributions de probabilité au travers de rb associés. Deux dag équivalents ont le même cpdag. Cycle : un cycle est un chemin ayant le même nœud pour les deux extrémités, c’est-à-dire partant du et arrivant au même nœud. Les graphes peuvent comprendre des cycles qu’ils soient orientés ou non. dag : acronyme pour Directed Acyclic Graph (en français graphe acyclique orienté). C’est un graphe orienté qui n’a pas de cycle. Quelquefois, il y a confusion entre les rb et les dag ; un dag exprime seulement la structure d’indépendance conditionnelle du rb. Cependant, la représentation par dag est très commode pour discuter de la construction et de l’interprétation d’un rb. Descendant : un descendant d’un nœud est un autre nœud qui vient après lui dans au moins un chemin orienté. Distribution conditionnelle : la distribution de probabilité conditionnelle d’une variable aléatoire A par rapport à une autre variable aléatoire B est sa probabilité de distribution lorsque l’on sait que B est contraint, en particulier vaut
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 203 — #217
i
Annexe C. Glossaire
i
203
une valeur donnée b. En général, cette distribution dépend de b et se note Pr(A | B = b). Quand A et B sont indépendants, Pr(A | B = b) = Pr(A) quel que soit b, c’est-à-dire que la distribution conditionnelle est identique à la distribution marginale et ne dépend pas de b. Distribution de probabilité : la distribution de probabilité d’une variable particulière est une fonction définissant la probabilité de chaque événement possible de la variable aléatoire. Une probabilité est une valeur réelle non négative inférieure ou égale à 1. Une probabilité nulle signifie que l’événement associé est impossible et une probabilité de 1 signifie que l’événement est certain. Bien que les distributions de probabilité aient des formes différentes pour les variables discrètes et continues, elles partagent la plupart de leurs propriétés. Quand une variable aléatoire met en jeu plusieurs composantes, la distribution jointe se réfère aux événements décrivant toutes les composantes ; une distribution marginale se réfère aux événements décrivant un sous-ensemble (le plus souvent de taille 1) de composantes ; une distribution conditionnelle se réfère aux événements d’un sous-ensemble de composantes quand un autre sous-ensemble disjoint de composantes est fixé (ou restreint) à un événement conditionnant. Distribution jointe (ou conjointe) : la distribution de probabilité jointe ou conjointe d’un ensemble de variables aléatoires régit la probabilité de toute combinaison d’événements sur elles. Si les variables aléatoires sont indépendantes, alors la distribution jointe est simplement le produit des distributions marginales de toutes les variables. Distribution marginale : la distribution marginale d’une variable aléatoire est sa distribution de probabilité sans tenir compte des autres variables aléatoires auxquelles elle est reliée. Connaître les distributions marginales de variables aléatoires n’est pas suffisant pour en déduire leur distribution jointe sans hypothèses additionnelles, comme par exemple leur indépendance complète. Au contraire, il est possible de déduire les distributions marginales de la distribution jointe. Les distributions marginales peuvent aussi être dérivées pour des sous-ensembles de variables. d-séparation : deux sous-ensembles de variables d’un rb, A et B, sont dits dséparés par rapport à un troisième, C, quand ils sont graphiquement séparés selon la définition 4.2 (page 88). Suivant la définition 4.3 (page 89), cela signifie aussi que toute variable de A est indépendante de toute variable de B conditionnellement aux variables de C. Graphe : un graphe est un ensemble non vide de nœuds dans lequel chaque paire de nœuds est liée par au plus un lien. Les liens peuvent être des arcs ou des arêtes. Le graphe est dit orienté si tous ses liens sont des arcs, non orientés si tous ses liens sont des arêtes et partiellement orienté si on y trouve des arcs et des arêtes. Graphe acyclique : un graphe acyclique est un graphe qui ne comprend pas de cycle.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 204 — #218
i
204
i
Réseaux bayésiens avec R
Graphe connexe : un graphe est dit connexe si son squelette est tel que toute paire de nœuds est connectée. Graphe mixte : synonyme de graphe partiellement orienté. Graphe non orienté : graphe dont tous les liens entre nœuds sont des arêtes. Graphe orienté : un graphe orienté est un graphe dans lequel tous les liens sont des arcs (c’est-à-dire orientés). Graphe saturé : dans un graphe saturé, chaque nœud est adjacent à tous les autres nœuds : l’ensemble des nœuds forme une seule clique. Graphe triangulé : un graphe triangulé est un graphe sans clique de taille 1 ou 2. Graphe vide : un graphe vide est un graphe sans aucun lien ; en revanche, l’ensemble des nœuds est supposé ne pas être vide. Indépendance : dans un contexte probabiliste, deux variables aléatoires sont dites indépendantes si et seulement si la distribution conditionnelle de l’une par rapport à l’autre est identique à sa distribution marginale. Il s’agit d’une propriété symétrique, si [A | B] = [A] alors [B | A] = [B]. D’un point de vue intuitif, cela signifie que la connaissance de l’état pris par une variable ne modifie pas la connaissance que l’on peut avoir sur la distribution de l’autre. Information mutuelle : l’information mutuelle entre deux variables aléatoires est un indice de leur dépendance. Elle vérifie un certain nombre de bonnes propriétés : – sa nullité est équivalente à l’indépendance des deux variables, – c’est une quantité positive, – c’est une fonction symétrique entre les deux variables, – dans le cas de deux variables binormales, elle ne dépend que du coefficient de corrélation et vaut − 21 log(1 − ρ2 ). Elle se définit comme l’espérance du log du rapport de la densité jointe sur le produit des marginales. Lien : arc ou arête connectant deux nœuds. MI : acronyme pour Mutual Information, voir le terme « information mutuelle ». nœud : les nœuds sont, avec les liens, les éléments constitutifs des graphes ; les nœuds sont avec les arcs les éléments de base des dag. Dans un dag, un nœud peut être pourvu d’aucun, d’un ou de plusieurs parents ; un nœud peut posséder zéro, un ou plusieurs enfants. Ils sont associés aux variables des rb. Nœuds adjacents : on dit que deux nœuds sont adjacents quand ils sont reliés par un arc ou une arête. Nœud enfant : voir la définition donnée pour arc. Nœud extrémité : un nœud extrémité est soit le premier soit le dernier nœud d’un chemin.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 205 — #219
i
Annexe C. Glossaire
i
205
Nœud feuille : un nœud feuille est un nœud sans enfant. Nœud parent : se reporter à la définition proposée pour arc. Nœud racine : un nœud racine est un nœud sans parent. Nœuds voisins : les voisins d’un nœud sont tous les nœuds qui lui sont adjacents. Ordre topologique : l’un des ordres possibles sur les nœuds d’un dag respectant toutes les relations d’ordre entre paires de nœuds induites par les arcs. L’existence de cycles rendrait de tels ordres impossibles. Partiellement orienté : voir la définition de graphe. rb : un réseau bayésien définit la probabilité jointe d’un ensemble de variables aléatoires au travers de distributions locales univariées pour chacune des variables. Le type (marginal ou conditionnel) de ces distributions dépend du dag associé au rb. Les nœuds du dag sont associés aux variables du rb. Aux nœuds racines, on affecte une distribution marginale ; aux autres nœuds sont associées les distributions conditionnelles relatives à leurs seuls parents. Il existe une bijection entre les indépendances conditionnelles du rb et son dag qui est relatée en définition 4.1 (page 88). Le terme de réseau bayésien vient de l’usage récurrent du théorème de Bayes pour décomposer (ou recomposer) la distribution conjointe en distributions locales des nœuds et d’autres distributions d’intérêt selon les structures de dépendance codées dans le dag. En anglais, Bayesian network, voire belief network. rbg : un rb gaussien ou multinormal, sous-entendu linéaire gaussien. Sommet : (en anglais vertex /vertices) synonyme de nœud, surtout employé pour les graphes non orientés. Squelette : le squelette d’un graphe (partiellement) orienté est son graphe non orienté sous-jacent obtenu en remplaçant ses arcs par des arêtes. Structure : la structure d’un rb est l’ensemble de ses indépendances conditionnelles qui sont représentées par le dag associé. Variable aléatoire : une variable aléatoire est une variable dont la valeur est incertaine mais dont les occurrences suivent une distribution de probabilité. Les variables aléatoires peuvent prendre des formes très différentes, discrètes comme continues, univariables comme multivariables... v-structure : une v-structure est une connexion convergente où les deux parents ne sont pas liés. Remarquons que plusieurs v-structures peuvent être centrées sur le même nœud (c’est-à-dire avoir le même nœud enfant).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 206 — #220
i
i
7KLVSDJHLQWHQWLRQDOO\OHIWEODQN
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 207 — #221
i
i
Annexe D
Solutions D.1
Exercices du chapitre 1
1.1 À partir de la structure du dag de l’enquête étudiée dans ce chapitre et proposée en figure 1.2 : 1. Pour chaque nœud, lister les parents et les enfants. 2. Faire la liste des connexions fondamentales que l’on trouve dans ce dag et distinguer les trois cas de figure : en série, divergence ou convergence. 3. Ajouter un arc de (A) à (P), puis un autre de (T) à (E). Le graphe obtenu est-il valable pour la construction d’un rb ? Pourquoi ? 1. Voici les parents et les enfants de chacun des nœuds : – âge (A) : sans parent c’est un nœud racine ; un enfant (E) ; – sexe (S) : sans parent c’est un nœud racine ; un enfant (E) ; – niveau d’études (E) : deux parents (A et S) ; deux enfants (P et D) ; – profession (P) : un parent (E) ; un enfant (T) ; – domicile (D) : un parent (E) ; un enfant (T) ; – transport (T) : deux parents (P et D) ; sans enfant c’est un nœud feuille. 2. Le dag comprend les neuf connexions fondamentales suivantes : – A → E ← S (convergente) ; – A → E → P (en série) ; – A → E → D (en série) ; – S → E → P (en série) ; – S → E → D (en série) ; – P ← E → D (divergente) ; – E → P → T (en série) ; – E → D → T (en série) ; – P → T ← D (convergente).
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 208 — #222
i
208
i
Réseaux bayésiens avec R 3. L’ajout de A → P n’introduit aucun cycle ; le graphe est toujours un dag et peut supporter un rb valide. En revanche, l’ajout de T → E introduit les cycles suivants : T → E → D → T et T → E → P → T ; en conséquence, le graphe qui en résulte n’est pas acyclique et ne peut pas servir à la construction d’un rb.
1.2 En reprenant les distributions de probabilité proposées pour l’enquête dans la section 1.3 : 1. Pour chaque nœud, calculer le nombre de configurations des parents. 2. Calculer le nombre de paramètres de chaque distribution locale. 3. Calculer le nombre maximal de paramètres pour la distribution globale ainsi générée. 4. Ajouter un arc partant de (E) et arrivant sur (T). Reformuler la factorisation selon les distributions locales établie en équation (1.1). Comment le nombre de paramètres de chaque distribution locale est-il affecté ? 1. Les nombres de configurations pour les parents sont 2 × 3 pour E, 2 pour D, 2 pour P et 4 pour T. A et S n’ont aucun parent, leur nombre de configuration est donc 1. 2. Les nombres de paramètres libres des tables de probabilités marginales ou conditionnelles sont : 2 pour A, 1 pour S, 6 × 1 pour E, 2 × 1 pour P, 2 × 1 pour D et 4 × 2 pour T. Effectivement, il faut retirer un degré de liberté au nombre de probabilités puisque leur somme fait 1. 3. Le nombre de paramètres libres (dimension paramétrique) de la distribution globale est la somme des nombres de paramètres libres de toutes les distributions locales, ce qui fait un total de 21. 4. L’ajout de l’arc E → T modifie l’équation (1.1) de la manière suivante : Pr(A, S, E, P, D, T) = Pr(A) Pr(S) Pr(E | A, S) Pr(P | E) Pr(D | E) Pr(T | E, P, D). Le nombre de paramètres libres de la distribution locale de T devient alors 2 × 8 du fait de l’augmentation de ses configurations parentales ; toutes les autres distributions locales restent inchangées. 1.3 À partir de la structure du dag de l’enquête étudiée dans ce chapitre et proposée en figure 1.2 : 1. Créer un objet de classe bn du dag correspondant. 2. Utiliser les fonctions ad hoc du paquet bnlearn et l’objet qui vient d’être créé pour extraire les nœuds et les arcs du graphe. Extraire également les parents et les enfants de chaque nœud. 3. Afficher la formule du modèle de bn.
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 209 — #223
i
Annexe D. Solutions
i
209
4. Avec les données enquete.txt, estimer les paramètres de ce rb en utilisant une approche bayésienne et sauver le résultat dans un objet de classe bn.fit. 5. Retirer l’arc qui existe entre (E) et (P). 6. Ajuster de nouveau les paramètres du modèle. Quelles sont les distributions locales qui sont modifiées ? Pourquoi ? 1. La façon la plus facile est sans doute d’utiliser l’équation (1.1) et la fonction model2network ainsi : > dag nodes(dag) [1] "A" "D" "E" "P" "S" "T" > arcs(dag) [1,] [2,] [3,] [4,] [5,] [6,]
from "A" "S" "E" "E" "P" "D"
to "E" "E" "P" "D" "T" "T"
> par chld modelstring(dag) [1] "[A][S][E|A:S][D|E][P|E][T|D:P]" 4. > enquete fitted dag2 fitted2 dim(coef(fitted$P)) [1] 2 2 > dim(coef(fitted2$P)) [1] 2
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 210 — #224
i
210
i
Réseaux bayésiens avec R
1.4 Recréer l’objet bn.mle utilisé dans la section 1.4. 1. Pour la variable (P), comparer la distribution marginale avec celle conditionnée par (A) en utilisant une fonction du paquet querygrain. 2. Combien de simulations sont-elles nécessaires (en utilisant la fonction cpquery) pour obtenir des estimations précises à 0.01 sur les distributions concernées ? 3. Utiliser les fonctions de bnlearn pour extraire la structure du graphe. 4. Quels sont les nœuds qui d-séparent (A) et (P) ? 1. L’âge (A) n’a pas grand effet sur la distribution de la variable P comme le montrent les calculs des probabilités marginales et conditionnelles qui suivent : > library(gRain) > junction querygrain(junction, nodes = "P")$P P lib non lib 0.034 0.966 > jage querygrain(jage, nodes = "P")$P P lib non lib 0.0356 0.9644 > jage querygrain(jage, nodes = "P")$P P lib non lib 0.0364 0.9636 > jage querygrain(jage, nodes = "P")$P P lib non lib 0.0261 0.9739 2. Quelques essais montrent que 103 simulations sont suffisantes pour la pondération par vraisemblance (en anglais likelihood weighting), alors qu’il en faut au moins 104 pour l’échantillonnage direct (en anglais logic sampling) : > set.seed(123) > cpquery(bn.mle, event = (P == "non lib"), + evidence = list(A = "jeune"), method = "lw", + n = 10^3)
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 211 — #225
i
Annexe D. Solutions
i
211
[1] 0.96 > cpquery(bn.mle, event = (P == "non lib"), + evidence = (A == "jeune"), method = "ls", + n = 10^4) [1] 0.969 3. > dag sapply(nodes(dag), function(z) dsep(dag, "A", "P", z)) A D TRUE FALSE
E TRUE
P S T TRUE FALSE FALSE
1.5 A partir de la description faite en §1.4, créer une nouvelle fonction R permettant de répondre à une requête simple en utilisant un algorithme d’acceptation-rejet. > rejection.sampling pp graphviz.plot(dag, highlight = list(arcs = pp)) 4. > bn.fit.barchart(bn$E) 5. > > > > > > > + > + >
D.2
library(gRain) junction > > >
sG + > + > + > > +
library(bnlearn) dag.bnlearn + + + + + + +
library(rjags) pf + + + + + + + + + + + >
library(rjags) pf dag100.smc narcs(dag100.smc) [1] 1 > score(cextend(dag100.mc), enquete, type = "bic") [1] -2008.116 > score(cextend(dag100.smc), enquete, type = "bic") [1] -2008.116
4.2 Toujours à partir du jeu de données enquete utilisé dans le chapitre 1. 1. Apprenez un rb par approche bayésienne, aussi bien pour la structure que pour les valeurs des paramètres, en utilisant une taille d’échantillon imaginaire de iss = 5. 2. Répétez l’apprentissage de structure avec l’algorithme hc en pratiquant 3 redémarrages aléatoires avec tabu. Les rb obtenus diffèrentils ? Peut-on imaginer qu’il y ait une difficulté liée au calcul numérique, ou encore un manque de convergence ? 3. Utilisez des sous-ensembles de taille croissante du jeu de données enquete pour vérifier empiriquement que BIC et BDe sont asymptotiquement équivalents. 1. > dag bn dag.hc3 dag.tabu modelstring(dag.hc3) [1] "[T][D|T][E|D][A|E][P|E][S|E]"
i
i i
i
i
i “livre” — 2014/9/29 — 12:59 — page 223 — #237
i
Annexe D. Solutions
i
223
> modelstring(dag.tabu) [1] "[P][S][E|P:S][A|E][D|E][T|D]" Les deux dag sont très différents ; à partir de la factorisation de leurs probabilités données ci-dessus, l’algorithme hc semble le plus proche de ce que propose la figure 1.2. Les scores BIC de dag.hc3 et de dag.tabu semblent suggérer que hc avec des redémarrages aléatoires produit le meilleur ajustement aux données : > score(dag.hc3, enquete) [1] -1998.432 > score(dag.tabu, enquete) [1] -1999.733 L’utilisation de l’option debug pour détailler les chemins empruntés par les processus d’apprentissage permet de penser qu’aucun problème numérique n’apparaît puisque tous les dag appris à partir des redémarrages aléatoires s’ajustent de manière raisonnable aux données. 4.3 À partir du jeu de données marks présenté en §4.7. 1. Créez un objet bn associé au graphe en bas à droite de la figure 4.5 en le nommant mdag. 2. Trouvez le squelette, le cpdag et le graphe moralisé de cet objet mdag. 3. Discrétisez les variables des données marks avec l’option "interval" en prenant successivement deux, trois et quatre intervalles. 4. Réalisez l’apprentissage de structure avec l’algorithme hc sur chacun des ensembles de données discrétisées ; en quoi les différents dag obtenus diffèrent-ils ? 1. > mdag mdag.sk mdag.cpdag mdag.moral > > >
data(marks) dmarks2 >
dag2