Sunteți pe pagina 1din 5

HE Arc

IARTI 2008 2009

Rseaux baysiens avec OpenBayes

1 Introduction
Le but de ce TP va tre de vous familiariser avec les rseaux baysiens. Pour ce faire, nous nous baserons sur lutilisation dOpenBayes (http://www.openbayes.org/). OpenBayes est un module python permettant de dnir des rseaux baysiens et incluant des algorithmes de propagation de croyances. Malgr le fait quil soit actuellement en version 0.1 et que son dveloppement soit pour linstant suspendu, il est assez facile daccs et ses fonctionnalits nous permettront de mettre en pratique une partie de la thorie vue au cours.

2 Installation
1. Installez Numarray Windows : Rcuprez linstalleur numarray-1.5.2.win32-py2.5.exe sur le serveur et lancez-le. Linux (bas Debian) : sudo apt-get install python-numarray. Autres plate-formes : rcuprez numarray-1.5.2.tar.gz sur le serveur, dcompressezle et, dans le rpertoire ainsi obtenu, tapez python setup.py install. 2. Installez OpenBayes Windows : Rcuprez linstalleur OpenBayes-0.1.0.win32.exe sur le serveur et lancez-le. Autres plate-formes : rcuprez OpenBayes-0.1.0.tar.gz sur le serveur, dcompressezle et, dans le rpertoire ainsi obtenu, tapez python setup.py install. Pour voir si tout sest bien pass, lancez un interprteur python et tapez :
>>> import OpenBayes

Si aucune erreur ne survient, vous pouvez passer la suite.

3 Construire un rseau
Pour prendre en main OpenBayes, nous allons tudier la situation suivante : Un arbre peut perdre ses feuilles pour deux raisons : soit il est malade, soit le sol est trop sec. Il y a a priori 10% de chances quil soit malade ; de mme, la probabilit que le sol soit sec est de 10%. Les probabilits conditionnelles de perte de feuilles en fonction de la scheresse et de la maladie sont les suivantes :

1/5
distribu sous licence creative common | dtails sur www.matthieuamiguet.ch

HE Arc

IARTI 2008 2009

malade

sec

perd_feuilles

F IG . 1: Un rseau simple

perd_feuilles perd_feuilles

malade 0.95 0.05

sec malade 0.85 0.15

sec malade malade 0.90 0.02 0.10 0.98

Nous allons donc construire dans OpenBayes le rseau de la gure 1. Pour ce faire, nous allons commencer par importer du module OpenBayes les lments dont nous aurons besoin :
from OpenBayes import BNet , BVertex , DirEdge , JoinTree

Ensuite, nous crons le rseau lui-mme :


G = BNet ( B o t a n i c a l P r o b l e m )

Largument est simplement le nom du rseau et na au fait pas grande importance. Crons maintenant les variables (noeuds, angl. vertex) de notre rseau ; pour crer un noeud, nous avons besoin de trois paramtres : une chane pour le nom de la variable un boolen indiquant si la variable est discrte (True) ou continue (False) le nombre dtats de la variable Dans notre cas, cela donne donc :
s = G . add_v ( BVertex ( s , True , 2 ) ) d = G . add_v ( BVertex ( d , True , 2 ) ) l = G . add_v ( BVertex ( l , True , 2 ) )

Il ne nous reste plus qu crer les ches (angl. edges) ; pour chacune, nous devrons donner trois arguments : un ID unique (0, 1, 2, . . .) le point de dpart et le point darrive Ainsi, nous pourrions crer nos ches avec le code :
G . add_e ( DirEdge ( 0 , s , l ) ) G . add_e ( DirEdge ( 1 , d , l ) )

Avec deux ches, a va, mais quand nous en aurons 15 cela fera beaucoup de copier-coller (ce qui est inacceptable dans un cours de programmation avance. . .). Nous remplacerons donc le code ci-dessus par :
for e in [ ( s , l) ,(d , l) ] : G . add_e ( DirEdge ( len ( G . e ) , e ) )

Notre rseau est prt. Ajoutez encore la ligne suivante :


print G

Sauvez puis excutez votre code. Vous devriez voir une description du rseau safcher sur la sortie standard.

2/5
distribu sous licence creative common | dtails sur www.matthieuamiguet.ch

HE Arc

IARTI 2008 2009

4 Tables de probabilits
Notre rseau nest pour linstant pas complet : sa structure est dtermine, mais il y manque les tables de probabilit ! Tout dabord, il faut prparer le terrain :
G . InitDistributions ( )

Ensuite, on va entrer les probabilits a priori des noeuds s et d :


s . setDistributionParameters ( [ 0 . 9 , 0 . 1 ] ) d . setDistributionParameters ( [ 0 . 9 , 0 . 1 ] )

Enn, les probabilits conditionnelles du noeud l, selon une syntaxe assez transparente :
l . distribution [ { l . distribution [ { l . distribution [ { l . distribution [ { s :0 s :0 s :1 s :1 , , , , d :0}]=[.98 , .02] d :1}]=[.15 , .85] d :0}]=[.1 , .9] d :1}]=[.05 ,.95]

Notre rseau est maintenant complet ; nous allons tenter de lutiliser pour du raisonnement.

5 Infrence baysienne
Pour propager des probabilits travers le rseau, on commence par crer un moteur de calcul :
ie = JoinTree ( G )

On peut maintenant directement calculer les probabilits qui nous intressent :


p r i n t ie . Marginalise ( l )

Excutez votre programme ; vous devriez voir quen labsence dinformations complmentaires, nos arbres ont presque 82% de chances de garder leur feuilles. Maintenant, en regardant dans le jardin, vous constatez que les arbres perdent quand mme leurs feuilles :
ie . SetObs ( { l : 1 } )

Si vous vous demandez quelles sont les nouvelles probabilits dans le rseau suite cette information, vous pouvez tout calculer dun coup :
results = ie . MarginaliseAll ( ) f o r n , r i n results . items ( ) : p r i n t r , " \ n "

Il y a donc 47% de chances que votre sol soit sec et 49% pour que vos arbres soient malades. Vous arrosez rgulirement vos plantation et pourtant elles perdent toujours leurs feuilles1 ?
ie . SetObs ( { l : 1 , d : 0 } ) p r i n t ie . Marginalise ( s )

Vous avez donc 83% de chances que vos arbres soient malades...

1 Notez

que le nouveau SetObs crase les informations prcdentes. Donc si on veut ajouter une nouvelle observation, il faut rpter la/les prcdente(s).

3/5
distribu sous licence creative common | dtails sur www.matthieuamiguet.ch

HE Arc

IARTI 2008 2009

6 vous de jouer !
6.1 Licenci ou augment ?
Voici une situation hautement raliste : ;)

