WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Modélisation et implémentation d'un système d'aide à  la décision pour le diagnostic de la fievre thyphoà¯de

( Télécharger le fichier original )
par Josué MISSWAY
ISC-Kinshasa - Licence 2015
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

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]

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Ceux qui rĂªvent de jour ont conscience de bien des choses qui échappent à ceux qui rĂªvent de nuit"   Edgar Allan Poe