CHAPITRE V : CONSTRUCTION DU NOUVEAU SYSTEME
Le développement de ce chapitre sera centré sur
la modélisation de la base de connaissances qui fera l'objet de la
première section, implémentation de la base de connaissances
objet de la deuxième section et enfin la codification comme objet de la
troisième et dernière section.
5.1. Construction de la base de faits
Nous décrivons dans les lignes suivantes les
différents symptômes
(faits) :
F1 : Patient a une fièvre en plateau ;
F2 : patient a une asthénie physique ;
F3 : patient a un pouls élevé ;
F4 : patient a de l'anorexie ;
F5 : patient a une rate grossie inconstante ;
F6 : patient a de maux de tête intense ;
F7 : Patient a des douleurs abdominales ;
F8 : patient est dans la septicémie.
5.2. Construction de la base de
connaissances.
Il existe plusieurs modèles ou mécanismes de
représentation des connaissances d'un expert. Citons à titre
d'exemple, les règles de production, les objets, les réseaux
sémantiques, les graphes conceptuels, la logique avec le calcul de
prédicats, la logique floue, les réseaux bayésiens.
Dans le langage informatique, nous appellerons :
V' Clinique ou symptômes : Fait
V' Méthode de diagnostic : règle de production V'
Ensemble de méthodes ; base de règles
Pour ce qui nous concerne, puisqu'il s'agit d'une
décision médicale, nous utilisons dans le cadre de notre
diagnostic les modèles probabilistes notamment le réseau
bayésiens (RB) du fait que dans le
[67]
raisonnement de médecin plusieurs symptômes
identiques peuvent aboutir à des maladies différentes.
Le raisonnement médical part d'un examen clinique
cognitif qui est un ensemble de données interrogatoires. En effet,
à partir des symptômes observés(les signes cliniques), le
médecin identifie les facteurs prédisposant et sur la base
desquels plusieurs hypothèses sont établies.
5.2.1. Les réseaux bayésiens
Un réseau bayésien est en informatique et en
statistique un modèle graphique probabiliste qui aide à
gérer l'incertitude. Graphiquement, un réseau bayésiens
est une succession acyclique de noeuds, qui représentent des
états incertains de variables, reliées par des flèches qui
sont les relations de cause à effet entre les variables.
A chaque variable est associée une table contenant les
probabilités d'un nombre fini d'états mutuellement exclusifs. Si
un noeud ne possède pas de flèche entrante, alors la table
contiendra des probabilités non conditionnelles. Si par contre, il en
reçoit, il devient le noeud enfant d'un ou plusieurs parents, et la
table associée à ce noeud contiendra des probabilités
conditionnelles dépendantes des variables des noeuds parents.
Intuitivement, ils sont à la fois :
? des modèles de représentation des connaissances
;
? des « machines à calculer » les
probabilités conditionnelles ;
? une base pour des Système d'aide à la
décision.
En ce qui concerne notre diagnostic, il sera question de
décrire les relations causales entre variables d'intérêt
par un graphe. Dans ce graphe, les relations de cause à
effet entre les variables ne sont pas déterministes, mais
probabilistes. Ainsi, l'observation d'une cause ou de
plusieurs causes n'entraîne pas systématiquement l'effet ou les
effets qui en dépendent, mais modifie seulement la probabilité de
les observer.
L'intérêt particulier des réseaux
bayésiens est de tenir compte simultanément de connaissances a
priori d'experts (dans le graphe) et de l'expérience contenue dans les
données.
[68]
5.2.2. Construction et présentation du
modèle
Il existe trois méthodes de construction des
réseaux bayésiens18 que nous citons :
Automatique : elle est faite par application d'un algorithme
d`apprentissage à une base de données.
Manuel : à l'aide d'expert humain en l'occurrence les
médecins, les spécialistes en ingénierie de connaissances
interrogent les experts et ajoutent les noeuds, les liens, et les
probabilités conditionnelles au réseau sur la base de
connaissances recueillie.
Hybride : dans cette approche, la structure du réseau
est décrite avec l'aide des experts humains et les probabilités
sont obtenues à partir d'une base de données.
En ce qui nous concerne, puisqu'il s'agit d'un diagnostic
différentiel, le modèle a été construit suivant une
méthode manuelle, ce qui nous a permis d'entrer en contact avec les
experts du domaine notamment les médecins généralistes
dont : Dr Christian MPAMU et Jean-Jacques MUYEMBE Fils où nous
étions appelés à acquérir toutes les connaissances
en termes de symptômes et signes possibles de la maladie ainsi que ses
différentes probabilités.Nous même avons joué le
rôle d'ingénieur de connaissances, ce qui nous a d'abord
aidé à représenter ces différentes connaissances
par un graphe causal et pour cela nous avons fait appel au logiciel de
réseau bayésien Netica.
Nous présentons ci-dessous notre modèle
bayésien pour la
représentation de notre base de connaissances
18Patrick, N., Pierre-Henri, V., Philipp, L., Anna,
B., Réseaux bayésiens, Ed.
Eyrolles, Paris,2002.
[69]
Figure 18: Modèle bayésien construit sur Netica.
[70]
Le modèle ci-haut présenté nous aide
à représenter des connaissances qualitatives et quantitatives
exprimant l'incertitude pour le diagnostic de la fièvre typhoïde.
Chaque noeud du modèle est soumis à une certaine
probabilité dans la table, lesquelles probabilités nous ont
été donné par les experts du domaine que nous avons
cités plus haut. Ces différentes probabilités doivent
ainsi être évaluées.
5.1.3. Inférence du modèle
bayésien
L'inférence consiste à calculer la
probabilité d'un ou plusieurs noeuds du réseau bayésien
conditionnellement à un ensemble d'observation. Cette partie permet
d'évaluer, tirer ou contrôler les probabilités de la
distribution de probabilités postérieures. Elle sert à
fournir le résultat final du diagnostic par l'utilisation d'un
algorithme.
Il existe plusieurs algorithmes pour la mise en oeuvre du
réseau bayésien dans le cadre du diagnostic et plus
particulièrement le diagnostic médical, par exemple, la logique
floue, l'algorithme K2, IC, IC*, PC, MWST, pour ne citer que ceux-ci.
Pour ce qui nous concerne, nous appliquons l'algorithme
Pearl.
Algorithme Pearl
Il passe par deux étapes :
1. étapes de propagation : son principe est simple, il
fonctionne comme suit :
a. initialisation des probabilités des variables du
réseau.
b. Faire passer le message ð entre les variables du
réseau appelées autrement paramètres.
c. Chaque variable reçoit le message ð doit avoir
envoyé le message qui porte la probabilité du parent.
d. A la réception du message ð, les
récepteurs des messages des niveaux supérieurs mettent à
jour leurs probabilités puis ils recalculent le message ð pour
obtenir la probabilité actuelle par la formule suivante :
( ) ( ) ( )
e. le premier niveau calcule sa probabilité par la
formule :
( ) ( )
[71]
f. pour les valeurs du dernier niveau il n'y a pas de message
à envoyer, ils mettent à jour ses probabilités à la
lumière du message reçu.
2. Etape de recherche
Le point d'arrêt de l'étape de propagation
représente le point de départ pour l'étape de recherche
qui fournira le résultat final du diagnostic. Au dernier niveau on a le
résultat du diagnostic ayant la probabilité sachant les
observations.
( ( ))
Où M=maladie, e= évidence.
Dans notre cas, le réseau bayésien est sans
circuit, ce qui nous a permis d'utiliser l'algorithme d'inférence de
Pearl. Avec cet algorithme il est possible d'inférer la valeur n'importe
quelle variable du graphe. Ce qui donne des probabilités d'utilisation
plus adaptée.
5.2. Implémentation du modèle
Pour implémenter notre base de connaissance construit
au modèle bayésien, nous allons stockerles différents
noeuds sous forme d'arborescence, et cela avec le langage XML.
5.2.1. Le langage XML
L'Extensible Markup Language
(XML, (< langage à balise extensible
» en français) est un langage informatique de balisage
générique qui dérive du SGML. Cette syntaxe est dite (<
extensible » car elle permet de définir différents espaces
noms, c'est-à-dire des langages avec chacun leur vocabulaire et leur
grammaire, comme XHTML, XSLT, RSS, SVG... Elle est reconnaissable par son usage
des chevrons (< >) encadrant les balises.
L'objectif initial est de faciliter l'échange
automatisé de contenus
complexes (arbres, texte riche...) entre
systèmes d'informationshétérogènes
(interopérabilité). Avec ses outils et langages associés,
une application XML respecte généralement certains principes :
? la structure d'un document XML est définie et validable
par un schéma;
[72]
? un document XML est entièrement transformable dans un
autre document XML.
5.2.2. Présentation des arborescences des noeuds
du modèle
<?xml version="1.0"encoding="iso-8859-1"?>
<thyphoide>
<fievre>
<plateau>
<probabilite>0.75</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
<pouls_eleve><probabilite>0.30</probabilite>
<etat1>oui</etat1>
<etat2>non</etat2>
</pouls_eleve>
<plus_15_jours>
<insomnie><probabilite> 0.25</probabilite>
<etat1>oui</etat1>
<etat2>non</etat2> </insomnie>
<maux_de_tete>
<probabilite>0.60 </probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</maux_de_tete>
<rate_grossie>
<probabilite>0.50</probabilite>
[73]
<etat1>oui</etat1> <etat2>non</etat2>
<inconstant><probabilite>0.40</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</inconstant>
<constant><probabilite>0</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</rate_grossie>
<asthenie><probabilite>0.50</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</asthenie>
</plus_15_jours>
</plateau>
<sans_plateau>
<probabilite>0.10</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
<moins_15_jours><probabilite></probabilite>
<etat1>oui</etat1> <etat2>oui</etat2>
<anorexie>
<probabilite>0.05</probabilite>
<etat1>oui</etat1>
[74]
<etat2>non</etat2> </anorexie>
<asthenie>
<probabilite>0.75</probabilite>
<etat1>oui</etat1>
<etat2>non</etat2> </asthenie>
<maux_de_tete>
<probabilite>0.75</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</maux_de_tete> </sans_plateau>
<douleur_abdominale>
<probabilite>0.75</probabilite>
<etat1>oui</etat1> <etat2>non</etat2>
</douleur_abdominale>
</fievre>
</thyphoide>
</?xml>
5.2.3. Quelques codes sources de l'application en
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
[75]
using System.Data.SqlClient;
namespace FORM_MAJ_MALADE
{
public partial class Form5 : Form
{
private string INSERTSQL = "INSERT INTO [Patient] ([CodMal]
,[NomMal],[SexMal],[AgeMal],[Pouls],[TensArt],[Temperature])
"+
" VALUES
(@CodMal ,@NomMal,@SexMal,@AgeMal,@Pouls,@TensArt,@Temperature)";
private string UPDATESQL = "UPDATE [Patient]
SET [NomMal]=@NomMal,[SexMal]=@SexMal,[AgeMal]=@AgeMal,[Pouls]=@P
ouls,[TensArt]=@TensArt,[Temperature]=@Temperature WHERE
[CodMal]=@CodMal ";
private string DELETESQL = "DELETE FROM [Patient] WHERE
[CodMal]=@CodMal";
private string SELECTSQL = "SELECT [CodMal]
,[NomMal],[SexMal],[AgeMal],[Pouls],[TensArt],[Temperature]FROM
[Patient]";
private string CONDITION = "WHERE CodMal=@CodMal";
private SqlConnection ConnexionBD= new SqlConnection("Data
Source=.;Initial Catalog=BDDSAD;Integrated Security=True");
public Form5()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
if (txtCodeMalade.Text != "") {
using (SqlCommand cmd =new SqlCommand(INSERTSQL)){ cmd.Connection
= ConnexionBD;
cmd.Parameters.AddWithValue("@CodMal", txtCodeMalade.Text);
cmd.Parameters.AddWithValue("@NomMal", txtNomMalade.Text);
cmd.Parameters.AddWithValue("@SexMal", cboSexeMalade.Text);
cmd.Parameters.AddWithValue("@AgeMal", txtAgeMalade.Text);
cmd.Parameters.AddWithValue("@Pouls", txtPoulsMalade.Text);
cmd.Parameters.AddWithValue("@TensArt",
txtTempArtMalade.Text);
MessageBox.Show("Malade Modifie", "Information",
MessageBoxButtons.OK, MessageBoxIcon.Information);
[76]
cmd.Parameters.AddWithValue("@Temperature",
txtTemperatureMalade.Text);
if (cmd.ExecuteNonQuery() != 0) {
MessageBox.Show("Malade Enregistré",
"Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
clean();
}
}
}
else {
MessageBox.Show("Veuillez introduire le Code du Malade",
"Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void button2_Click(object sender, EventArgs e)
{
if (txtCodeMalade.Text != "")
{
using (SqlCommand cmd = new SqlCommand(UPDATESQL))
{
cmd.Connection = ConnexionBD;
cmd.Parameters.AddWithValue("@CodMal",
txtCodeMalade.Text);
cmd.Parameters.AddWithValue("@NomMal",
txtNomMalade.Text);
cmd.Parameters.AddWithValue("@SexMal",
cboSexeMalade.Text);
cmd.Parameters.AddWithValue("@AgeMal",
txtAgeMalade.Text);
cmd.Parameters.AddWithValue("@Pouls",
txtPoulsMalade.Text);
cmd.Parameters.AddWithValue("@TensArt",
txtTempArtMalade.Text);
cmd.Parameters.AddWithValue("@Temperature",
txtTemperatureMalade.Text);
if (cmd.ExecuteNonQuery() != 0)
{
I
[77]
clean();
I
I
I else
{
MessageBox.Show("Veuillez introduire le Code du Malade",
"Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
I
I
private void button3_Click(object sender, EventArgs e) {
if (txtCodeMalade.Text != "")
{
using (SqlCommand cmd = new SqlCommand(DELETESQL))
{
cmd.Connection = ConnexionBD;
cmd.Parameters.AddWithValue("@CodMal",txtCodeMalade.Text);
if (cmd.ExecuteNonQuery() != 0)
{
MessageBox.Show("Malade Supprimé", "Information",
MessageBoxButtons.OK, MessageBoxIcon.Information);
clean();
I
I
I
else
{
MessageBox.Show("Veuillez introduire le Code du Malade",
"Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
I
I
private void button4_Click(object sender, EventArgs e) {
this.Hide();
[78]
private void btnRechercher_Click(object sender, EventArgs e) {
if (txtCodeMalade.Text != "")
{
using (SqlCommand cmd =new SqlCommand(SELECTSQL +
CONDITION)){
cmd.Connection = ConnexionBD;
cmd.Parameters.AddWithValue("@CodMal", txtCodeMalade.Text);
SqlDataReader Rs = cmd.ExecuteReader(); if (Rs.Read()) {
txtNomMalade.Text = Rs.GetString(1); cboSexeMalade.Text =
Rs.GetString(2); txtAgeMalade.Text = Rs.GetString(3); txtPoulsMalade.Text =
Rs.GetString(4); txtTempArtMalade.Text = Rs.GetString(5);
txtTemperatureMalade.Text = Rs.GetString(6);
}else{
MessageBox.Show("Malade non Trouvé", "Information",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
else
{
MessageBox.Show("Veuillez introduire le Code du Malade",
"Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void label7_Click(object sender, EventArgs e) {
}
private void clean() {
txtCodeMalade.Text = "";
[79]
txtNomMalade.Text = "";
cboSexeMalade.Text = "";
txtAgeMalade.Text = "";
txtPoulsMalade.Text = "";
txtTempArtMalade.Text = "";
txtTemperatureMalade.Text = "";
I
private void Form5_Load(object sender, EventArgs e)
{
try {
ConnexionBD.Open();
I
catch (Exception ex) {
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
I
I
I
I
[80]
|