Dans lentreprise Bayes&Co, il y a un patron despotique qui dcide priodiquement de licencier des employs et daugmenter le salaire dautres employs. Sa politique nest pas trs populaire car il y a autant de licenciements que daugmentations. Chaque fois que le patron prend une de ces dcisions, elle doit tre traite par le dpartement des ressources humaines et par la comptabilit, qui envoient ensemble une notication lemploy (mal)heureux. Le dpartement des ressources humaines compte trois employs : Janet, Jim et Julia. Lors dun licenciement, Janet soccupe du dossier dans 30% des cas, Jim dans 35% et Julia 35%. Si par contre il sagit dune augmentation de salaire, les proportions passent 20%, 20% et 60% respectivement. la comptabilit travaillent James et Jules. Lors dun licenciement, James soccupe de 37% des cas (et Jules de 63%), alors que lors dune augmentation la proportion passe 42% (et donc 58% pour Jules). Les employs concerns peuvent tre avertis au choix par mail ou par courrier. Il suft que les deux responsables du dossier se mettent daccord. On constate donc que Janet et James crivent une lettre dans 40% des cas (et donc un mail dans 60% des cas) ; mais lorsque Janet collabore avec Jules, ces proportions sont de 70% et 30% ; pour Jim et James 30% et 70% ; pour Jim et Jules 65% et 35% ; pour Julia et James 25% et 75% ; enn pour Julia et Jules, 55% et 45%. Sur la base de cette situation : 1. Dessinez (sur papier !) un rseau baysien reprsentant cette situation. Au besoin, aidezvous de la feuille Construire un rseau baysien : Aide mmoire distribue au cours. 2. En utilisant OpenBayes, crivez un programme implmentant ce rseau. 3. Utilisez ce programme pour rpondre aux questions suivantes : a) Jeremy a reu ce matin une lettre de Janet et Jules ; quelle est la probabilit quil sagisse dune lettre de licenciement ? (rponse : 62%) b) Et sil a reu une lettre de Jim et James ? (rponse : 61%) c) Si tout ce que Jeremy sait, cest que Julia est en charge dun dossier le concernant, quels sont ses risques dtre licenci ? (rponse : 37%) d) Jeremy a reu un mail ce matin, mais il ne sait pas qui a trait son dossier. Quelle probabilit a-t-il dy lire une annonce daugmentation de salaire ? (rponse : 52%)

6.2 Enqute
Un cambriolage a t constat au sige de lentreprise BN Tech. Une enqute prliminaire a permis de montrer que le coupable a opr seul et quil sagit forcment de lun des 100 employs que compte lentreprise. Quelques jours plus tard, la police a reu une lettre anonyme accusant Pierre Kiroul, un nouvel employ de BN Tech. La police a immdiatement relev ses empreintes digitales et les a compar celles retrouves sur le lieu du forfait. Aucune trace correspondant M. Kiroul na pu tre mise en vidence.

4/5
distribu sous licence creative common | dtails sur www.matthieuamiguet.ch

HE Arc

IARTI 2008 2009

Mais selon linspecteur de la police scientique charg de laffaire, il ne faudrait pas en tirer des conclusions htives. En effet, le vol a pu tre effectu avec des gants. Environ 45% des cambrioleurs recourent cette technique (alors que la probabilit de mettre des gants sans faire de cambriolage peut tre considre comme nulle, dans ce contexte). Si le voleur na pas mis des gants, il y a 99% de chances que nous dtections ses empreintes ; mais avec des gants, cette chance tombe 2%. La probabilit dobserver les empreintes de quelquun de non-compable sur les lieux du crime est de 5%, estime lexpert de la police. ce point-l de lhistoire (1), Pierre semblait presque hors de cause. Mais la police avait galement trouv sur le lieux du forfait quelques cheveux du coupable, ce qui lui a permis de faire une analyse ADN. Cette analyse a provoqu un retournement de situation : lADN du coupable correspondait celui de Pierre ! Ce test est dune grande abilit ; les taux de faux positifs et de faux ngatifs sont tous deux 0.1%. Autant dire que nous avons maintenant une quasi-certitude que M. Kiroul est le coupable, triomphe linspecteur. (2) Pierre Kiroul a donc t accus ; son procs, son avocat a brillamment montr que Pierre tait dans limpossibilit de se fournir le type de gants ncessaire la ralisation propre du crime dont on laccusait. Lhypothse que Pierre portait des gants doit donc tre carte. (3) M. Kiroul va-t-il tre condamn ou acquitt ? Sur la base du palpitant thriller ci-dessus : 1. Reprsenter la situation sous forme de rseau baysien (sur papier, avec les tables de probabilit). 2. En utilisant OpenBayes, crivez un programme implmentant ce rseau. 3. Utiliser cette implmentation pour calculer la probabilit de culpabilit de Pierre Kiroul aux points (1), (2) et (3) de lhistoire ci-dessus. (Rponses : 0.5%, 82.6%, 5.5%).

5/5
distribu sous licence creative common | dtails sur www.matthieuamiguet.ch

S-ar putea să vă placă și